get GitHub git branch for AWS CodeBuild

前端 未结 5 1780
鱼传尺愫
鱼传尺愫 2021-02-07 08:15

I\'m setup AWS CodeBuild to build automatically from GitHub. Other CI services provide an environment variable for the branch, but I can\'t find one for AWS CodeBuild. There is

相关标签:
5条回答
  • 2021-02-07 08:37

    CodeBuild strips git information from the filesystem. There is no .git folder, so running a git command will be fruitless.

    I have added a parameter to my CI/CD CloudFormation template:

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

    And I have a Bash script that creates / updates the CI/CD stack:

    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}
    

    I then export the value as an environment variable to CodeBuild machine:

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

    Now I have access to it in my buildspec.yml:

    post_build:
      commands:
        - echo [PHASE] Entered the post_build phase...
        - echo "[DEBUG] Git branch ${GIT_BRANCH}"
    
    0 讨论(0)
  • 2021-02-07 08:39

    You can run:

    git branch -a --contains <sha>
    

    -a means all branches. If your sha is in no branch, which could happen in some cases, you won't see anything.

    0 讨论(0)
  • 2021-02-07 08:44

    You can get inspired by https://github.com/thii/aws-codebuild-extras

    ⚠️I don't recommend to run the curl command for security sake! If some vilain stole access to the thii/aws-codebuild-extras repo, you are screwed!

    Just copy paste the script (understand it!) and add it to your docker image and then call it from your file system.

    #!/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"
    
    0 讨论(0)
  • 2021-02-07 08:52

    Add the following command to the install or pre_build phase of your buildspec.yml:

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

    You can get more information about the build via the following environment variables: 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.

    0 讨论(0)
  • 2021-02-07 08:54

    It's now possible to obtain this information directly from CodeBuild environmental variables:

    • CODEBUILD_WEBHOOK_BASE_REF: The base reference name of the webhook event that triggers the current build. For a pull request, this is the branch reference.
    • CODEBUILD_WEBHOOK_HEAD_REF: The head reference name of the webhook event that triggers the current build. It can be a branch reference or a tag reference.
    • CODEBUILD_WEBHOOK_TRIGGER: Shows the webhook event that triggered the build. This variable is available only for builds triggered by a webhook. The value is parsed from the payload sent to CodeBuild by Github, Github Enterprise, or Bitbucket. The value's format depends on what type of event triggered the build.
      • For builds triggered by a pull request, it is pr/pull-request-number.
      • For builds triggered by creating a new branch or pushing a commit to a branch, it is branch/branch-name.
      • For builds triggered by a pushing a tag to a repository, it is tag/tag-name.
    0 讨论(0)
提交回复
热议问题