Pourquoi GitHub Actions ?
- Intégré : Directement dans GitHub, pas de service externe
- Gratuit : 2000 min/mois pour les repos publics
- Flexible : Supporte tous les langages et plateformes
- Marketplace : Milliers d'actions prêtes à l'emploi
Structure d'un workflow
Les workflows sont des fichiers YAML dans .github/workflows/ :
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: npm test
Workflow Python complet
name: Python CI
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest pytest-cov
- name: Run tests
run: pytest --cov=src --cov-report=xml
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
file: coverage.xml
Workflow .NET
name: .NET CI
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Restore
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-build --verbosity normal
Déploiement automatique
Vers Azure
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: mon-app
package: './dist'
Vers Docker Hub
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
push: true
tags: user/app:${{ github.sha }}
Gestion des secrets
Les secrets sont chiffrés et injectés à l'exécution :
- Settings → Secrets and variables → Actions
- Jamais visibles dans les logs
- Accès via
${{ secrets.NOM_SECRET }}
Bonnes pratiques
- Cache : Utilisez le cache pour accélérer les builds
- Matrix : Testez sur plusieurs versions en parallèle
- Concurrency : Évitez les déploiements simultanés
- Timeout : Définissez des limites de temps
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
timeout-minutes: 15
Conseil : Utilisez des actions versionnées (ex:
@v4) plutôt que @main pour éviter les surprises lors des mises à jour.
Conclusion
GitHub Actions est devenu incontournable pour le CI/CD moderne. Gratuit, puissant, bien intégré - difficile de faire mieux pour les projets GitHub.
Besoin d'aide pour mettre en place votre CI/CD ? Contactez-moi.