每一个repo可以配置多个workflow,每一个workflow都有对应的.yml文件,存放在repo的.github/workflows路径下。使用git操作时,GitHub识别到该路径下的yml文件就开始自动运行。
GitHub Actions的一次持续集成或持续部署由workflow、job、step、action构成,四者呈上下级关系。
每一个repo可以配置多个workflow,每一个workflow都有对应的.yml文件,存放在repo的.github/workflows路径下。使用git操作时,GitHub识别到该路径下的yml文件就开始自动运行。
1. name
显示在Repo的Actions的Workflows列表中,默认为workflow的文件名,可以通过name配置
name: custom name
2. on
workflow的触发条件,只填写push时调试只有在主干分支push代码才会触发,也可以用数组方式简写多个主干分支的触发条件,或者指定分支和该分支下的git操作。
除了常见的push、pull代码触发操作外,还可以配置scheduled events定时触发、munual events(自定义workflow_dispatch、repository_dispatch)以及其他的webhook events(create创建分支)触发
on: push
# on: [push, pull_request]
# on:
# push:
# branches:
# - main
# pull_request:
# branches:
# - dev
# on:
# repository_dispatch:
# types: [opened, deleted]
3. jobs
jobs默认parallel运行,可以通过needs增加运行依赖,从而改为sequential运行。build和deploy为job的id,name会显示在运行日志中,deploy的needs配置了build,表示build job运行后才能执行deploy job。runs-on为必填,指定了运行所需要的虚拟环境。if指定了运行条件。github.ref == 'refs/heads/main'指定了只有当主干分支的push和pull会触发deploy job
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: 14.x
- name: Install NPM packages
run: npm ci
- name: Build project
run: npm run build
- name: Run tests
run: npm run test
- name: Upload production-ready build files
uses: actions/upload-artifact@v2
with:
name: production-files
path: ./build
deploy:
name: Deploy
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: production-files
path: ./build
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Deploy static site to S3 bucket
run: aws s3 sync ./build s3://cow-test-coverage
4. steps
steps指定每个job的运行步骤,步骤可以运行命令、设置任务、repo的某一个action或者public repo和Docker registry发布的action(step并不局限于action,但action都在step中运行)。每个step都在其所在runner中独立运行(runner为job自己的运行环境),但step可以访问以及改变workspace和filesystem。
GitHub默认的第一个step是Set up Job,默认的最后一个step是Complete Step,Set up Job之后的step是运行actions/checkout@v2这一action,进行Checkout code,然后会Install Node14,接着Install NPM packages,这里的命令是npm ci,因此本地的repo需要运行一次npm i,生成package-lock.json,并且push到远端的repo,这样在持续集成时比npm install更快。这一步骤完成后,会进行打包和测试,并且将跑过测试后的打包文件上传到./build路径下,在deploy job允许运行的时候再从这个文件路径下载下来,进行这两个step主要是因为他们处于不同的runner。
最后可以部署到AWS的s3服务或者GitHub的Page上。就可以将前端页面渲染在AWS的静态网页或者GitHub的静态网页上。这一步军需要配置一些access_key,AWS需要配置aws-access-key-id、aws-secret-access-key和aws-region,GitHub Page需要配置github_token。部署静态网页的时候要注意文件路径和前面保持一致,否则拿不到数据。
每个步骤常用的字段有:name(步骤名称)、run(步骤运行的命令)、env(步骤所需的环境变量)、uses(步骤运行需要引用的action)、with(action定义的入参)