Décrire les éléments de syntaxe de workflow standard

Effectué

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 paths et paths-ignore limiter les exécutions inutiles
  • Dépendances de cache avec actions/cache ou 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 .