我们正在使用cloud build在GCP上进行持续部署。当将提交推送到fast时(例如在开发时),触发的构建是并行运行的。有时它们会相互干扰。例如,当两个应用程序引擎部署同时运行时。
有没有一种方法或最佳实践来强制从同一个构建触发器触发的构建一个接一个地运行?
致敬,卡斯汀
发布于 2021-07-19 21:25:27
为此,我在cloudbuild.yaml文件中添加了一个初始步骤。它的作用是:
gcloud builds list --ongoing --format='value(id)' --filter="substitutions.TRIGGER_NAME=$TRIGGER_NAME".gcloud builds cancel ${on_going_build[i]}以取消构建请参阅下面的cloudbuild.yaml
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发布于 2019-08-21 03:16:38
你不能通过设置。但您可以定义自定义构建器。创建一个来检查构建是否正在为你的项目和你的存储库运行。如果是,则返回错误代码并使构建过程崩溃,否则,继续处理。
发布于 2021-05-14 19:33:09
我已经通过使用日志记录Router +发布/订阅触发器实现了顺序构建。
我的第一个构建是由提交触发的,并构建了一个映像。我检查了日志,发现构建完成时只有一条消息,比如textPayload="Pushing gcr.io/my-project/my-repo/my_image:latest"。
通过使用上面的过滤器,这可以被路由到一个发布/订阅主题,该主题触发了我的第二个构建,即使用第一个构建中的图像。
可能并不适用于所有用例,因为您需要找到发出的单个事件,该事件表示构建成功,但当使用上述方法构建映像时,它肯定有效。
https://stackoverflow.com/questions/55905120
复制相似问题