Mat*_*pez 0 git sh amazon-ecr aws-codebuild
当主分支中的新提交触发时,我试图从 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
Run Code Online (Sandbox Code Playgroud)
但我得到:
[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
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
该Bad substitution错误可能来自于在不理解 bash 替换语法的 shell 中解释该命令(例如sh)
您可以使用cut完全符合 POSIX 的方式提取子字符串:
COMMIT_ID=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -b -8)
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在寻找短提交哈希,那么使用 git 获取它会更安全,那么您将确保获得正确的长度(无论它小于还是大于 8)并且是唯一的:
git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)