首页 > 解决方案 > 在 Google Cloud Build 中,args 数组和长字符串作为 arg 有什么区别?

问题描述

在设置我的构建系统以自动对 Cloud Registry 中的容器进行版本控制时(如何通过 Google Cloud Build 中的步骤设置环境或替换变量?),我遇到了一个令人沮丧的错误。

这有效:

- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'docker build -t gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA -t gcr.io/$PROJECT_ID/$REPO_NAME:latest -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat VERSION) -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat SEMVER) -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR) -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR).$(cat MINOR) .']
images: ['gcr.io/$PROJECT_ID/$REPO_NAME']

但这不起作用:

- name: 'gcr.io/cloud-builders/docker'
  entrypoint: 'bash'
  args: ['-c', 'docker', 'build',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:latest',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat VERSION)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat SEMVER)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR).$(cat MINOR)',
    '.']
images: ['gcr.io/$PROJECT_ID/$REPO_NAME']

这些不应该是等价的吗?我错过了什么?

标签: google-cloud-build

解决方案


试试这个。

```
  - name: 'gcr.io/cloud-builders/docker'
    entrypoint: 'bash'
    args: 
      - -c
      - |
        docker build -t gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA \
        -t gcr.io/$PROJECT_ID/$REPO_NAME:latest \
        -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat VERSION) \
        -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat SEMVER) \
        -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR) \
        -t gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR).$(cat MINOR) .

images: ['gcr.io/$PROJECT_ID/$REPO_NAME']
```

一种可行的方法是。只需从 bash 中删除入口点。

```
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:latest',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat VERSION)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat SEMVER)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR)',
    '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$(cat MAJOR).$(cat MINOR)',
    '.']
images: ['gcr.io/$PROJECT_ID/$REPO_NAME']
```

推荐阅读