获取AWS CodeBuild的GitHub git分支

Cam*_*art 13 git amazon-web-services aws-codebuild

我将AWS CodeBuild设置为从GitHub自动构建.其他CI服务为分支提供环境变量,但我找不到AWS CodeBuild的环境变量.有一种CODEBUILD_SOURCE_VERSION被设置为pr/7其中7的上拉请求号码或git的承诺SHA.

鉴于提交sha,我一直试图获得分支名称,但到目前为止没有运气.

git branch --contains <commitsha>不起作用,因为它是一个独立的头.如何从CodeBuild获取提交的git分支?

Yve*_* M. 16

您可以通过https://github.com/thii/aws-codebuild-extras获得灵感

⚠️ curl为了安全起见,不建议运行命令!如果一些vilain偷走了thii/aws-codebuild-extras repo,你就搞砸了!

只需复制粘贴脚本(了解它!)并将其添加到docker镜像,然后从文件系统中调用它.

#!/bin/bash

export CI=true
export CODEBUILD=true

export CODEBUILD_GIT_BRANCH=`git symbolic-ref HEAD --short 2>/dev/null`
if [ "$CODEBUILD_GIT_BRANCH" == "" ] ; then
  CODEBUILD_GIT_BRANCH=`git branch -a --contains HEAD | sed -n 2p | awk '{ printf $1 }'`
  export CODEBUILD_GIT_BRANCH=${CODEBUILD_GIT_BRANCH#remotes/origin/}
fi

export CODEBUILD_GIT_MESSAGE=`git log -1 --pretty=%B`
export CODEBUILD_GIT_AUTHOR=`git log -1 --pretty=%an`
export CODEBUILD_GIT_AUTHOR_EMAIL=`git log -1 --pretty=%ae`
export CODEBUILD_GIT_COMMIT=`git log -1 --pretty=%H`
export CODEBUILD_GIT_TAG=`git describe --tags --abbrev=0`

export CODEBUILD_PULL_REQUEST=false
if [[ $CODEBUILD_GIT_BRANCH == pr-* ]] ; then
  export CODEBUILD_PULL_REQUEST=${CODEBUILD_GIT_BRANCH#pr-}
fi

export CODEBUILD_PROJECT=${CODEBUILD_BUILD_ID%:$CODEBUILD_LOG_PATH}
export CODEBUILD_BUILD_URL=https://$AWS_DEFAULT_REGION.console.aws.amazon.com/codebuild/home?region=$AWS_DEFAULT_REGION#/builds/$CODEBUILD_BUILD_ID/view/new

echo "==> AWS CodeBuild Extra Environment Variables:"
echo "==> CI = $CI"
echo "==> CODEBUILD = $CODEBUILD"
echo "==> CODEBUILD_GIT_AUTHOR = $CODEBUILD_GIT_AUTHOR"
echo "==> CODEBUILD_GIT_AUTHOR_EMAIL = $CODEBUILD_GIT_AUTHOR_EMAIL"
echo "==> CODEBUILD_GIT_BRANCH = $CODEBUILD_GIT_BRANCH "
echo "==> CODEBUILD_GIT_COMMIT = $CODEBUILD_GIT_COMMIT"
echo "==> CODEBUILD_GIT_MESSAGE = $CODEBUILD_GIT_MESSAGE"
echo "==> CODEBUILD_GIT_TAG = $CODEBUILD_GIT_TAG"
echo "==> CODEBUILD_PROJECT = $CODEBUILD_PROJECT"
echo "==> CODEBUILD_PULL_REQUEST = $CODEBUILD_PULL_REQUEST"
Run Code Online (Sandbox Code Playgroud)

  • Codebuild 不再对此感到满意。 (3认同)
  • CodeBuild 规范规定:“请勿设置名称以 CODEBUILD_ 开头的任何环境变量”--https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html (2认同)

Thi*_*Thi 14

将以下命令添加到buildspec.yml 的installpre_build阶段:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/thii/aws-codebuild-extras/master/install)"

您可以通过以下环境变量获取有关版本的详细信息: CI, CODEBUILD, CODEBUILD_GIT_AUTHOR, CODEBUILD_GIT_AUTHOR_EMAIL, CODEBUILD_GIT_BRANCH, CODEBUILD_GIT_COMMIT, CODEBUILD_GIT_MESSAGE, CODEBUILD_GIT_TAG, CODEBUILD_PROJECT, CODEBUILD_PULL_REQUEST.

  • ⚠️尼斯!但是我不建议出于[安全考虑](https://en.wikipedia.org/wiki/Social_engineering_(security))运行`curl`命令!如果某些恶意破坏了对[thii / aws-codebuild-extras](https://github.com/thii/aws-codebuild-extras)存储库的访问权限,那么您就搞砸了!有关完整复制/粘贴的脚本,请参见/sf/answers/3526585401/ (3认同)

Ric*_*ico 5

您可以运行:

git branch -a --contains <sha>
Run Code Online (Sandbox Code Playgroud)

-a表示所有分支。如果您的sha没有分支(在某些情况下可能会发生),那么您将看不到任何东西。


Zde*_*k F 5

现在可以直接从CodeBuild环境变量获取此信息:

  • CODEBUILD_WEBHOOK_BASE_REF:触发​​当前构建的webhook事件的基本引用名称。对于拉取请求,这是分支引用。
  • CODEBUILD_WEBHOOK_HEAD_REF:触发​​当前构建的webhook事件的头参考名称。它可以是分支引用或标签引用。
  • CODEBUILD_WEBHOOK_TRIGGER:显示触发构建的webhook事件。此变量仅可用于由Webhook触发的构建。该值是从Github,Github Enterprise或Bitbucket发送到CodeBuild的有效负载中解析的。值的格式取决于触发构建的事件类型。
    • 对于由拉取请求触发的构建,它是pr / pull-request-number。
    • 对于通过创建新分支或将提交推送到分支而触发的构建,它是分支/分支名称。
    • 对于通过将标签推送到存储库触发的构建,它是标签/标签名称。

  • 访问这些环境变量是否有先决条件?我尝试将它们记录在构建中,但它们都以空的形式返回 https://imgur.com/a/pgEu8DQ (2认同)
  • 这些可能仅在构建实际由 Webhook 触发时出现 - 手动触发或重试您停止的构建不会有它们。(/猜测) (2认同)
  • @ankon 是的,确实如此 (2认同)