tags: [Github]
categories: [CI CD]
前言
GITLAB
虽好,但是实在是太吃内存了
所以后面选择GitHub
来作为我的项目代码仓库,最近发现GH Action
一样可以实现CI CD,下午琢磨了一下,记录如下
整个流程
首先编辑完成项目根目录/.github/workflows/下部署配置文件
如何配置后续讨论
开发人员提交代码到Github仓库,GitHub会按照部署配置文件上选择相应服务器上具体的Action Runner,接着按照配置文件上执行步骤逐步执行,完成部署任务
配置文件配置
# 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'
全量的配置可见官方文档:[传送门](https://docs.github.com/cn/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions)<br />配置文件上有几点需要注意
runs-on: [self-hosted, Linux, X64]
该配置表明只在自托管运行器,Linux环境,64位都要满足,该配置当你配置完毕Actions-Runner时,会提供给你env
这个标签可以第一级使用,用以表示整个部署环境的环境变量,也可以在每个具体的Step中使用,用作局部变量,引用时使$
引用- 执行多行脚本需要在
run
标签冒号后面空一格,加上竖线表示后续为多行脚本
配置SSH访问公钥
如果服务器上已经有了公钥,直接将该SSH公钥粘贴到新建的Secrets项中来就可以了
我这个服务器上没有需要手动生成
$ 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
中,如果上一步你直接是在服务器中执行,则只要
$ cat mysite.pub >> authorized_keys
确保服务器~/.ssh
文件夹的权限低于711,我这里直接用600(仅本用户可读写)
$ chmod 600 -R ~/.ssh
安装Actions-Runner
- 选择具体的环境,比如我的是Linux 64
- 下载相应的执行安装包,直接下非常慢,建议迅雷下好传上去
解压
tar -xvf actions-runner-linux-x64-2.273.5.tar.gz
添加用户,并将该目录下文件所有权设置为该用户,后续涉及到修改文件都需要设置所有权
useradd actions-runner
chown -R /home/actions-runner
配置绑定Github仓库
这里是现成代码,就不赘述了,直接复制执行即可
启动服务
$ sudo ./svc.sh start
查看服务状态
$ sudo ./svc.sh status
停止服务
$ sudo ./svc.sh stop
```
测试代码提交
当push
代码到master
分支时,可以在Action
选项栏看到具体代码部署的日志