web-dev-qa-db-ja.com

AWS CodeBuildのGitHub gitブランチを取得する

GitHubから自動的にビルドするようにAWS CodeBuildをセットアップしています。他のCIサービスはブランチの環境変数を提供しますが、AWS CodeBuildの環境変数は見つかりません。 CODEBUILD_SOURCE_VERSIONに設定されているpr/7 どこ 7はプルリクエスト番号またはgit commit shaです。

コミットshaを考えると、ブランチ名を取得しようとしましたが、これまでのところ運はありません。

git branch --contains <commitsha>は、切り離されたヘッドであるため機能しません。 CodeBuildからコミットのgitブランチを取得するにはどうすればよいですか?

13
Cameron Taggart

以下を実行できます。

git branch -a --contains <sha>

-aはすべてのブランチを意味します。あなたのshaが分岐していない場合、これは場合によっては発生する可能性がありますが、何も表示されません。

5
Rico

https://github.com/thii/aws-codebuild-extras に触発されます

⚠️ セキュリティのため !でcurlコマンドを実行することはお勧めしません。一部のビランが thii/aws-codebuild-extras リポジトリへのアクセスを盗んだ場合、あなたは台無しにされます!

スクリプトをコピーして貼り付ける (理解してください!)、それをドッカーイメージに追加してから、ファイルシステムから呼び出します。

#!/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"
15
Yves M.

Buildspec.ymlのinstallまたは_pre_build_フェーズに次のコマンドを追加します。

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

次の環境変数を使用して、ビルドに関する詳細情報を取得できます。CICODEBUILD、_CODEBUILD_GIT_AUTHOR_、_CODEBUILD_GIT_AUTHOR_EMAIL_、_CODEBUILD_GIT_BRANCH_、_CODEBUILD_GIT_COMMIT_、_CODEBUILD_GIT_MESSAGE_、_CODEBUILD_GIT_TAG_、_CODEBUILD_PROJECT_、_CODEBUILD_PULL_REQUEST_。

14
Thi

この情報を 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です。
    • 新しいブランチを作成するか、ブランチにコミットをプッシュすることによってトリガーされるビルドの場合、ブランチ/ブランチ名です。
    • タグをリポジトリにプッシュすることによってトリガーされるビルドの場合、タグ/タグ名です。
5
Zdenek F

CodeBuildは、ファイルシステムからgit情報を取り除きます。 .gitフォルダーがないため、gitコマンドを実行しても無駄になります。

CI/CD CloudFormationテンプレートにパラメーターを追加しました:

  GitBranch:
    Description: Github branch to be deployed
    Type: String
    Default: master

そして、CI/CDスタックを作成/更新するBashスクリプトがあります。

readonly git_branch=$(git branch 2>/dev/null | grep "^*" | colrm 1 2)

aws cloudformation create-stack \
  --stack-name ${cicd_stack_name} \
  --parameters ParameterKey=GitBranch,ParameterValue=${git_branch}

次に、値を環境変数としてCodeBuildマシンにエクスポートします。

CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
  Environment:
    Type: LINUX_CONTAINER
    Image: aws/codebuild/Java:openjdk-8
    EnvironmentVariables:
      - Name: GIT_BRANCH
        Value: !Ref GitBranch

これで、buildspec.ymlでアクセスできます。

post_build:
  commands:
    - echo [PHASE] Entered the post_build phase...
    - echo "[DEBUG] Git branch ${GIT_BRANCH}"
2
Vadym Tyemirov