Aller au contenu principal

Variables et secrets


Table des matières

  1. Types de configuration
  2. Variables d'environnement
  3. Secrets
  4. Variables de configuration
  5. Environments
  6. Exercices pratiques


1 - Types de configuration

Vue d'ensemble

Comparaison

TypeMasquéScopeUsage
envWorkflowConfiguration build
secretsRepo/Org/EnvAPI keys, tokens
varsRepo/OrgURLs, 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

  1. Repository → Settings → Secrets and variables → Actions
  2. New repository secret
  3. 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
PermissionScope
contents: readClone repo
contents: writePush, releases
packages: writeGitHub Packages
issues: writeCreate 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

  1. Repository → Settings → Secrets and variables → Actions
  2. Onglet Variables
  3. 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éeTypeExemple
API Keysecretssk_live_xxx
PasswordsecretsmyP@ssw0rd
URL publiquevarshttps://api.example.com
Feature flagvarstrue
Versionvars1.0.0

🔝 Retour à la table des matières



5 - Environments

Créer un environment

  1. Repository → Settings → Environments
  2. New environment (staging, production...)
  3. Configurer les protections

Protection rules

ProtectionDescription
Required reviewersApprobation manuelle
Wait timerDélai avant déploiement
Deployment branchesBranches 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_ENV pour variables dynamiques
  • $GITHUB_OUTPUT pour 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 →