Je crée un flux de travail dans GitHub qui crée et utilise une image docker. Par conséquent, j'ai démarré mon fichier de flux de travail avec une variable d'environnement globale pour cette image docker qui est visible pour tous les travaux de mon flux de travail:
name: continuous integration on: push: branches: - '**' env: IMAGE: docker.pkg.github.com/${{ github.repository }}/jactor-persistence:${{ github.sha }}
Je veux remplacer ${{ github.sha }}
par le sha court du commit head, le même que le résultat de la commande suivante git rev-parse --short HEAD
Est-ce possible?
3 Réponses :
Il ne semble pas disponible: le contexte github
github.sha
que github.sha
comme sha de validation complet (qui a déclenché l'exécution du workflow)
Vous devrez en quelque sorte calculer la chaîne que vous voulez (en sélectionnant uniquement les n premiers caractères de ${{ github.sha }}
.
Cela signifie que vous pouvez:
peterevans
cat $my_var
pour utiliser votre VAR
à chaque étape Voir le numéro 68 des actions/starter-workflows
et des exemples .
Mais depuis octobre 2019 , vous avez désormais " Env au niveau du workflow et du travail "
Il est courant de devoir définir un ensemble de variables d'environnement qui sont utilisées dans plusieurs étapes d'un travail et même plusieurs travaux dans un flux de travail.
Vous pouvez maintenant ajouter une carte d'
env
au niveau du flux de travail et du travail .
Ces variables d'environnement seront fusionnées avec l'env
définie à tout échelon inférieur de la hiérarchie.
Voir:
oui ... c'est ce à quoi je suis parvenu moi-même. Mais est-ce possible de le faire dans une expression de la variable globale (ici quelque part ${{ github.sha }}
), pour éviter de dupliquer tout ce qui a besoin de la variable
@ jactor-rises Bien sûr pour global, mais la réponse de peterevans utilise une variable.
.... J'ai maintenant cela, mais j'aimerais avoir un environnement global. variable pour éviter de dupliquer du code dans mes jobs ...
@ jactor-rises Ce serait utiliser une carte d'environnement: voir ma réponse modifiée ci-dessus.
oui ... et j'utilise l'environnement de flux de travail ( env
en haut du fichier de flux de travail) afin qu'il soit disponible pour tous mes travaux dans le flux de travail. Mais au stade du workflow, est-il possible de manipuler ${{ github.sha }}
pour être le sha court, ou dois-je dupliquer cette logique dans mes travaux?
Comme VonC l'a mentionné, vous pouvez simplement calculer la chaîne vous-même lors d'une étape précédente.
- name: Set outputs id: vars run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" - name: Check outputs run: echo ${{ steps.vars.outputs.sha_short }}
Bon ajout à ma réponse. Le problème est de savoir que 7 est assez court, et pas trop court: stackoverflow.com/a/21015031/6309
git rev-parse --short
varie git rev-parse --short
t git rev-parse --short
pour le rendre unique? Je ne peux pas tout à fait dire à partir de la documentation.
Pourtant, c'est le cas: c'est ce qu'illustre stackoverflow.com/a/21015031/6309 .
Merci. J'en ai fait la réponse au lieu de sélectionner les 7 premiers caractères.
Excellente réponse, mais cela ne fonctionne pas correctement lorsqu'il est exécuté sous Windows. Besoin de citer la chaîne d'écho. echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
Merci @MaxGhost. Mise à jour de la réponse.
Oh aussi - il vaut la peine de mentionner que le hachage de commit sur HEAD pendant un PR se référera en fait à un commit de fusion qui est le résultat de la fusion de la branche PR dans la branche cible. CI s'exécute sur cette fusion pour s'assurer que la construction ne sera pas interrompue même en tenant compte des conflits de fusion possibles. C'est le bon hachage de validation lorsque CI est exécuté sur la branche principale. Ce n'est généralement pas un problème, mais cela pourrait être pour vous selon le cas d'utilisation.
Vous pouvez également définir une variable d'environnement avec le sha court:
- name: My step run: myscript ${SHORT_SHA}
SHORT_SHA
peut alors être utilisé comme n'importe quelle autre variable d'environnement, par exemple comme ceci:
- name: Add SHORT_SHA env property with commit short sha run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV