GitHub Actions révolutionne l'automatisation des workflows de développement en offrant une plateforme CI/CD intégrée directement dans GitHub. Ce tutoriel GitHub Actions vous guidera pas à pas pour créer vos premiers workflows d'automatisation, depuis les concepts de base jusqu'au déploiement sur Azure App Service.
Contrairement aux solutions externes comme Jenkins ou GitLab CI, GitHub Actions s'intègre nativement dans l'écosystème GitHub, simplifiant considérablement la mise en place de pipelines CI/CD pour vos projets.
Les fondamentaux des workflows GitHub Actions
Un workflow GitHub Actions est un fichier YAML placé dans le répertoire .github/workflows/ de votre repository. Il définit un ensemble d'actions automatisées qui se déclenchent sur des événements spécifiques (push, pull request, release, etc.).
Structure d'un workflow basique
Voici la structure minimale d'un workflow GitHub Actions :
name: Mon Premier Workflow CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
Composants essentiels d'un workflow
- name : nom descriptif du workflow
- on : événements déclencheurs (push, pull_request, schedule, etc.)
- jobs : unités d'exécution qui peuvent s'exécuter en parallèle
- runs-on : environnement d'exécution (ubuntu-latest, windows-latest, macos-latest)
- steps : étapes séquentielles d'un job
- uses : actions prédéfinies du marketplace
- run : commandes shell à exécuter
Créer un pipeline CI complet pour une application Node.js
Construisons ensemble un pipeline GitHub Actions CI/CD complet pour une application Node.js avec tests, build et déploiement.
Workflow CI avec jobs parallèles
name: CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
env:
NODE_VERSION: '18'
AZURE_WEBAPP_NAME: 'mon-app-azure'
jobs:
# Job de test
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18, 20]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Run tests
run: npm test -- --coverage
- name: Upload coverage reports
uses: codecov/codecov-action@v3
if: matrix.node-version == 18
# Job de build
build:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build application
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: build-files
path: dist/
Gestion des secrets et variables d'environnement
Pour gérer les informations sensibles comme les clés API ou les credentials Azure, GitHub Actions utilise un système de secrets sécurisé :
- Accédez aux Settings de votre repository
- Cliquez sur "Secrets and variables" > "Actions"
- Ajoutez vos secrets (ex: AZURE_CREDENTIALS, DATABASE_URL)
- Utilisez-les dans vos workflows avec
${{ secrets.NOM_SECRET }}
Déploiement automatisé sur Azure App Service
Le déploiement GitHub Actions vers Azure nécessite la configuration d'un Service Principal Azure et l'utilisation d'actions spécialisées.
Configuration du Service Principal Azure
Créez un Service Principal avec Azure CLI :
az ad sp create-for-rbac \
--name "github-actions-sp" \
--role contributor \
--scopes /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP \
--sdk-auth
Copiez la sortie JSON dans un secret GitHub nommé AZURE_CREDENTIALS.
Workflow de déploiement complet
# Job de déploiement
deploy:
runs-on: ubuntu-latest
needs: [test, build]
if: github.ref == 'refs/heads/main'
environment:
name: 'production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Download build artifacts
uses: actions/download-artifact@v3
with:
name: build-files
path: dist/
- name: Login to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure App Service
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
slot-name: 'production'
package: dist/
- name: Azure logout
run: az logout
GitHub Actions vs Azure DevOps Pipelines : comparatif
Voici un tableau comparatif entre GitHub Actions et Azure DevOps Pipelines pour vous aider à choisir :
| Critère | GitHub Actions | Azure DevOps Pipelines |
|---|---|---|
| Intégration Git | Native GitHub uniquement | GitHub, GitLab, Bitbucket, Azure Repos |
| Marketplace d'actions | + de 10 000 actions | Extensions limitées |
| Pricing | 2000 min/mois gratuit | 10 pipelines parallèles gratuit |
| Agents | GitHub-hosted ou self-hosted | Microsoft-hosted ou self-hosted |
| Syntaxe | YAML uniquement | YAML ou interface graphique |
| Écosystème Azure | Actions tierces requises | Intégration native complète |
| Courbe d'apprentissage | Faible (si familier avec GitHub) | Moyenne à élevée |
Workflow avancé avec conditions et matrices
Les workflows GitHub Actions supportent des fonctionnalités avancées comme les matrices de build et les conditions d'exécution :
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [16, 18, 20]
exclude:
- os: macos-latest
node-version: 16
steps:
- uses: actions/checkout@v3
- name: Conditional step (Unix only)
if: runner.os != 'Windows'
run: chmod +x scripts/build.sh
- name: Run tests
run: npm test
env:
NODE_ENV: test
CI: true
Monitoring et debugging des workflows
GitHub Actions fournit des outils intégrés pour surveiller et déboguer vos pipelines :
- Logs détaillés : chaque step affiche ses logs en temps réel
- Annotations : mise en évidence des erreurs et warnings
- Artifacts : conservation des fichiers générés entre jobs
- Environments : protection des déploiements avec reviews manuelles
- Matrix builds : visualisation des résultats par configuration
Bonnes pratiques pour optimiser vos workflows
Performance et sécurité
- Cache des dépendances : utilisez
cache: 'npm'pour accélérer les builds - Parallélisation : séparez les jobs indépendants (test, lint, security scan)
- Conditions intelligentes : évitez les déploiements sur les pull requests
- Secrets rotation : renouvelez régulièrement vos credentials Azure
- Least privilege : accordez les permissions minimales nécessaires
Maintenance et évolutivité
- Actions versionnées : spécifiez toujours une version (ex: @v3)
- Templates réutilisables : créez des workflows composites pour éviter la duplication
- Documentation : commentez vos workflows complexes
- Monitoring : configurez des alertes sur les échecs de pipeline
La maîtrise de GitHub Actions est devenue indispensable pour tout développeur souhaitant automatiser efficacement ses workflows CI/CD. Cette plateforme s'intègre parfaitement dans un écosystème DevOps moderne, notamment pour comprendre les concepts CI/CD fondamentaux.
Pour approfondir vos compétences en automatisation et CI/CD avec des outils comme GitHub Actions, Azure DevOps, et bien d'autres technologies DevOps essentielles, notre formation DevOps certifiante vous accompagne dans votre montée en compétences. Candidater maintenant pour maîtriser l'ensemble de la chaîne DevOps et booster votre carrière.