GCP CloudBuild 替换在管道中失败

问题描述 投票:0回答:1

根据 GCP CloudBuild 文档,可以在管道替换中使用 shell 参数扩展。

我想根据 git 分支的名称为 docker 镜像定义一个标签名称。这些名称只能包含小写字符且不能包含斜杠。所以我想为此使用参数扩展:

substitutions:
    _BRANCH_NAME_LOWERCASED: ${BRANCH_NAME,,} # to lowercase
    _BRANCH_NAME_FLATTENED: ${_BRANCH_NAME_LOWERCASED////-} # replace "/" with "-"
    _DOCKER_IMAGE_TAG: ${SHORT_SHA:-$_BRANCH_NAME_FLATTENED}

但是第二步失败了:

[_BRANCH_NAME_FLATTENED -> ${_BRANCH_NAME_LOWERCASED////-}]:错误替换

所以显然第一个扩展有效,第二个扩展失败了。这表明扩展似乎仅部分可用。

这令人惊讶,因为这可以在 CLI 上运行:

$ SHORT_SHA=
$ BRANCH_NAME=BRANCH-80/some-fancy-feature
$
$ _BRANCH_NAME_LOWERCASED=${BRANCH_NAME,,}
$ _BRANCH_NAME_FLATTENED=${_BRANCH_NAME_LOWERCASED////-}
$ _DOCKER_IMAGE_TAG=${SHORT_SHA:-$_BRANCH_NAME_FLATTENED}
$
$ echo $_DOCKER_IMAGE_TAG
branch-80-some-fancy-feature

两个问题:

  1. 我是否错过了这里的某些内容,或者替代实际上只是“部分”实现了?
  2. 有人知道我还能如何实现这样的标签名称吗?

更新:

一位同事建议“转义”第二个扩展规则中的斜杠,实际上应该替换的斜杠。我既没有看到这样做的原因,也没有在任何文档中看到任何对此的暗示,对该方向的测试也没有成功。

然而事实证明,这种模式不会抛出上述错误,因此扩展规则似乎得到了应用:

 _BRANCH_NAME_FLATTENED: ${_BRANCH_NAME_LOWERCASED//\\//-}

再一次:这不起作用!但有趣的是,该命令没有引发任何错误。它根本没有任何效果,这是有道理的,因为我假设它试图替换主题中出现的文字“/”,而它根本不存在。

shell google-cloud-platform parameters pipeline substitution
1个回答
0
投票
您需要转义斜杠(

\/

,因为替换使用 
/
 作为分隔符。

示例:

cloudbuild.yaml

steps: - name: bash args: - -c - | echo ${BRANCH_NAME} echo ${_BRANCH_NAME_LOWERCASED} echo ${_BRANCH_NAME_FLATTENED} echo ${_DOCKER_IMAGE_TAG} substitutions: _BRANCH_NAME_LOWERCASED: ${BRANCH_NAME,,} _BRANCH_NAME_FLATTENED: ${_BRANCH_NAME_LOWERCASED//\//-} _DOCKER_IMAGE_TAG: ${SHORT_SHA:-$_BRANCH_NAME_FLATTENED} options: dynamicSubstitutions: true
并且:

gcloud builds submit \ --config=cloudbuild.yaml \ --project=${PROJECT} \ --substitutions=BRANCH_NAME="FOO/BAR"
FOO/BAR
foo/bar
foo-bar
    
© www.soinside.com 2019 - 2024. All rights reserved.