Variables et secrets
Table des matières
- Types de configuration
- Variables d'environnement
- Secrets
- Variables de configuration
- Environments
- Exercices pratiques
1 - Types de configuration
Vue d'ensemble
Comparaison
| Type | Masqué | Scope | Usage |
|---|---|---|---|
env | ❌ | Workflow | Configuration build |
secrets | ✅ | Repo/Org/Env | API keys, tokens |
vars | ❌ | Repo/Org | URLs, flags |
🔝 Retour à la table des matières
2 - Variables d'environnement
Définition dans le workflow
# Niveau workflow
env:
CI: true
NODE_VERSION: '18'
jobs:
build:
# Niveau job
env:
BUILD_TYPE: production
runs-on: ubuntu-latest
steps:
# Niveau step
- name: Build
env:
DEBUG: '1'
run: |
echo "CI: $CI"
echo "NODE: $NODE_VERSION"
echo "TYPE: $BUILD_TYPE"
echo "DEBUG: $DEBUG"
Variables prédéfinies
- run: |
# Informations GitHub
echo "Repository: $GITHUB_REPOSITORY"
echo "SHA: $GITHUB_SHA"
echo "Ref: $GITHUB_REF"
echo "Actor: $GITHUB_ACTOR"
echo "Workspace: $GITHUB_WORKSPACE"
# Runner
echo "OS: $RUNNER_OS"
echo "Arch: $RUNNER_ARCH"
echo "Temp: $RUNNER_TEMP"
Variables dynamiques
steps:
- name: Set variables
run: |
echo "BUILD_DATE=$(date +%Y%m%d)" >> $GITHUB_ENV
echo "GIT_SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Use variables
run: |
echo "Date: $BUILD_DATE"
echo "SHA: $GIT_SHA_SHORT"
Outputs de steps
steps:
- name: Generate data
id: gen
run: echo "version=1.0.0" >> $GITHUB_OUTPUT
- name: Use output
run: echo "Version: ${{ steps.gen.outputs.version }}"
🔝 Retour à la table des matières
3 - Secrets
Créer un secret
- Repository → Settings → Secrets and variables → Actions
- New repository secret
- Nom et valeur
Utilisation
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
env:
API_KEY: ${{ secrets.API_KEY }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
run: ./deploy.sh
- name: Login Docker
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | \
docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
GITHUB_TOKEN
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Create Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release create v1.0.0
| Permission | Scope |
|---|---|
contents: read | Clone repo |
contents: write | Push, releases |
packages: write | GitHub Packages |
issues: write | Create issues |
Bonnes pratiques
# ✅ Bon : Dans env, jamais dans run directement
- name: Deploy
env:
TOKEN: ${{ secrets.TOKEN }}
run: curl -H "Authorization: $TOKEN" ...
# ❌ Mauvais : Secret exposé dans les logs
- run: curl -H "Authorization: ${{ secrets.TOKEN }}" ...
Sécurité
Les secrets sont masqués dans les logs, mais évitez de les passer en arguments de commande.
Secrets d'organisation
# Accessible si partagé avec le repo
env:
ORG_API_KEY: ${{ secrets.ORG_API_KEY }}
🔝 Retour à la table des matières
4 - Variables de configuration
Créer une variable
- Repository → Settings → Secrets and variables → Actions
- Onglet Variables
- New repository variable
Utilisation
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build
env:
APP_URL: ${{ vars.APP_URL }}
FEATURE_FLAG: ${{ vars.ENABLE_FEATURE }}
run: |
echo "URL: $APP_URL"
echo "Feature: $FEATURE_FLAG"
Quand utiliser vars vs secrets
| Donnée | Type | Exemple |
|---|---|---|
| API Key | secrets | sk_live_xxx |
| Password | secrets | myP@ssw0rd |
| URL publique | vars | https://api.example.com |
| Feature flag | vars | true |
| Version | vars | 1.0.0 |
🔝 Retour à la table des matières
5 - Environments
Créer un environment
- Repository → Settings → Environments
- New environment (staging, production...)
- Configurer les protections
Protection rules
| Protection | Description |
|---|---|
| Required reviewers | Approbation manuelle |
| Wait timer | Délai avant déploiement |
| Deployment branches | Branches autorisées |
Utilisation
jobs:
deploy-staging:
environment: staging
runs-on: ubuntu-latest
steps:
- name: Deploy
env:
URL: ${{ vars.DEPLOY_URL }} # Variable d'environment
KEY: ${{ secrets.DEPLOY_KEY }} # Secret d'environment
run: ./deploy.sh
deploy-production:
needs: deploy-staging
environment:
name: production
url: https://myapp.com
runs-on: ubuntu-latest
steps:
- run: ./deploy.sh
Workflow complet
name: Deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/
deploy-staging:
needs: build
environment: staging
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: build
- run: ./deploy.sh ${{ vars.STAGING_URL }}
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
deploy-production:
needs: deploy-staging
environment: production
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: build
- run: ./deploy.sh ${{ vars.PROD_URL }}
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Utiliser des secrets
Créez un workflow qui utilise un secret pour Docker login :
Solution
name: Docker Build
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Docker Hub
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASS: ${{ secrets.DOCKER_PASSWORD }}
run: echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
- run: docker build -t myapp .
Exercice 2 : Variables dynamiques
Créez une variable avec la date et le SHA :
Solution
name: Version Info
on: push
jobs:
version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set version
run: |
echo "VERSION=$(date +%Y.%m.%d)-$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Show version
run: echo "Version: $VERSION"
Quiz
Q1. Quelle est la différence entre secrets et vars ?
Réponse
secrets sont masqués dans les logs et pour les données sensibles. vars sont visibles et pour la configuration non-sensible.
Q2. Comment accéder à un secret ?
Réponse
${{ secrets.SECRET_NAME }}
🔝 Retour à la table des matières
Points clés à retenir
- secrets : données sensibles (masquées)
- vars : configuration non-sensible (visibles)
$GITHUB_ENVpour variables dynamiques$GITHUB_OUTPUTpour outputs de steps- GITHUB_TOKEN : token auto-généré
- Environments : staging, production avec protections
- Ne jamais afficher les secrets dans les logs
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Cache et artifacts →