GitHub也能CI/CD了!如何使用GitHub的Action?
一,什么是CI/CD
见另一篇文章
二,GitHub的Action
GitHub的Action是一种自动化的CI/CD工具,可以让你在GitHub上自动执行一些指令,比如构建、部署、推送代码等。
不光如此,在触发action之后,相当于我们有了一个暂时的服务器,用这个甚至可以白嫖一些计算资源,ひひひひひ
三,GitHub Actions 的使用方法
- 建立目录文件
.github/workflows/
在这个目录下建立一个名为name.yml的文件,内容如下:
name: Node.js CI
on:
tag:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm publish
这个脚本会在每次git tag 时自动执行“npm publish”
下面会解释一下用法
on
on 指的是在哪个事件触发时执行,这里是在master git tag 时执行
其他常见的还有 push 等等
jobs
jobs 是一系列动作的集合
这里定义了一个build的动作
之后又对build进行了描述
runs-on 指定了这个动作在哪个系统上执行
strategy:
matrix:
node-version: [ 16.x]
这些定义了一个预定义的环境,在这个环境中有node,可以运行node命令
steps
steps具体描述了该怎么执行脚本
而use是使用了别人已经预先定义好的脚本,这里的actions/checkout@v2就是一个把仓库拉取到最新的脚本
我们将仓库拉到最新后就直接运行
npm ci
npm publish
这样,就会在每次git tag 时自动执行npm publish
四,GitHub Actions的常见流程
一般的CI/CD流程是:
拉取代码 -> 构建 -> 测试 -> 推送代码或者部署
这里提供几个常用的
拉取
- uses: actions/checkout@v2
部署
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
SOURCE: "docs/.vuepress/dist/"
REMOTE_HOST: ${{ secrets.DEPLOY_HOST }}
REMOTE_USER: ${{ secrets.DEPLOY_USER }}
TARGET: ${{ secrets.DEPLOY_REMOTE_DIR }}
发送Http请求
- name: Axios Request
uses: potaesm/github-actions-request@1.0.7
with:
url: ${{ secrets.REQUEST_URI }}${{ job.status }}
method: get
五,Action的Security
当我们需要执行一些设计账号密码的操作的时候,就需要把这些信息隐藏起来。因为yml文件别人是可以看到的。
这时就需要secrets了
打开Github仓库页面,进入Setting
找到Secrets选项,在这个页面中,我们可以添加一个secret,这个secret就是我们需要的密码,
可以自定义名称和内容,这个内容别人是看不到的
之后,我们就可以在脚本中引入
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
SOURCE: "docs/.vuepress/dist/"
REMOTE_HOST: ${{ secrets.DEPLOY_HOST }}
REMOTE_USER: ${{ secrets.DEPLOY_USER }}
TARGET: ${{ secrets.DEPLOY_REMOTE_DIR }}
这里使用了一个别人写好的脚本,可以把构建好的部署到服务器上,就是deploy的过程
${{ secrets.SERVER_SSH_KEY }}就是我们的私钥,这个私钥是我们在github上添加的,
${{ secrets.DEPLOY_HOST }}就是服务器的地址,
这样,我们可以在代码tag之后,就自动把构建产物部署到服务器上!
Last But Not Least
别忘了关注?,点赞👍,收藏💖,订阅📰, o((▽))o
|