tags: [Github]
categories: [CI CD]


前言

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

整个流程

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

配置文件配置

  1. # zoombar后端部署服务
  2. name: deploy
  3. env:
  4. EUREKA_SERVER_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/EurekaServer/target'
  5. USER_CENTER_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/UserCenter/target'
  6. GATE_WAY_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/GateWay/target'
  7. CONFIG_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/Config/target'
  8. CONTENT_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/ContentService/target'
  9. JOB_TARGET_DIR: '/home/actions-runner/_work/zoombar/zoombar/Job/target'
  10. # push触发
  11. # 绑定master分支
  12. on:
  13. push:
  14. branches: [ master ]
  15. # 构建步骤
  16. jobs:
  17. # 编译
  18. excute:
  19. # 指定运行环境 self-hosted 标签来选择任何自托管运行器 linux为附属标签
  20. runs-on: [self-hosted, Linux, X64]
  21. # 步骤
  22. steps:
  23. # 检出代码
  24. # 这个是官方的用于拉取代码的actions
  25. # `@` 后面可以跟指定的分支或者 release 的版本或者特定的commit
  26. - name: checkout
  27. uses: actions/checkout@master
  28. # with: # 当前 actions 的一些配置 需要2.8以上git支持
  29. # submodules: true # 如果项目有依赖 Git 子项目时可以设为 true,拉取的时候会一并拉取下来
  30. # 编译
  31. - name: build
  32. run: |
  33. echo '开始执行zoombar代码编译功能'
  34. mvn clean install -Dmaven.test.skip=true
  35. mv -f $EUREKA_SERVER_TARGET_DIR/eureka-server-exec.jar /opt/zoombar/eureka.jar
  36. mv -f $USER_CENTER_TARGET_DIR/user-center-exec.jar /opt/zoombar/user-center.jar
  37. mv -f $GATE_WAY_TARGET_DIR/gateway-exec.jar /opt/zoombar/gateway.jar
  38. mv -f $CONTENT_TARGET_DIR/content-exec.jar /opt/zoombar/content.jar
  39. mv -f $JOB_TARGET_DIR/job-exec.jar /opt/zoombar/job.jar
  40. echo 'build success'
  41. - name: deploy
  42. run: |
  43. echo '构建应用阶段'
  44. pm2 restart eureka
  45. pm2 restart user-center
  46. pm2 restart content
  47. pm2 restart gateway
  48. pm2 restart job
  49. echo 'deploy success'
  1. 全量的配置可见官方文档:[传送门](https://docs.github.com/cn/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions)<br />配置文件上有几点需要注意
  1. runs-on: [self-hosted, Linux, X64]该配置表明只在自托管运行器,Linux环境,64位都要满足,该配置当你配置完毕Actions-Runner时,会提供给你
  2. env这个标签可以第一级使用,用以表示整个部署环境的环境变量,也可以在每个具体的Step中使用,用作局部变量,引用时使$引用
  3. 执行多行脚本需要在run标签冒号后面空一格,加上竖线表示后续为多行脚本

配置SSH访问公钥

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

  1. $ cd /home
  2. $ mkdir -p ~/.ssh && cd ~/.ssh
  3. $ ssh-keygen -t rsa -f mysite
  4. ing public/private rsa key pair.
  5. Enter passphrase (empty for no passphrase):
  6. 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

GH Action实现CI CD - 图2

  1. 下载相应的执行安装包,直接下非常慢,建议迅雷下好传上去
  2. 解压

    1. tar -xvf actions-runner-linux-x64-2.273.5.tar.gz
  3. 添加用户,并将该目录下文件所有权设置为该用户,后续涉及到修改文件都需要设置所有权

    1. useradd actions-runner
    2. chown -R /home/actions-runner
  4. 配置绑定Github仓库

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

  1. 后台运行,可以看到连接上了GitHub ```shell

    测试用

    $ ./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 实现博客自动化部署