最近惊闻一同事说github可以做CI/CD了,叫做github actions。Google一番,开始盘她。
1,创建自己项目的workflows
- 打开github.com(自己注册的),选择一个你自己的项目仓库, 点击Actions,可选择set up a workflow yourself也可以选择使用别人创建好的,果断start commit。(果断自己创建呀,我那么好学~~~)
- 创建完成后会发现在项目中多了一个.github/workflows文件夹, 打开.yml文件可以看到里面默认的,不用管,一键delete,从头开干。
2,如何编写.yml 文件?
- 文件基本结构
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action (动作):每个 step 可以依次执行一个或多个命令(action)。
- 我举一个前端资源同步服务器的案例,一般分为,提交代码,打包,同步到云服务器等几个步骤。不多说直接上代码~
# 这里是你workflows的名称,不用多说
name: "Deploy to tencentyun"
# 动作,也是就是触发workflow的动作片,
# 我这里是我个人项目只有我一个人开发,所以不用特定某一分支
on: push
# 指定分支,指定动作的写法, 其他写法可以参考官网
# on:
# push:
# branches:
# - master
# 执行的任务
jobs:
# 任务一及名称
build-and-deploy:
# 执行任务的环境,我这里使用ubuntu-latest
runs-on: ubuntu-latest
# 执行步骤
steps:
# 检出你的代码库, 这一步非常重要,不写这一步会报找不到packjson文件,因为job是在虚拟机上跑的,文件路径跟你项目路径不一样。
- name: Checkout repository code
uses: actions/checkout@v2
# 可以指定使用 node版本,我这里使用 12.x, 也可不指定,忽略
- name: use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: "12.x"
# 缓存可减少ci时间
- name: Cache node_modules
uses: actions/cache@v2
id: cache-packages
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: |
node_modules
*/*/node_modules
key: ${{ runner.os }}-packages-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-packages-${{ env.cache-name }}-
${{ runner.os }}-packages-
${{ runner.os }}-
# 安装node_modules
- name: Install dependencies
if: steps.cache-packages.outputs.cache-hit != 'true'
run: npm install
# 执行npm run build
- name: Npm run build
run: npm run build
env:
CI: true
# Deploy 部署
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
ARGS: "-avz --delete"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
# 任务二
# ......
# 任务N....
- 我是用的是easingthemes/ssh-deploy@v2.0.7进行部署的,解释一下这些字段的意思,字段可以自定义,以下是我的设置
- DEPLOY_SSH_KEY 这里存的你服务器上设置的ssh的私钥部分
- REMOTE_HOST 服务器的IP或者域名
- REMOTE_USER 服务器的用户名
- REMOTE_TARGET 你要部署的资源放到在服务器某个位置的路径
3,github actions连接云服务器
- 首先要在服务器上生成ssh密钥,通过命令ssh-keygen -t rsa -b, 如果不知道改命令是什么意思,可以自行Google。
可以看到生成了deploy(私钥),deploy.pub(公钥)和.ssh文件夹
- 打开github找到项目,找到settings, 将服务器ssh的私钥,host,用户名,资源存放路径等存放在项目的settings>Secrets下
- 打开服务器,将ssh公钥放到/root/.ssh/authoriaed_keys中,保存。
- 此时已经将github actions和服务器建立连接了
4,测试
- git push一个试试,完美运行,真香。
- 同步资源成功
参考:ssh-deploy
参考:官方文档
参考: cache