Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

⚡ GitHub Actions — CI/CD natif GitHub

Workflows YAML dans .github/workflows/ déclenchés par des events (push/PR/schedule/dispatch), composés de jobs et steps exécutés sur des runners (hosted ou self-hosted). :contentReference[oaicite:1]{index=1}

1.1

Vue d’ensemble

Définition, composants (workflow/job/step/action), triggers, cas d’usage.

CI/CDGitHubYAML
1.2

Architecture & concepts

Events → workflow → jobs → steps, artifacts, caching, concurrency, permissions.

JobsStepsArtifacts
1.3

Workflow YAML

Syntaxe officielle, events, matrix, conditions, env, outputs, reusable blocks.

workflow.ymlmatrixconditions
2.1

Triggers (Events)

push / pull_request / schedule / workflow_dispatch, filtres branches/paths.

eventsfiltersschedule
2.2

Actions & Marketplace

Réutiliser des actions (checkout, setup-*), marketplace, version pinning, supply chain.

MarketplaceReusePinning
2.3

Réutilisation

Reusable workflows vs composite actions, templates d’org, standardisation multi-repos.

ReusableCompositeDRY
3.1

Runners

GitHub-hosted vs self-hosted, labels/groups, scaling, service, durcissement réseau.

HostedSelf-hostedLabels

Sécurité & secrets

Secrets repo/org/environment, env protections, OIDC (no long-lived keys), permissions.

SecretsOIDCEnvironments
4.1

Deployments & Environments

Environments, protection rules, required reviewers, déploiements multi-cibles.

DeployApprovalsGates
4.2

Bonnes pratiques

Fast vs full pipelines, artifact immuable, cache, concurrency, observabilité (logs/reports).

Best practicesCacheGates

Migration

Mapping Jenkins/Bamboo/CircleCI → GHA, stratégie progressive, pièges, checklist.

MigrationCI/CDChecklist
5.1

Liens & docs

Docs officielles : getting started, syntaxe, triggers, runners, secrets, OIDC, reuse.

DocsReferenceSecurity
5.2

Cheat-sheet

Résumé ultra opérationnel + phrase “CV-ready” (impact recruteur).

TL;DRCVOps
1.1 GitHub Actions — définition, philosophie, cas d’usage
GitHub Actions en 30 secondes

GitHub Actions exécute des workflows définis en YAML dans .github/workflows et déclenchés par des événements GitHub (push, pull_request, schedule, manuel, etc.). :contentReference[oaicite:2]{index=2}

Un workflow contient des jobs (souvent parallélisables) composés de steps : scripts shell et/ou actions réutilisables. La syntaxe officielle est documentée dans “Workflow syntax”. :contentReference[oaicite:3]{index=3}

Catégorisation IDEO-Lab
DevOps CI/CD Pipelines as code Supply chain
Diagramme “event → runner”
Event (push / PR / schedule / dispatch)
  └─ Workflow (.github/workflows/*.yml)
       ├─ Job A (runs-on: ubuntu-latest)
       │    ├─ uses: actions/checkout
       │    └─ run: tests
       └─ Job B (needs: Job A)
            └─ deploy (environment: prod)
            
Gros avantage : CI/CD “collé” au repo GitHub (PR checks, reviews, branches, etc.).
Objets clés
ObjetRôleExemple
Eventdéclencheurpush, pull_request, schedule, workflow_dispatch :contentReference[oaicite:4]{index=4}
Workfloworchestrationjobs + permissions + concurrency :contentReference[oaicite:5]{index=5}
Jobunité d’exécutionruns-on + steps + needs
Stepaction ou scriptuses: … / run: …
Runnermachine d’exécutionhosted ou self-hosted :contentReference[oaicite:6]{index=6}
✅ Très pertinent si…
  • Ton code est déjà sur GitHub (zéro friction : PR checks natifs).
  • Tu veux du CI/CD “as code” simple à adopter par l’équipe.
  • Tu veux standardiser via réutilisation (workflows réutilisables / composite actions). :contentReference[oaicite:7]{index=7}
  • Tu veux sécuriser tes déploiements sans secrets longs via OIDC. :contentReference[oaicite:8]{index=8}
⚠️ Points d’attention
  • Les runners self-hosted nécessitent ops + hardening (surface d’attaque). :contentReference[oaicite:9]{index=9}
  • La supply chain dépend beaucoup de ton hygiène (pinning versions, permissions minimales, secrets).
  • Pour les SI très régulés : réflexion réseau + isolation environnements + approbations.
Positionnement rapide (lecture DevOps)
PlateformeForcesQuand préférer
GitHub Actionsnatif GitHub, PR checks, reuse, OIDCrepos GitHub, adoption rapide
GitLab CInatif GitLab, monolithique CI/CDrepos GitLab
Jenkinsultra flexiblelegacy + besoins très spécifiques
Azure DevOpssuite ALM complèteenterprise MS + governance ALM
1.2 Architecture — permissions, artifacts, cache, concurrency (modèle robuste)
Modèle mental “CI productisée”
Repo
  └─ .github/workflows/ci.yml
        on: [push, pull_request]
        jobs:
          lint: ...
          tests: ... (needs: lint)
          build: ... (needs: tests)
          deploy: ... (needs: build, environment: prod)
            
But : pipeline versionné + reviewable. Les workflows sont des “assets” au même titre que le code. :contentReference[oaicite:10]{index=10}
Jobs parallèles, dépendances explicites
  • Par défaut les jobs peuvent être parallèles ; on crée des dépendances via needs.
  • On garde un pipeline “fast” PR et un pipeline “full” nightly/schedule.
  • Les triggers d’events sont documentés officiellement. :contentReference[oaicite:11]{index=11}
Permissions : la base de la sécurité (principe)
Pattern conseillé:
- limiter les permissions par défaut au strict nécessaire
- séparer “build/test” vs “deploy”
- secrets uniquement au job qui en a besoin (env / org / repo)
        
Secrets : GitHub explique les secrets au niveau repo, environment et org. :contentReference[oaicite:12]{index=12}
Artifacts : evidence + outputs
  • Publier reports de tests, coverage, logs (debug rapide).
  • Publier un artefact “release” immuable (zip, wheel, image taguée) → “build once, deploy many”.
Résultat : tu peux relier une release à un SHA + un set de reports.
Concurrency : éviter les doublons (principe)
Objectif:
- si 5 push sur une PR: annuler les anciens runs
- protéger “deploy prod”: un seul déploiement à la fois
        
ROI : moins de coûts, moins de files d’attente, moins de confusion.
1.3 Workflow YAML — syntaxe officielle + exemple (Django)
Workflow syntax (référence GitHub)

GitHub documente la syntaxe YAML officielle (on/jobs/steps/env/permissions/etc.). :contentReference[oaicite:13]{index=13}

name: CI
on:
  push:
    branches: [ "main" ]
  pull_request:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "hello"
        
Exemple Django (lint + tests)
name: Django CI
on:
  pull_request:
  push:
    branches: [ "main" ]

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: Install
        run: |
          python -m pip install -U pip
          pip install -r requirements.txt
      - name: Lint + Tests
        run: |
          ruff check .
          pytest -q --maxfail=1
        
Pattern : PR = pipeline “fast”. Nightly = pipeline “full” (e2e, scans, etc.).
Matrix (multi-versions) — concept
strategy:
  matrix:
    python: ["3.10","3.11","3.12"]
steps:
  - uses: actions/setup-python@v5
    with:
      python-version: $
        
Usage : libs, SDK, support multi-runtime, compatibilité.
Conditions (if) — concept
- name: Deploy only on main
  if: github.ref == 'refs/heads/main'
  run: ./deploy.sh
        
Tip : conditionner les étapes coûteuses (build image, scans) seulement quand nécessaire.
2.1 Triggers — events, schedule, manuel, filtres
Events officiels

GitHub liste les événements qui déclenchent les workflows (activité GitHub, schedule, events externes). :contentReference[oaicite:14]{index=14}

on:
  push:
    branches: [ "main" ]
  pull_request:
  schedule:
    - cron: "0 2 * * *"
  workflow_dispatch:
      
Pattern : PR → fast CI ; push main → build/release ; schedule → full tests/scans ; dispatch → run ad-hoc.
2.2 Actions & Marketplace — réutilisation + hygiène supply chain
“uses:” = step réutilisable
steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-python@v5
    with:
      python-version: "3.12"
        
Règle : préfère des actions reconnues, maintenues, et évite les forks inconnus sans audit.
Supply chain : “version pinning” (principe)
  • Éviter @main / @master sur les actions critiques.
  • Pin sur version tag + (idéalement) digest/sha quand tu veux verrouiller.
  • Limiter permissions du workflow au strict nécessaire.
But : réduire le risque de changement malveillant ou non contrôlé.
Gouvernance (teams)
  • Catalogue “approved actions” (liste blanche), surtout pour les repos sensibles.
  • Workflows templates au niveau organisation (standardisation).
  • Scan régulier des workflows (permissions/secrets/3rd party actions).
2.3 Réutilisation — reusable workflows vs composite actions (DRY)
Deux outils DRY complémentaires

GitHub compare explicitement reusable workflows et composite actions : l’un réutilise un workflow complet, l’autre regroupe des steps en “mini action”. :contentReference[oaicite:15]{index=15}

OptionRéutiliseQuand
Reusable workflowworkflows multi-jobsstandardiser CI/CD complète (org)
Composite actionsuite de stepsfactoriser une logique récurrente (build, scan, deploy step)
Appeler un reusable workflow

GitHub documente l’appel via uses au niveau job (pas dans steps). :contentReference[oaicite:16]{index=16}

jobs:
  ci:
    uses: org/repo/.github/workflows/ci.yml@v1
        
Composite action

GitHub explique comment créer une composite action (pack de steps réutilisables). :contentReference[oaicite:17]{index=17}

steps:
  - uses: ./.github/actions/my-composite
        
3.1 Runners — hosted vs self-hosted, labels, services, hardening
Hosted vs self-hosted

GitHub décrit les self-hosted runners et leur rôle (environnement custom, exécution gérée par toi). :contentReference[oaicite:18]{index=18}

TypeAvantagesInconvénients
GitHub-hostedzéro ops, démarrage rapidemoins de contrôle, env éphémère
Self-hostedréseau privé, caches persistants, toolchainsops + sécurité + scaling
Gestion : labels, services, lifecycle

GitHub documente la gestion des self-hosted runners (labels, config service, etc.). :contentReference[oaicite:19]{index=19}

Bonnes pratiques:
- runners dédiés "prod-deploy" (isolation)
- labels: linux-x64, docker, highmem
- runner comme service (auto-start)
- patching + rotation + monitoring
        
Usage YAML
jobs:
  build:
    runs-on: ubuntu-latest
  deploy_private:
    runs-on: [self-hosted, linux, prod-deploy]
        
Point critique : un runner self-hosted a accès à ton réseau → hardening indispensable.
4.1 Deployments & Environments — protection rules, required reviewers
Environments (dev/stage/prod)

GitHub explique les environments, leurs secrets et les règles de protection. :contentReference[oaicite:20]{index=20}

But : contrôler qui peut déployer + quand + depuis quelles branches/tags.
Required reviewers (approvals)

GitHub indique que les reviewers requis protègent les secrets d’environnement : un job ne peut pas accéder aux secrets tant que l’approbation n’est pas accordée. :contentReference[oaicite:21]{index=21}

Pattern:
- environment: prod
- required reviewers: Release Managers
- restrict deploy branches: main + tags v*
        
Exemple (concept)
jobs:
  deploy_prod:
    if: github.ref == 'refs/heads/main'
    environment: prod
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh
        
Sécurité — secrets, environments, OIDC (no long-lived keys)
Secrets (repo / org / environment)

GitHub détaille la création et l’usage des secrets à plusieurs niveaux. :contentReference[oaicite:22]{index=22}

Règles:
✅ secrets jamais en clair dans le repo
✅ limiter l’accès (environments + approvals)
✅ rotation + audit
        
OIDC : authentifier sans secrets long-lived

GitHub Actions peut utiliser des tokens OIDC pour s’authentifier auprès de cloud providers au lieu de secrets. :contentReference[oaicite:23]{index=23}

Pattern:
- job demande un token OIDC
- trust policy côté cloud (AWS/Azure/GCP)
- permissions minimales par environnement
        
Impact : moins de clés statiques, moins de fuite, rotation implicite.
Environments + protection rules

GitHub recommande des protection rules sur les environments, notamment quand on les utilise avec OIDC. :contentReference[oaicite:24]{index=24}

Prod:
- required reviewers
- branches/tags autorisés
- secrets uniquement prod
        
Runners self-hosted : surface d’attaque

GitHub décrit les self-hosted runners et leur gestion (labels, service, etc.) : c’est à toi de sécuriser l’OS, le réseau, et les accès. :contentReference[oaicite:25]{index=25}

Hardening minimal:
- isolation réseau (VPC/subnet dédiée)
- runners dédiés prod
- patching + rotation
- monitoring + logs
        
4.2 Bonnes pratiques — standardiser, accélérer, fiabiliser
Top 10 “pro”
  1. PR = pipeline “fast”, schedule = pipeline “full”. :contentReference[oaicite:26]{index=26}
  2. Limiter secrets au strict besoin (repo/env/org). :contentReference[oaicite:27]{index=27}
  3. Préférer OIDC aux clés statiques pour cloud. :contentReference[oaicite:28]{index=28}
  4. Environments + required reviewers pour prod. :contentReference[oaicite:29]{index=29}
  5. Pinning des actions (éviter @main sur l’essentiel).
  6. Runners self-hosted dédiés prod (isolation). :contentReference[oaicite:30]{index=30}
  7. Artifacts : reports tests + build outputs (evidence).
  8. Éviter doublons : concurrency/cancel previous.
  9. Matrix seulement si utile (coût/temps).
  10. Standardiser via reusable workflows / composite actions. :contentReference[oaicite:31]{index=31}
DRY & standardisation

GitHub pousse la réutilisation via reusable workflows et composite actions. :contentReference[oaicite:32]{index=32}

Pattern org:
- repo "ci-templates"
- workflows réutilisables: ci.yml, release.yml, deploy.yml
- composite actions: setup, lint, security-scan
        
Phrase CV-ready
Industrialisation CI/CD avec GitHub Actions : workflows YAML (events push/PR/schedule),
jobs parallélisés, standardisation via reusable workflows/composite actions, déploiements sécurisés
par environments + required reviewers, et authentification cloud via OIDC (suppression de clés statiques),
avec runners self-hosted isolés pour déploiements sensibles.
        
Migration (Jenkins/Bamboo/CircleCI → GitHub Actions) — mapping & checklist
Mapping conceptuel
JenkinsBamboo/CircleCIGitHub ActionsNotes
Jenkinsfileconfig.ymlworkflow.ymlsyntax officielle :contentReference[oaicite:33]{index=33}
StagesWorkflowsjobs + needsgraph explicite
AgentsRunnersrunners hosted/self-hosteddocs runners :contentReference[oaicite:34]{index=34}
Shared libsOrbsreusable workflows / composite actionscomparatif GitHub :contentReference[oaicite:35]{index=35}
CredentialsContextssecrets repo/env/org + OIDCsecrets + OIDC :contentReference[oaicite:36]{index=36}
Stratégie progressive
  1. Pilote sur 1–2 repos (non critique) → reproduire “CI identique”.
  2. Mettre des templates : reusable workflows + conventions.
  3. Définir une politique sécurité : secrets, environments, approbations.
  4. Basculer par lots (team/repo), puis ajouter optimisations (cache, concurrency).
  5. Si on-prem: déployer self-hosted runners avec hardening. :contentReference[oaicite:37]{index=37}
Pièges fréquents
  • Self-hosted runner “fourre-tout” (trop de repos) → privilégier isolation par groupes/labels.
  • Secrets trop exposés (au niveau repo alors que prod devrait être environment + approvals). :contentReference[oaicite:38]{index=38}
  • Pas d’OIDC → accumulation de clés statiques (risque). :contentReference[oaicite:39]{index=39}
  • Pas de DRY → duplication YAML, drift → passer sur reuse/composite. :contentReference[oaicite:40]{index=40}
Checklist
ItemOK ?Notes
Workflow syntax & conventions (names, structure)
Triggers (PR fast, schedule full)
Reusable workflows / composite actions (DRY)
Secrets repo/env/org + approvals prod
OIDC cloud auth (no long-lived keys)
Runners : hosted vs self-hosted, labels, hardening
Artifacts (reports + build outputs) + rollback plan
5.2 Cheat-sheet GitHub Actions (TL;DR + CV-ready)
TL;DR
GitHub Actions = CI/CD natif GitHub

Core:
- workflows YAML dans .github/workflows/  (event-driven)  :contentReference[oaicite:41]{index=41}
- jobs/steps + actions réutilisables (uses:)
- runners: GitHub-hosted ou self-hosted :contentReference[oaicite:42]{index=42}

Enterprise/Sec:
- secrets repo/env/org :contentReference[oaicite:43]{index=43}
- environments + protection rules + required reviewers :contentReference[oaicite:44]{index=44}
- OIDC pour cloud auth sans clés longues :contentReference[oaicite:45]{index=45}

Standardisation:
- reusable workflows vs composite actions :contentReference[oaicite:46]{index=46}
      
Phrase “CV-ready”
Industrialisation CI/CD sur GitHub Actions : workflows YAML event-driven, jobs parallélisés, standardisation via reusable workflows/composite actions, déploiements gouvernés par environments + approvals, et sécurisation cloud via OIDC (suppression de secrets long-lived), avec runners self-hosted isolés pour déploiements sensibles.