【问题标题】:CloudBuild jobs not executed in parallelCloudBuild 作业未并行执行
【发布时间】:2020-03-07 17:49:44
【问题描述】:

我正在学习 CloudBuild,并且了解我可以使用 waitFor 来影响构建运行的顺序。 job1 包含一些睡眠时间来模拟长时间运行的作业。 job2 只是呼应了一些东西。 done 等待 job1job2。所以我创建了一个这样的测试版本:我有一个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"
  },
}

Job 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

【问题讨论】:

    标签: google-cloud-build


    【解决方案1】:

    如果您希望 job2job1 同时执行,您应该添加该行

    waitFor: ['-'] 在您的 cloudbuild.yaml 中,紧接在 job2 之后。正如official documentation中所述:

    如果未为 waitFor 提供任何值,则构建步骤会等待构建请求中的所有先前构建步骤成功完成,然后再运行。

    要在构建时立即运行构建步骤,请在 waitFor 中使用 - 字段。

    步骤字段中构建步骤的顺序与顺序有关 在其中执行步骤。步骤将连续运行或 同时基于其 waitFor 中定义的依赖关系 字段。

    在文档中,还有一个example 介绍了如何并行运行两个作业。

    如果你希望 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']
    

    另请注意,您可以使用的 maximum number of concurent builds 是 10。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      相关资源
      最近更新 更多