如何在CodeBuild中标记短提交SHA图像



我试图从CodeBuild构建中获得提交的短git SHA,当它从主分支中的新提交触发时。

我知道CODEBUILD_RESOLVED_SOURCE_VERSION包含完整的提交SHA。在将输出图像推送到ECR之前,我想缩小这个值来标记输出图像。

我在buildspec.yml中尝试过:

version: 0.2
phases:
pre_build:
commands:
...
- COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
...
build:
commands:
...
- echo Tagging image with commit id $COMMIT_ID
- docker tag $REPOSITORY_URI/$IMAGE_REPO_NAME:latest $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID
...
post_build:
commands:
...
- docker push $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID

但是我得到:

[Container] 2022/07/07 11:30:05 Running command COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
/codebuild/output/tmp/script.sh: 4: Bad substitution

为什么会这样?

Bad substitution错误可能来自于在不理解bash替换语法的shell中解释命令(例如sh)

您可以使用cut来以完全POSIX兼容的方式提取子字符串:

COMMIT_ID=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -b -8)

然而,如果你正在寻找短的提交哈希,使用git更安全,然后你将确保你得到正确的长度(无论它小于等于或大于8)是唯一的:

git rev-parse --short HEAD

最新更新