Github Actions
介绍
Github Action 是 Github 推出的持续集成 (CI) 工具
# 定义 Workflow 的名字
name: Greeting from Mona
# 定义 Workflow 的触发器
on: push
# 定义 Workflow 的 job
jobs:
  # 定义 job 的 id
  my-job:
    # 定义 job 的 name
    name: My Job
    # 定义 job 的运行环境
    runs-on: ubuntu-latest
    # 定义 job 的运行 step 
    steps:
    # 定义 step 的名称
    - name: Print a greeting
      # 定义 step 的环境变量
      env:
        MY_VAR: Hi there! My name is
        FIRST_NAME: Mona
        MIDDLE_NAME: The
        LAST_NAME: Octocat
      # 运行指令:输出环境变量
      run: |
        echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.
Workflow
Workflow 是由一个或多个 job 组成的可配置的自动化过程。我们通过创建 YAML 文件来创建 Workflow 配置。
名字
name
Workflow 的名称,Github 在存储库的 Action 页面上显示 Workflow 的名称。
如果我们省略 name,则 Github 会将其设置为工作流文件名。
name: Greeting from Mona
on: push
触发器
on
触发 Workflow 执行的 event 名称
# 单个事件
on: push
# 多个事件
on: [push,pull_request]
活动类型和筛选器
必须为所有事件附加冒号 (:),包括没有配置的事件
on:
  label:
    types:
      - created
  push:
    branches:
      - main
  page_build:
job
job 是一次持续集成的运行,可以完成多个任务。一个 Workflow 由一个或多个 jobs 构成
默认情况下,作业没有依赖关系,并且彼此并行运行。 当一个作业依赖于另一个作业时,它将等待从属作业完成,然后才能运行。
定义
jobs.<job_id>
jobs:
  my_first_job: # job id
    name: My first job
  my_second_job:
    name: My second job
上面的 my_first_job 和 my_second_job 就是 job_id
job 通过 id 被定义。
命名
jobs.<job_id>.name
name 会显示在 Github 上
依赖
jobs.<job_id>.needs
needs 可以标识 job 是否依赖于别的 job
如果某一 job 失败,则会跳过所有需要该 job 的 job。
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]
输出
jobs.<jobs_id>.outputs
outputs 用于和 needs 打配合,outputs 输出 → needs 输入
jobs:
  job1:
    runs-on: ubuntu-latest
    # Map a step output to a job output
    outputs:
      output1: ${{ steps.step1.outputs.test }}
      output2: ${{ steps.step2.outputs.test }}
    steps:
    - id: step1
      run: echo "::set-output name=test::hello"
    - id: step2
      run: echo "::set-output name=test::world"
      
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
    - run: echo ${{needs.job1.outputs.output1}} ${{needs.job1.outputs.output2}}