Github Actions - ziliantech-org/doc-zilian-wiki GitHub Wiki
By yufeng97
基础概念
在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。
- workflow(工作流程):持续集成一次运行的过程。
- job(任务):一个 workflow 由一个或多个 job 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action(动作):每个 step 可以依次执行一个或多个命令(action)。
workflow文件
GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的 .github/workflows
目录。workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml
,不能是.yaml
。
一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。
workflow 文件的配置字段非常多,详见官方文档。下面是一些基本字段。
on
on字段指定 workflow 的触发条件,通常是某些事件,比如示例中的触发事件是 ,即在代码 push
到仓库后被触发。字段也可以是事件的数组,多种事件触发,比如在 push
或 pull request
时触发:
on: [push, pull_request]
push触发指定分支
on:
push:
branches:
- main
jobs
workflow 文件的主体是 jobs 字段,表示要执行的一项或多项任务。 jobs字段里面,需要写出每一项任务的job_id,具体名称自定义。job_id里面的name字段是任务的说明。
jobs:
my_first_job:
name: My first job
my_second_job:
name: My second job
runs-on
runs-on 字段指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机如下。
- ubuntu-latest (ubuntu-20.04),ubuntu-18.04或ubuntu-16.04
- windows-latest,windows-2019或windows-2016
- macOS-latest或macOS-10.14
下面代码指定虚拟机环境为ubuntu-18.04。
runs-on:
ubuntu-18.04
steps
steps 字段指定每个任务的运行步骤,可以包含一个或多个步骤。步骤开头使用 - 符号。每个步骤可以指定以下字段:
- name:步骤名称。
- uses:该步骤引用的action或 Docker 镜像。
- run:该步骤运行的 bash 命令。
- env:该步骤所需的环境变量。 其中 uses 和 run 是必填字段,每个步骤只能有其一。同样名称也是可以忽略的。
action
action 是 GitHub Actions 中的重要组成部分,这点从名称中就可以看出,actions 是 action 的复数形式。它是已经编写好的步骤脚本,存放在 GitHub 仓库中。
对于初学者来说可以直接引用其它开发者已经写好的 action,可以在官方 action 仓库或者 https://github.com/marketplace?type=actions&query= 去获取。
既然 action 是代码仓库,当然就有版本的概念。引用某个具体版本的 action:
steps:
- uses: actions/setup-node@74bc508 # 指定一个 commit
- uses: actions/[email protected] # 指定一个 tag
- uses: actions/setup-node@master # 指定一个分支
常用的actions
- actions/checkout@v2
- actions/setup-python@v3
- actions/setup-node@v3
- actions/cache@v2
示例
name: Build & deploy react-demo-with-github-actions
on:
push:
branches: [main]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
# 拉取代码
- name: Checkout code
uses: actions/checkout@v3
# 使用缓存
- uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node
- name: Install packages with npm
run: npm install && npm run build
- name: Build and deploy with gh-pages
uses: JamesIves/github-pages-deploy-action@releases/v3
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
branch: gh-pages # The branch the action should deploy to.
folder: build # The folder the action should deploy.