google-cloud-build - CloudBuild 作业未并行执行
问题描述
我正在学习 CloudBuild,并且了解我可以waitFor
用来影响构建运行的顺序。job1
包括一些睡眠时间来模拟长时间运行的作业。job2
只是呼应了一些东西。done
等待job1
& job2
。所以我创建了一个这样的测试版本:我有一个package.json
{
"scripts": {
"job1": "echo \"[job1] Starting\" && sleep 5 && echo \"[job1] ...\" && sleep 2 && echo \"[job1] Done\" && exit 0",
"job2": "echo \"[job2] Hello from NPM\" && exit 0",
"done": "echo \"DONE DONE DONE!\" && exit 0"
},
}
作业 1 模拟一个长时间运行的作业,我在其中跳跃作业 2 将并行执行。但似乎输出显示它不是。CloudBuild 是否一次只运行 1 个步骤?
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'job1']
id: 'job1'
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'job2']
id: 'job2'
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'done']
waitFor: ['job1', 'job2']
输出
Operation completed over 1 objects/634.0 B.
BUILD
Starting Step #0 - "job1"
Step #0 - "job1": Already have image (with digest): gcr.io/cloud-builders/npm
Step #0 - "job1":
Step #0 - "job1": > learn-gcp@1.0.0 job1 /workspace
Step #0 - "job1": > echo "[job1] Starting" && sleep 5 && echo "[job1] ..." && sleep 2 && echo "[job1] Done" && exit 0
Step #0 - "job1":
Step #0 - "job1": [job1] Starting
Step #0 - "job1": [job1] ...
Step #0 - "job1": [job1] Done
Finished Step #0 - "job1"
Starting Step #1 - "job2"
Step #1 - "job2": Already have image (with digest): gcr.io/cloud-builders/npm
Step #1 - "job2":
Step #1 - "job2": > learn-gcp@1.0.0 job2 /workspace
Step #1 - "job2": > echo "[job2] Hello from NPM" && exit 0
Step #1 - "job2":
Step #1 - "job2": [job2] Hello from NPM
Finished Step #1 - "job2"
Starting Step #2
Step #2: Already have image (with digest): gcr.io/cloud-builders/npm
Step #2:
Step #2: > learn-gcp@1.0.0 done /workspace
Step #2: > echo "DONE DONE DONE!" && exit 0
Step #2:
Step #2: DONE DONE DONE!
Finished Step #2
PUSH
DONE
解决方案
如果您希望job2
与您同时执行,job1
则应该添加该行
waitFor: ['-']
在你的 cloudbuild.yaml 中,在 job2 之后。正如官方文档中所述:
如果未为 waitFor 提供任何值,则构建步骤将等待构建请求中的所有先前构建步骤成功完成,然后再运行。
要在构建时立即运行构建步骤,请在 waitFor 字段中使用 -。
步骤字段中构建步骤的顺序与执行步骤的顺序有关。步骤将根据其 waitFor 字段中定义的依赖关系串行或并行运行。
在文档中,还有一个关于如何并行运行两个作业的示例。
如果您希望 job2 与 job1 一起运行,您应该有这样的东西:
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'job1']
id: 'job1'
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'job2']
id: 'job2'
waitFor: ['-'] # The '-' indicates that this step begins immediately.
- name: 'gcr.io/cloud-builders/npm'
args: ['run', 'done']
waitFor: ['job1', 'job2']
另请注意,您可以使用的最大并发构建数为 10。
推荐阅读
- javascript - 如何调整“工具提示”的位置,使其位于我的旁边
- reactjs - 如何在 React 组件中使用 Meteor.settings
- php - 在具有相同类的多个元素上使用 AJAX/jquery 向 MySQL 添加记录
- javascript - 从 Jest 测试快照中删除额外的换行符?
- oracle - 通过 SQL Server PolyBase 在 Oracle 上创建外部表时出错
- java - 如何重构从属性文件中读取的所谓常量值
- apache-kafka - Confluent Schema Registry 作为独立服务
- shell - 将命令存储在变量中;不使用 eval 实现
- html - 对html中换行符的影响感到困惑
- node.js - fs.readFileSync无法读取nodejs中的文件传递路径变量