GH Action实现CI CD

前言

GITLAB虽好,但是实在是太吃内存了
所以后面选择GitHub来作为我的项目代码仓库,最近发现GH Action一样可以实现 CI CD,下午琢磨了一下,记录如下

整个流程

首先编辑完成项目根目录/.github/workflows/下部署配置文件
如何配置后续讨论
开发人员提交代码到 Github 仓库,GitHub 会按照部署配置文件上选择相应服务器上具体的 Action Runner,接着按照配置文件上执行步骤逐步执行,完成部署任务

配置文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# zoombar后端部署服务
name: deploy

env:
EUREKA_SERVER_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/EurekaServer/target"
USER_CENTER_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/UserCenter/target"
GATE_WAY_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/GateWay/target"
CONFIG_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/Config/target"
CONTENT_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/ContentService/target"
JOB_TARGET_DIR: "/home/actions-runner/_work/zoombar/zoombar/Job/target"

# push触发
# 绑定master分支
on:
push:
branches: [master]

# 构建步骤
jobs:
# 编译
excute:
# 指定运行环境 self-hosted 标签来选择任何自托管运行器 linux为附属标签
runs-on: [self-hosted, Linux, X64]

# 步骤
steps:
# 检出代码
# 这个是官方的用于拉取代码的actions
# `@` 后面可以跟指定的分支或者 release 的版本或者特定的commit
- name: checkout
uses: actions/checkout@master
# with: # 当前 actions 的一些配置 需要2.8以上git支持
# submodules: true # 如果项目有依赖 Git 子项目时可以设为 true,拉取的时候会一并拉取下来

# 编译
- name: build
run: |
echo '开始执行zoombar代码编译功能'
mvn clean install -Dmaven.test.skip=true
mv -f $EUREKA_SERVER_TARGET_DIR/eureka-server-exec.jar /opt/zoombar/eureka.jar
mv -f $USER_CENTER_TARGET_DIR/user-center-exec.jar /opt/zoombar/user-center.jar
mv -f $GATE_WAY_TARGET_DIR/gateway-exec.jar /opt/zoombar/gateway.jar
mv -f $CONTENT_TARGET_DIR/content-exec.jar /opt/zoombar/content.jar
mv -f $JOB_TARGET_DIR/job-exec.jar /opt/zoombar/job.jar
echo 'build success'

- name: deploy
run: |
echo '构建应用阶段'
pm2 restart eureka
pm2 restart user-center
pm2 restart content
pm2 restart gateway
pm2 restart job

echo 'deploy success'

全量的配置可见官方文档:传送门
配置文件上有几点需要注意

  1. runs-on: [self-hosted, Linux, X64]该配置表明只在自托管运行器,Linux 环境,64 位都要满足,该配置当你配置完毕 Actions-Runner 时,会提供给你
  2. env这个标签可以第一级使用,用以表示整个部署环境的环境变量,也可以在每个具体的 Step 中使用,用作局部变量,引用时使$引用
  3. 执行多行脚本需要在run标签冒号后面空一格,加上竖线表示后续为多行脚本

配置 SSH 访问公钥

如果服务器上已经有了公钥,直接将该 SSH 公钥粘贴到新建的 Secrets 项中来就可以了
我这个服务器上没有需要手动生成

1
2
3
4
5
6
$ cd /home
$ mkdir -p ~/.ssh && cd ~/.ssh
$ ssh-keygen -t rsa -f mysite
ing public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

这里一路回车就行,执行完成后,会在~/.ssh下生成两个文件:mysite(私钥)和mysite.pub(公钥)。其中私钥是你的个人登录凭证,不可以分享给他人,如果别人得到了你的私钥,就能登录到你的服务器。公钥则需要放到登录的目标服务器上
将公钥mysite.pub的内容贴到目标服务器的~/.ssh/authorized_keys中,如果上一步你直接是在服务器中执行,则只要

1
$ cat mysite.pub >> authorized_keys

确保服务器~/.ssh文件夹的权限低于 711,我这里直接用 600(仅本用户可读写)

1
$ chmod 600 -R ~/.ssh

image.png

安装 Actions-Runner

  1. 选择具体的环境,比如我的是 Linux 64

  1. 下载相应的执行安装包,直接下非常慢,建议迅雷下好传上去
  2. 解压
1
tar -xvf actions-runner-linux-x64-2.273.5.tar.gz
  1. 添加用户,并将该目录下文件所有权设置为该用户,后续涉及到修改文件都需要设置所有权
1
2
useradd actions-runner
chown -R /home/actions-runner
  1. 配置绑定 Github 仓库

这里是现成代码,就不赘述了,直接复制执行即可

  1. 后台运行,可以看到连接上了GitHub
1
2
3
4
5
6
7
8
9
10
11
12
# 测试用
$ ./run.sh &
# 生产上建议配置为服务 linux环境命令为
$ sudo ./svc.sh install

# 启动服务
$ sudo ./svc.sh start
# 查看服务状态
$ sudo ./svc.sh status
# 停止服务
$ sudo ./svc.sh stop

测试代码提交

push代码到master分支时,可以在Action选项栏看到具体代码部署的日志
image.png
image.png

相关

使用 GitHub Actions 实现博客自动化部署

作者

孙博文

发布于

2020-10-10

更新于

2021-07-18

许可协议

评论