Je crée des images de docker avec des actions Github et je veux marquer les images avec le nom de la branche, je n'ai trouvé que GITHUB_REF
variable, mais il en résulte refs/heads/feature-branch-1
et je n'ai besoin que de feature-branch-1
.
J'ai ajouté une étape distincte pour extraire le nom de la branche de $GITHUB_REF
et définissez-le sur la sortie pas à pas
- name: Extract branch name
Shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
après cela, je peux l'utiliser dans les étapes suivantes avec
- name: Push to ECR
id: ecr
uses: jwalton/gh-ecr-Push@master
with:
access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
region: us-west-2
image: eng:${{ steps.extract_branch.outputs.branch }}
Je crois GITHUB_REF
est la seule variable d'environnement qui inclut le nom de la branche.
Vous pouvez extraire uniquement le nom de la branche du reste de cette chaîne comme ceci:
${GITHUB_REF##*/}
Exemple:
$ GITHUB_REF=refs/heads/feature-branch-1
$ echo ${GITHUB_REF##*/}
feature-branch-1
Mise à jour: ajout d'un exemple de workflow complet.
name: CI
on: Push
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Git checkout
uses: actions/checkout@v1
- name: Branch name
run: echo running on branch ${GITHUB_REF##*/}
- name: Build
run: docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
Source: https://github.com/tedmiston/x/blob/master/.github/workflows/workflow.yml
Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
Shell: /bin/bash -e {0}
Sending build context to Docker daemon 146.9kB
Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:master
Journal: https://github.com/tedmiston/x/commit/cdcc58a908e41d3d90c39ab3bf6fef1ad2c4238a/checks#step:4:16
Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
Shell: /bin/bash -e {0}
Sending build context to Docker daemon 144.9kB
Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:branch-name-test
Journal: https://github.com/tedmiston/x/commit/4e8d31259f861aaa2c30375756fc081c3659bddf/checks#step:4:16
Voir cette réponse pour plus d'informations sur la syntaxe d'expansion des paramètres.
Pour référence, la page Environnements virtuels pour les actions GitHub répertorie toutes les variables d'environnement disponibles dans l'environnement d'exécution.
Sachez que si vous exécutez votre action GitHub sur le déclencheur de demande d'extraction, alors GITHUB_REF
la variable contiendra quelque chose comme refs/pull/421/merge
donc si vous essayez de git Push
à ce nom, il échouera très probablement.
Cependant, vous pouvez utiliser des références sur le contexte GitHub dans votre YAML. Quelque chose comme: ${{ github.head_ref }}
pour le définir comme une variable en, j'utilise cette syntaxe:
- name: Extract branch name
Shell: bash
run: echo "::set-env name=BRANCH_NAME::$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')"
- name: Test
run: echo "${BRANCH_NAME}"
J'ai trouvé cette syntaxe ici: Actions Github - Starflows # Comment définir la variable env? # 68
Rmq: le sed 's/\//_/g'
doit remplacer \
par _
dans le nom de la branche
Je viens de faire un test simple dans Actions GitHub en utilisant un script bash:
#!/bin/bash
echo Reserved for REPO_NAME=${GITHUB_REPOSITORY##*/}
echo GITHUB_REF=${GITHUB_REF}
echo EXTRACT_GITHUB_REF=${GITHUB_REF##*/}
echo EXTRACT_GITHUB_REF_HEADS=$(echo ${GITHUB_REF#refs/heads/})
cd $REPO_NAME
git checkout ${GITHUB_REF##*/}
git checkout $(echo ${GITHUB_REF#refs/heads/})
Voici une capture d'écran de la sortie:
Donc, ${GITHUB_REF##*/}
Et $(echo ${GITHUB_REF#refs/heads/})
sont corrects
Vous pouvez utiliser https://github.com/rlespinasse/github-slug-action
- uses: rlespinasse/github-slug-action@master
- name: Print slug variables
run: |
echo ${{ env.GITHUB_REF_SLUG }}
echo ${{ env.GITHUB_HEAD_REF_SLUG }}
echo ${{ env.GITHUB_BASE_REF_SLUG }}
Il extraira github_ref des variables d'environnement.
if: github.ref == 'refs/heads/integration' && github.event_name == 'Push'
Vous pouvez utiliser la commande ci-dessus et remplacer la branche ou l'événement que vous souhaitez exécuter.