目录

如何定义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, or ubuntu-16.04
  • windows-latest or windows-2019
  • macos-latest or macos-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

参考

github actions document