- GitHub
- GitHub Actions
Lorsque vous créez un workflow
dans GitHub Actions, vous avez toujours plusieurs variables d’environnement que vous devez utiliser ou réutiliser à différentes étapes pour atteindre votre objectif. Cela peut être le chemin de l’environnement, le chemin du dossier, les logins, les mots de passe, etc.
Dans ce tutoriel, nous découvrirons les différentes façons de déclarer et d’utiliser des variables d’environnement et de stocker et récupérer vos certificats à l’aide de secrets
.
La manière la plus simple de définir une variable d’environnement est de la déclarer directement dans une step
:
- name: Basic variable usage
run: |
echo Let\'s define a variable:
VERSION_PREFIX=MyPrefix
echo Display the version prefix: $VERSION_PREFIX
echo And use it multiple times: $VERSION_PREFIX
Comme vous pouvez le voir ci-dessus, la variable VERSION_PREFIX
est définie directement dans la step
et peut ensuite être utilisée plusieurs fois à l’intérieur. Ceci est utile lorsque vous définissez des variables tout au long de vos scripts.
Une autre syntaxe équivalente qui fait la même chose est celle-ci:
- name: Display local environment variable
env:
VERSION_PREFIX: MyPrefix
run: |
echo We can use a variable multiple time: $VERSION_PREFIX
echo inside a multi-line script: $VERSION_PREFIX
L’avantage de cette syntaxe est que les variables d’environnement ont une zone spécifique appelée env
au-dessus du script. Le mot clé env
est une propriété dédiée définie par les GitHub Actions pour déclarer nos variables. Mieux vaut utiliser cette syntaxe, si vous connaissez toutes les valeurs de chaque variable au début du script.
Parfois, vous souhaitez définir une variable d’environnement pour la réutiliser plusieurs fois dans vos jobs
, par exemple une configuration de build, un suffixe de fichier, etc. Vous devez donc la définir globalement dans le job. Pour ce faire, vous avez une propriété env
accessible au niveau du job
où vous pouvez le faire:
job1:
runs-on: ubuntu-latest
env:
OUTPUT_SUFFIX: MySuffix
steps:
- name: Use environment variables from entire job
run: echo We display the $OUTPUT_SUFFIX define for the entire job1
- name: Use environment variables from entire job
run: echo We reuse the output suffix $OUTPUT_SUFFIX multiples time in the entire job1
Comme démontré ci-dessus, vous avez la possibilité de réutiliser la variable d’environnement OUTPUT_SUFFIX
à travers plusieurs steps
de votre job
.
Si vous avez plusieurs jobs
dans votre workflow
, vous devrez probablement partager certaines variables globales entre chaque jobs
.
Heureusement, vous avez une propriété env
disponible au niveau du workflow
, que vous pouvez utiliser comme ceci:
name: Variables
on:
push:
branches: [main]
env:
BUILD_CONFIGURATION: Release
jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: First script from job1
run: echo We use the global workflow variable $BUILD_CONFIGURATION
job2:
needs: job1
runs-on: ubuntu-latest
steps:
- name: First script from job2
run: echo And here again we use the same workflow variable $BUILD_CONFIGURATION
Comme vous le voyez ci-dessus, la variable BUILD_CONFIGURATION
est définie pour tout le workflow
et est utilisée dans job1
et job2
Pour avoir accès à vos certificats dans vos workflows, vous devez utiliser quelque chose appelé secrets
. Cela vous permet de stocker ces fichiers en toute sécurité dans les GitHub Actions.
Ne stockez pas vos certificats et mots de passe directement dans vos répertoires GitHub, ces fichiers contiennent des données que vous seul devez connaître.
Pour stocker ces fichiers, allez dans votre projet GitHub et allez dans Settings
puis Secrets
.
Dans ce menu, cliquez sur le bouton New repository secret
pour ajouter le premier. Comme vous l’avez probablement déjà remarqué, il n’y a aucun moyen de télécharger vos certificats directement sur cette interface. Pour résoudre ce problème, nous devons transformer notre fichier en une chaîne de caractère base64.
Pour encoder votre certificat, en fonction de votre machine locale, vous pouvez faire:
Windows
certutil -encode data.txt tmp.b64 && findstr /v /c:- tmp.b64 > data.b64 && del tmp.b64
Mac
base64 -i data.txt -o data.b64
Ubuntu
base64 data.txt > data.b64
Ensuite, nous pouvons stocker cette chaîne en toute sécurité dans les secrets
des GitHub Actions. Par exemple, si nous stockons un keystore dans les secrets
, nous aurons quelque chose comme ceci:
Dans votre job
, vous pouvez récupérer ce fichier en le décodant, par exemple avec un runner
Ubuntu:
- name: Get secret from base64
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
run: |
echo import certificate from secrets and regenerate the file
echo $KEYSTORE_BASE64 | base64 -d > $RUNNER_TEMP/my_production.keystore
Pour les autres runners
, la syntaxe pour obtenir un fichier à partir d’une chaîne base64 est:
Windows
echo $YOUR_STRING > data.b64 && certutil -decode data.b64 data.txt
Mac
echo $YOUR_STRING | base64 -D -o data.txt
Ubuntu
echo $YOUR_STRING | base64 -d > data.txt
Vous trouverez un exemple complet dans ce répertoire GitHub. Comme vous pouvez le voir dans ce tutoriel, vous avez plusieurs façons d’utiliser les variables d’environnement dans les GitHub Actions, assurez-vous de vérifier le contexte pour appliquer le bon.
Sources: