对于持续集成这个名词不太理解的,建议先去了解一下DevOps的相关概念。
什么是GitHub Actions?
GitHub Actions就是GitHub提供的一个功能,我们在项目仓库顶部的tab项这里可以见到它。
它的功能就是,监控某一个分支提交,当分支有新的提交进来时就会触发你编写的脚本。
触发:GitHub免费提供了一个服务器来跑我们编写的脚本
脚本:脚本可以自己编写也可以使用别人编写好的脚本(action),在顶部的marketplace里就可以找到别人的action
实践
我的脚本
name: Node.js CI
on:
push:
branches: [ master ] #监听master分支的push事件
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest #指定运行环境为最新的Ubuntu版本
strategy:
matrix:
node-version: [15.9.0] #指定node版本
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }} #使用action安装node环境
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install #安装项目依赖
- run: npm run build #build项目
- name: ssh scp ssh pipelines #使用市场找到的action来将项目build的产物传到我的服务器
uses: cross-the-world/ssh-scp-ssh-pipelines@latest
env:
WELCOME: "ssh scp ssh pipelines"
LASTSSH: "Doing something after copying"
with:
host: ${{ secrets.LDD_SERVER_IP }} # 服务器的ip
user: ${{ secrets.LDD_SERVER_NAME }} # 服务器的账号
pass: ${{ secrets.LDD_SERVER_PASSWORD }} # 服务器的密码
connect_timeout: 10s
first_ssh: | #这部分是在服务器上,传输文件前执行的命令,关闭并删除运行中的旧版本
pm2 delete all
cd /project/ldd-rms-backend
rm -rf dist
scp: | #将build生成的文件从GitHub服务器的相应目录,传到我服务器的相应目录
./dist => /project/ldd-rms-backend
./package.json => /project/ldd-rms-backend
./yarn.lock => /project/ldd-rms-backend
last_ssh: | #这部分是在服务器上,传输文件后执行的命令,新版本重新安装依赖并运行
cd /project/ldd-rms-backend
yarn
pm2 start ./dist/main.js
这个脚本我用的是这个生成的:
传输部分的action是在市场找到的这个ssh scp ssh pipelines
脚本中的变量${{ secrets.LDD_SERVER_IP }},这个是在项目的settings里设置的