我试图从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