Décrire les éléments de syntaxe de workflow standard
Les flux de travail GitHub Actions utilisent la syntaxe YAML avec des éléments spécifiques qui définissent quand, où et comment votre automatisation s’exécute. Comprendre ces éléments de syntaxe de base est essentiel pour créer des flux de travail efficaces.
Éléments de flux de travail essentiels
Configuration de flux de travail de niveau supérieur
name: CI/CD Pipeline # Workflow name (optional but recommended)
on: # Event triggers
push:
branches: [main, develop]
pull_request:
branches: [main]
schedule:
- cron: "0 2 * * 1" # Weekly Monday 2 AM UTC
jobs:# Job definitions
# Job configurations go here
Éléments de syntaxe principaux expliqués
| Élément | Objectif | Obligatoire | Example |
|---|---|---|---|
name |
Nom d’affichage du flux de travail dans l’interface utilisateur GitHub | Optional | name: "Build and Test" |
on |
Déclencheurs d’événements pour l’exécution du flux de travail | Obligatoire | on: [push, pull_request] |
jobs |
Collection de travaux à exécuter | Obligatoire | jobs: build: ... |
runs-on |
Spécifie l’environnement du runner | Obligatoire | runs-on: ubuntu-latest |
steps |
Actions séquentielles dans un travail | Obligatoire | steps: - name: ... |
uses |
Référence des actions prédéfinies | Optional | uses: actions/checkout@v4 |
run |
Exécute des commandes shell | Optional | run: npm test |
Exemple de flux de travail complet
name: Node.js CI/CD Pipeline
# Event configuration
on:
push:
branches: [main, develop]
paths-ignore: ["docs/**", "*.md"]
pull_request:
branches: [main]
types: [opened, synchronize, reopened]
# Environment variables (workflow-level)
env:
NODE_VERSION: "20"
CI: true
# Job definitions
jobs:
# Test job
test:
name: Run Tests
runs-on: ubuntu-latest
# Job-level environment variables
env:
DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
# Job steps
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"
- name: Install dependencies
run: |
npm ci
npm audit --audit-level=high
- name: Run tests
run: |
npm run test:coverage
npm run test:integration
env:
NODE_ENV: test
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-reports
path: coverage/
retention-days: 30
# Build job (depends on test)
build:
name: Build Application
needs: test
runs-on: ubuntu-latest
outputs:
build-version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"
- name: Install and build
run: |
npm ci --production
npm run build
- name: Generate version
id: version
run: |
VERSION=$(date +%Y%m%d)-${GITHUB_SHA::8}
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Save build artifacts
uses: actions/upload-artifact@v4
with:
name: build-${{ steps.version.outputs.version }}
path: |
dist/
package.json
Éléments de syntaxe avancés
Exécution conditionnelle
steps:
- name: Deploy to production
if: github.ref == 'refs/heads/main' && success()
run: ./deploy.sh
- name: Notify on failure
if: failure()
run: ./notify-failure.sh
Stratégies de matrice
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [18, 20, 22]
include:
- os: ubuntu-latest
node-version: 22
experimental: true
fail-fast: false
runs-on: ${{ matrix.os }}
Workflows réutilisables
jobs:
call-reusable-workflow:
uses: ./.github/workflows/reusable-tests.yml
with:
environment: production
node-version: "20"
secrets:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
Meilleures pratiques pour la syntaxe du flux de travail
Structure et organisation
- Utiliser des noms descriptifs pour les flux de travail, les travaux et les étapes
- Regrouper les étapes associées logiquement dans les travaux
- Maintenir les flux de travail axés sur des objectifs spécifiques (CI, CD, maintenance)
Optimisation de l’efficacité
- Utiliser
pathsetpaths-ignorelimiter les exécutions inutiles - Dépendances de cache avec
actions/cacheou mise en cache intégrée - Exécuter des travaux indépendants en parallèle
Considérations relatives à la sécurité
permissions:
contents: read
security-events: write
pull-requests: write
env:
# Use secrets for sensitive data
API_KEY: ${{ secrets.API_KEY }}
# Use variables for non-sensitive configuration
ENVIRONMENT: ${{ vars.ENVIRONMENT }}
Traitement des erreurs et débogage
steps:
- name: Debug information
if: env.ACTIONS_STEP_DEBUG == 'true'
run: |
echo "Runner OS: $RUNNER_OS"
echo "Workflow: $GITHUB_WORKFLOW"
echo "Event: $GITHUB_EVENT_NAME"
Pour obtenir une documentation complète sur la syntaxe, consultez la syntaxe de flux de travail officielle pour la référence GitHub Actions .