首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止cloud build并行运行build?

如何防止cloud build并行运行build?
EN

Stack Overflow用户
提问于 2019-04-29 22:08:02
回答 3查看 1.5K关注 0票数 10

我们正在使用cloud build在GCP上进行持续部署。当将提交推送到fast时(例如在开发时),触发的构建是并行运行的。有时它们会相互干扰。例如,当两个应用程序引擎部署同时运行时。

有没有一种方法或最佳实践来强制从同一个构建触发器触发的构建一个接一个地运行?

致敬,卡斯汀

EN

回答 3

Stack Overflow用户

发布于 2021-07-19 21:25:27

为此,我在cloudbuild.yaml文件中添加了一个初始步骤。它的作用是:

  • 通过gcloud builds list --ongoing --format='value(id)' --filter="substitutions.TRIGGER_NAME=$TRIGGER_NAME".
  • Loop获取所有正在进行的构建id,但跳过第一个,该列表是按最近创建时间排序的,因此它不会停止最新的构建,这是第一个索引
  • 运行gcloud builds cancel ${on_going_build[i]}以取消构建

请参阅下面的cloudbuild.yaml

代码语言:javascript
复制
steps:
  - id: "Stop Other Ongoing Build"
    name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
    - -c
    - |
      on_going_build=($(gcloud builds list --ongoing --format='value(id)' --filter="substitutions.TRIGGER_NAME=$TRIGGER_NAME" | xargs))
      for (( i=0; i<${#on_going_build[@]}; i++ )); do
        if [ "$i" -gt "0" ]; then # skip current
          echo "Cancelling build ${on_going_build[i]}"

          gcloud builds cancel ${on_going_build[i]}
        fi
      done
票数 3
EN

Stack Overflow用户

发布于 2019-08-21 03:16:38

你不能通过设置。但您可以定义自定义构建器。创建一个来检查构建是否正在为你的项目和你的存储库运行。如果是,则返回错误代码并使构建过程崩溃,否则,继续处理。

票数 0
EN

Stack Overflow用户

发布于 2021-05-14 19:33:09

我已经通过使用日志记录Router +发布/订阅触发器实现了顺序构建。

我的第一个构建是由提交触发的,并构建了一个映像。我检查了日志,发现构建完成时只有一条消息,比如textPayload="Pushing gcr.io/my-project/my-repo/my_image:latest"

通过使用上面的过滤器,这可以被路由到一个发布/订阅主题,该主题触发了我的第二个构建,即使用第一个构建中的图像。

可能并不适用于所有用例,因为您需要找到发出的单个事件,该事件表示构建成功,但当使用上述方法构建映像时,它肯定有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55905120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档