web-dev-qa-db-fra.com

obtenir la branche git GitHub pour AWS CodeBuild

Je configure AWS CodeBuild pour créer automatiquement à partir de GitHub. D'autres services CI fournissent une variable d'environnement pour la branche, mais je n'en trouve pas pour AWS CodeBuild. Il y a un CODEBUILD_SOURCE_VERSION défini sur pr/77 est le numéro de la requête pull ou le git commit sha.

Étant donné le commit sha, j'ai essayé d'obtenir le nom de la branche, mais pas de chance jusqu'à présent.

git branch --contains <commitsha> ne fonctionne pas car il s'agit d'une tête détachée. Comment puis-je obtenir la branche git pour la validation de CodeBuild?

13
Cameron Taggart

Tu peux courir:

git branch -a --contains <sha>

-a signifie toutes les branches. Si votre sha n'est pas dans une branche, ce qui pourrait arriver dans certains cas, vous ne verrez rien.

5
Rico

Vous pouvez vous inspirer de https://github.com/thii/aws-codebuild-extras

⚠️Je ne recommande pas d'exécuter la commande curl pour pour des raisons de sécurité ! Si un vilain a volé l'accès au repo thii/aws-codebuild-extras , vous êtes foutu!

Juste copiez, collez le script (comprenez-le!) Et ajoutez-le à votre image Docker, puis appelez-le depuis votre système de fichiers.

#!/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.

Ajoutez la commande suivante à la phase install ou pre_build De votre buildspec.yml:

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

Vous pouvez obtenir plus d'informations sur la génération via les variables d'environnement suivantes: 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.

14
Thi

Il est désormais possible d'obtenir ces informations directement à partir de variables d'environnement CodeBuild :

  • CODEBUILD_WEBHOOK_BASE_REF: Nom de référence de base de l'événement de webhook qui déclenche la génération actuelle. Pour une demande d'extraction, il s'agit de la référence de branche.
  • CODEBUILD_WEBHOOK_HEAD_REF: Le nom de référence de tête de l'événement webhook qui déclenche la génération actuelle. Il peut s'agir d'une référence de branche ou d'une référence de balise.
  • CODEBUILD_WEBHOOK_TRIGGER: Affiche l'événement webhook qui a déclenché la génération. Cette variable n'est disponible que pour les builds déclenchées par un webhook. La valeur est analysée à partir de la charge utile envoyée à CodeBuild par Github, Github Enterprise ou Bitbucket. Le format de la valeur dépend du type d'événement qui a déclenché la génération.
    • Pour les builds déclenchées par une demande d'extraction, il s'agit de pr/pull-request-number.
    • Pour les builds déclenchés en créant une nouvelle branche ou en poussant un commit sur une branche, il s'agit de branch/branch-name.
    • Pour les builds déclenchées par un push d'une balise dans un référentiel, il s'agit de tag/tag-name.
5
Zdenek F

CodeBuild supprime les informations git du système de fichiers. Il n'y a pas .git dossier, donc exécuter une commande git sera inutile.

J'ai ajouté un paramètre à mon modèle CI/CD CloudFormation:

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

Et j'ai un script Bash qui crée/met à jour la pile CI/CD:

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}

J'exporte ensuite la valeur en tant que variable d'environnement sur la machine CodeBuild:

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

Maintenant, j'y ai accès dans mon buildspec.yml:

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