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

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)

为什么会这样呢?

dan*_*orn 5

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)