根据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
两个问题:
- 我是否遗漏了什么,或者替代是否真的只“部分”实施了?
- 有谁能告诉我还有什么其他方法可以实现这样的标签名称吗?
更新:
一位同事建议“转义”第二条扩展规则中的斜线,而实际上应该替换该斜线。我既没有看到这样做的理由,也没有看到任何文档中对此的暗示,而且朝这个方向进行的测试也没有成功。
然而事实证明这种模式不会引发上述错误,因此扩展规则似乎得到应用:
_BRANCH_NAME_FLATTENED: ${_BRANCH_NAME_LOWERCASED//\\//-}
再说一遍:这不起作用!但有趣的是,该命令没有引发任何错误。它根本不起作用,这是有道理的,因为我认为它试图替换主题中出现的文字“/”,而这根本不存在。
您需要转义斜线 (
\/
因为替换使用/
其作为分隔符。例子:
cloudbuild.yaml
:和: