google 云构建中如何将触发器添加到队列?

How the triggers are added to Queue in google cloud build?

构建触发器应等到同一存储库的前一个触发器完成执行。

如果我向回购推送两次,触发器会同时执行两次。 我不希望发生这种情况。

如何让云触发器等待上一个触发作业?

提前致谢!

您必须实现此配置和逻辑。它必须评估构建是否已被触发并 运行 然后等待它完成。

也许可以做些什么来检查 buildSteps 和 waitFor or with a custom builder

调用 API 和列出云构建及其状态之间的组合,可能在您的配置中实施 waitFor,以便它检查并在另一个完成后继续构建。

这取决于您提交的构建数量 我不清楚如何在队列中分配优先级,因为它会进入 FIFO。

其他人添加了类似的问题here

希望对您有所帮助。

如上所述"out of box"没有任何内容。

我能想到的只有两件事是:

  1. 添加一个初始步骤,使用 gcloud builds list 查询构建并按 trigger-id 过滤(您必须手动设置,因为我认为您无法从构建本身作为一个变量)。 然后检查是否有超过 1 个构建 运行,休眠,然后再次检查。您唯一需要注意的是再次检查之后,如果新构建开始,您需要有一种方法来区分它(再次因为我们不知道构建 ID)和您的构建......或者你将以连续循环结束,没有构建。

  2. 我们的想法是有一个存储桶,每次构建都会创建一个具有某种命名约定的文件,这样我们就可以构建一个 "queue" 系统。 在每次构建开始时,我们会挂载存储,搜索任何其他文件,然后创建我们的文件。

示例

  • 第一次构建 -- 没有其他构建,我们创建文件“build-name-1”...然后我们开始构建,最后,我们删除该文件。
  • 第二次构建(第一个是 运行),我们挂载存储,检查其他文件,我们看到有一个文件,所以我们创建一个递增最后一个数字的新文件(build- name-2) and sleep...我们等到这个文件不存在,然后我们可以开始构建,最后,再次删除文件。
  • (三、四等以此类推)

使用像 Jenkins 这样的构建服务器,它具有 cloudbuild 所缺少的所有基本功能。然后使用 cloudbuild jenkins 插件,这样构建作业实际上仍然是 运行 on cloudbuild.