我可以在 github 工作流程中有条件地 运行 一些作业,例如仅在特定触发器上吗?

Can I run some jobs conditionally in github workflow, e.g only on specific trigger?

我有构建和发布作业的工作流。

我想 运行 在推送和拉取请求触发器上构建作业,但仅在推送时发布。可能吗?

是的,on: 指令有单独的 pushpull_request 事件,将触发工作流 运行。

因此,您的 build.yml 工作流程将

on:
  push:
  pull_request:

这将在推送和拉取请求时触发它。

您的 publish.yml 工作流程

on:
  push:
    branches
      - master

仅在推送时触发。

您可以阅读有关触发器设置的更多信息here

有可能:

on: [push, pull_request]

jobs:
  Build:
    runs-on: ubuntu-latest
    steps:
      [...]

  Publish:
    runs-on: ubuntu-latest
    if: ${{ github.event_name == 'push' }}
    steps:
      [...]

工作流将在 pushpull_request 事件上 运行。由于 Build 作业没有任何 if 语句或依赖项,因此它将始终 运行。另一方面,如果触发工作流的事件是 push.

Publish 只会 运行

我在这里猜测,但如果两个作业都必须按顺序 运行,一个接一个,您应该改用这种形式:

on: [push, pull_request]

jobs:
  build_and_push:
    runs-on: ubuntu-latest
    steps:
      - name: Build
        run: [...]

      - name: Publish
        if: ${{ github.event_name == 'push' }}
        run: [...]

作业 运行 在不同的机器上独立运行。您将需要特殊操作来传递文件。通过在同一作业中使用 个步骤 ,您可以确保两个步骤 运行 顺序进行,并且第一步创建的文件对第二步可用。