近年来,我一直在使用jenkins 来部署自己的项目,发现太耗内存了,

因此将自动化部迁的操作改为使用github action。

初始化action配置

选择一个合适的action类型,比如webpack、gitPage、Nodejs等等。

比如我这里选择了webpack,选择完成后 可以看到在仓库里多了一个文件 .github/workflows/webpack.yml

由此可以推得:“参与自动化,其实就是编写一个yml工作流文件”,所以其实你也可以不选择,纯手建,麻烦些而已。

创建一些变量

后续涉及到部署的时候,服务器的ip、密钥什么的不适合直接编码在yml中,因此 git action允许你创建一些变量在仓库的设置中定义,在yml中引用

进入setting > secrets and variables > Actions的目录下,比如设置如下三个配置项

最后在yml中使用即可

#...
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT}}

部署到私有服务器

如果你不想将项目部署到gitPage,而是想部署到自己服务器上,我们可以编写shell脚本来调用ssh+rsync等来完成部署操作!

不过已经有现有action插件 ssh-deploy供使用,简化了我们自己编码的麻烦。

需要注意的是,这个插件有点坑:

  • 一致提示没有权限 Permission denied,经过特意的学习了一番 ssh和rsync后才知道,我的问题是---作者已经提醒过的 “手动将公钥添加到authorized_keys中”

前端项目-webpack

一个较完整的前端项目配置

name: NodeJS with Webpack

on:
push:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest steps:
- name: 迁出代码
uses: actions/checkout@main - name: 安装Node
uses: actions/setup-node@main
with:
node-version: "20.x" - name: 安装依赖
run: yarn - name: 打包
run: npm run build - name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "build/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/book-fe

后端项目-java

name: Java CI with Maven

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ] jobs:
build: runs-on: ubuntu-latest steps:
- name: 迁出代码
uses: actions/checkout@main - name: 安装 JDK
uses: actions/setup-java@main
with:
java-version: '17'
distribution: 'temurin'
cache: maven - name: 构建
run: mvn -B package --file pom.xml - name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "target/blog-server-0.0.1-SNAPSHOT.jar"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/blog-server - name: 启动服务
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
port: ${{ secrets.REMOTE_PORT }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
source /etc/profile
cd /home/apps-root/blog-server
nohup java -jar ./*.jar &
  1. 打包完成后 手动将制品 也就是打包后的文件 xxx.jar,通过 ssh-deploy 发送到目标服务器
  2. 然后再通过ssh-action 来远程控制服务器, 执行启动jar文件命令

遇到的坑,ssh执行shell时,发现找不到java环境变量,可我明明配置了呀(在/etc/profile 里)。

后来查阅各种资料,才知道 shell分为两种,SSH 命令执行 shell 是非交互式 shell,而普通 shell 是登录 shell 或交互式 shell。

非交互式shell获取到的环境变量是不全的,官方文档说:

当 bash 作为交互式登录 shell 或使用,它首先
从文件 /etc/profile 读取并执行命令(如果
该文件存在)。读取该文件后,它会按顺序查找
~/.bash_profile、~/.bash_login 和 ~/.profile 启动非登录 shell 的交互式 shell 时
,bash 会从 ~/.bashrc(
如果该文件存在)中读取并执行命令...

所以我通过在script中,添加了额外一行(source /etc/profile),使其生效 。

参考:

https://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man/216204#216204

https://github.com/appleboy/ssh-action/issues/31#issuecomment-1006565847

推荐

https://juejin.cn/post/7396933333492793396

github action的使用的更多相关文章

  1. GitHub Action一键部署配置,值得拥有

    最近由于自己的个人应用增加,每次都需要在服务器手动发布,觉得特别麻烦,所以想通过代码控制自动发布,直接选择了GitHub Action. GitHub Action持续集成服务,目前已经免费开放使用, ...

  2. 编写自己的 GitHub Action,体验自动化部署

    本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action. 简介 Actions GitHub Actions 是 GitHub 官方 ...

  3. 你知道什么是 GitHub Action 么?

    本文是 GitHub Action 的入门教程,如您已有相关使用经验可以直接关掉. GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 之前一直都是 ...

  4. 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 r ...

  5. Github Action 快速上手指南

    前言 各位读者,新年快乐,我是过了年匆忙赶回上海努力搬砖的蛮三刀. Github之前更新了一个Action功能(应该是很久以前了),可以实现很多自动化操作.用来替代用户自己设置的自动化脚本(比如:钩子 ...

  6. 【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法

    问题描述 在参考文档"使用 GitHub Actions 部署 ARM 模板"一文中,由于是在中国区Azure上操作,所以生产的部署凭证为中国区凭证.当创建工作流时,在登录到Azu ...

  7. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...

  8. 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  9. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  10. 使用GitHub Action进行打包并自动推送至OSS

    GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 官方文档:https://docs.github.com/cn/actions CI\CD 持续 ...

随机推荐

  1. 2025年Anaconda官网最新版本Anaconda下创建虚拟环境,并在新创建的虚拟环境下一次性安装多个软件包的经验总结

    一.为了使用tensorflow软件包中的tensorboard软件包工具,在python==3.12.8环境下创建虚拟环境pytorch,使用命令行如下.1.1 使用Anaconda prompt, ...

  2. 一款让 Everything 更加如虎添翼的 .NET 开源辅助工具!

    前言 相信很多同学都应该用过 Everything 这个实用的 Windows 文件搜索神器吧,今天大姚给大家分享一款让 Everything 更加如虎添翼的 .NET 开源辅助工具:Everythi ...

  3. 关于class类的知识点记录

    下方代码,初始化test的一系列参数和对应的值 class SendMsg(object): def __init__(test): test.name = {'Adele baby','beckha ...

  4. 为什么 Spring 循环依赖需要三级缓存,二级不够吗?

    Spring循环依赖解决机制中引入了三级缓存,这是因为仅使用二级缓存无法灵活处理代理Bean的早期暴露需求.以下是为什么需要三级缓存的详细分析: 1. 二级缓存的局限性 二级缓存通常用于存储早期暴露的 ...

  5. RMQ学习笔记

    RMQ学习笔记 前言:这个算法无论是从适配性还是长度来说都很有实力... 关于 RMQ RMQ 是英文 Range Maximum/Minimum Query 的缩写,表示区间最大(最小)值. 详细信 ...

  6. Spring Bean元数据体系与Spring容器

    >>>点击去看B站配套视频<<< 系列文章目录和关于我 1. 从一个例子开始 小陈申请加盟咖啡店后,小陈收到总部寄来的<开店规格单>.这份文件允许每家分 ...

  7. TDesign腾讯高保真Axure RP中后台交互模板及元件组件库

    TDesign腾讯Axure RP中后台交互模板部件及元件组件库素材基于腾讯TDesign素材库,进行二次创作,并非官网的免费静态版.具体内容,可以看右侧的预览按钮,确认内容. 在线演示及下载:htt ...

  8. Python基础 - 多进程(上)

    估计很多小伙伴会认为, 类似, 进程, 线程, 协程等这些, 比较专业的词汇, 应该是比较高深的内容, 作为入门基础不太合适. 而, 事实确实如此. 但, 如果不是做研究的, 仅从功能的视角看看待, ...

  9. codeup之等腰梯形

    Description 请输入高度h,输入一个高为h,上底边长为h 的等腰梯形(例如h=4,图形如下). **** ****** ******** ********** Input 输入第一行表示样例 ...

  10. VirtualBox 导入/注册 虚拟机文件 .vbox 失败

    VirtualBox 导入/注册 虚拟机文件 .vbox 失败 问题情景 Error: Failed to open virtual machine located in <.vbox所在目录& ...