在 GitHub 操作中已经停止 运行 workflow/job

Stop already running workflow/job in GitHub Actions

我已使用 GitHub 操作设置 CI。我的一个工作流程是由 push 事件触发的,但它(或此工作流程的一项工作)不应同时在多个实例上 运行。

是否可以创建一个停止其他工作流程的作业(或作业或不允许 workflow/job 运行 并行)?

我更愿意取消 "old" 作业,而不是需要 "new" 作业完成,直到 "old" 作业完成。

理想情况下,我还想 运行 最后完成 "old" 作业。(~保存未完成状态)。这可以(但不一定)运行 与 "new" 作业并行。

[] 我想取消另一个工作流程或另一个工作流程中的作业,而不是同一工作流程中的另一个作业。

由于 Github 已经打开了新的工作流程 API,我创建了这个 small script 以在一个命令中手动取消所有未完成的作业:

Example:

  # Set up
  export GITHUB_TOKEN=394ba3b48494ab8f930fbc93
  export GITHUB_REPOSITORY=apache/incubator-superset

  # Cancel previous jobs for a PR
  ./cancel_github_workflows.py 1042

  # Cancel previous jobs for a branch
  ./cancel_github_workflows.py my-branch

  # Cancel all jobs including the last ones, this is useful
  # when you have closed a PR or deleted a branch and want
  # to cancel all its jobs.
  ./cancel_github_workflows.py 1024 --include-last

现在您可以使用 Github 操作的官方并发支持(但仍处于测试阶段

https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency

同时支持工作流和作业!

concurrency: 
  group: ${{ github.head_ref }}
  cancel-in-progress: true

要停止所有 运行 工作流程,只需添加此作业

jobs:
  cancel:
    name: 'Cancel Other Workflow'
    runs-on: ubuntu-latest
    steps:
      - uses: styfle/cancel-workflow-action@0.9.0
        with:
          access_token: ${{ github.token }}

您还可以通过添加

取消特定的工作流程
workflow_id:<workflow id or workflow name>

中: 部分。

有关此操作检查的更多信息 https://github.com/styfle/cancel-workflow-action#readme