如何编写github-actions
目录
- 如何定义workflow自动触发
- 如何手动运行workflow
- 如何在不同的操作系统上执行我们的jobs
- 如何使用action
- 执行命令
- 如何一次跨多平台执行同一个job
- 如何有条件的执行step或job
- 参考
如何定义workflow自动触发
-
设置push到main或release/*分支时触发
on: push: branches: - main - release/\*
-
设置pull request到main时触发
on: pull_request: branches: - main
-
设置每周一到周五的2点触发
on: schedule: - cron: "0 2 * * 1-5"
更多详见:Events that trigger workflows
如何手动运行workflow
如果要手动运行workflow,需要配置workflow_dispatch
,会在Actions面板展示"Run workflow"的按钮。
on:
workflow_dispatch:
更多详见:Manually running a workflow
如何在不同的操作系统上执行我们的jobs
GitHub Actions提供了Linux、Windows、macOS的托管运行器(虚拟环境)。
我们可以通过runs-on
指定job运行在什么操作系统(虚拟环境)上:
jobs:
my_job:
name: deploy to staging
runs-on: ubuntu-18.04
可选择的虚拟环境类型有:
ubuntu-latest
,ubuntu-18.04
, orubuntu-16.04
windows-latest
orwindows-2019
macos-latest
ormacos-10.15
注意:GitHub actions:Ubuntu 16.04 LTS 虚拟环境将于 2021 年 9 月 20 日移除 | GitHub 更新日志
更多信息详见:Virtual environments for GitHub Actions](https://docs.github.com/articles/virtual-environments-for-github-actions)
如何使用action
Actions是可重复使用的代码块,在github上的任何人都可以构建和分发actions。我们可以在GitHub Marketplace找到很多actions,当然github官方也提供了一些actions,参考:Actions repository。
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '10.x'
更多详见:Workflow syntax for GitHub Actions
执行命令
我们可以在虚拟环境上执行命令,比如:
- name: Install Dependencies
run: npm install
更多详见:Workflow syntax for GitHub Actions
如何一次跨多平台执行同一个job
我们还可以一次性跨多平台执行同一个job,比如在3个虚拟环境执行3个不同版本的node:
jobs:
test:
name: Test on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
node_version: ['8', '10', '12']
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}
- name: npm install, build and test
run: |
npm install
npm run build --if-present
npm test
更多详见:Workflow syntax for GitHub Actions
如何有条件的执行step或job
比如,我们只想要push的时候才执行step,pull request的将不会触发:
steps:
- run: npm publish
if: github.event\_name == 'push'
更多详见:Contexts and expression syntax for GitHub Actions