通过GitHub API触发作业会取消当前正在运行的作业



circleci提交工作流中有两个作业。第一个(build_and_test(构建了我们的iOS项目,并运行了一些单元测试。第二个(build_and_snapshot(构建了我们的iOS项目,并运行了一些运行时间更长的UI测试。我们希望build_and_test在每次提交时运行,包括在分支上进行的提交,并且运行时间较长的build_and_snapshot仅在master上运行。

但是,我们也希望能够在分支上按命令运行build_and_snapshot。因此,我们添加了一个GitHub Action,因此如果您添加以下PR注释:/snapshot <branch_name>circleci在分支<branch_name>上运行build_and_snapshot

这是我们的工作流程YAML文件:

name: Comment commands handler
on:
issue_comment:
types: [created]
jobs:
snapshot:
runs-on: macos-latest
if: contains(github.event.comment.body, '/snapshot') && github.event.issue.pull_request
steps:
- name: Run snapshots job
shell: bash
run: BRANCH_NAME=${COMMENT_BODY#* } && curl -u our_circle_ci_api_key -d build_parameters[CIRCLE_JOB]=build_and_snapshot "https://circleci.com/api/v1.1/project/gh/project/repo/tree/${BRANCH_NAME}"
env:
COMMENT_BODY: ${{ github.event.comment.body }}

这是有效的,但如果build_and_test正在运行,它会取消它。我认为这是因为circleci设置取消了多余的构建。除了禁用该设置之外,还有什么办法可以解决这个问题吗?我们是否需要轮询并等待build_and_test完成?

您建议的任何一种方法都会起作用,尽管如果您从GitHub Actions进行轮询,您可能会遇到竞争条件,因为许多方法将同时运行,并且当一个方法完成时,两个方法很可能会同时触发一个构建。

关闭CircleCI上的冗余构建设置似乎是最好的选择。

顺便说一句,GitHub操作像这样操作(取消冗余操作(是一个要求很高(缺失(的功能。

最新更新