Module 8 : Bonnes Pratiques DevOps

Templates de pipeline

Les templates permettent de réutiliser du code pipeline :

# templates/build-python.yml
parameters:
  - name: pythonVersion
    default: '3.10'
  - name: workingDirectory
    default: '.'

steps:
  - task: UsePythonVersion@0
    inputs:
      versionSpec: '${{ parameters.pythonVersion }}'

  - script: |
      cd ${{ parameters.workingDirectory }}
      pip install -r requirements.txt
    displayName: 'Install dependencies'

  - script: |
      cd ${{ parameters.workingDirectory }}
      pytest tests/ --junitxml=test-results.xml
    displayName: 'Run tests'

# Utilisation
# azure-pipelines.yml
stages:
  - stage: Build
    jobs:
      - job: BuildJob
        steps:
          - template: templates/build-python.yml
            parameters:
              pythonVersion: '3.10'
              workingDirectory: 'src'

Templates de stages

# templates/deploy-synapse.yml
parameters:
  - name: environment
  - name: resourceGroup
  - name: synapseWorkspace

stages:
  - stage: Deploy_${{ parameters.environment }}
    jobs:
      - deployment: DeploySynapse
        environment: ${{ parameters.environment }}
        strategy:
          runOnce:
            deploy:
              steps:
                - task: AzureCLI@2
                  inputs:
                    azureSubscription: 'azure-${{ parameters.environment }}'
                    scriptType: 'pscore'
                    scriptLocation: 'inlineScript'
                    inlineScript: |
                      az synapse pipeline create --workspace-name ${{ parameters.synapseWorkspace }} --name "$(Pipeline.Name)" --file @pipelines/definition.json

# Utilisation
stages:
  - template: templates/deploy-synapse.yml
    parameters:
      environment: 'dev'
      resourceGroup: 'rg-folab-dev'
      synapseWorkspace: 'syn-folab-dev'

  - template: templates/deploy-synapse.yml
    parameters:
      environment: 'prod'
      resourceGroup: 'rg-folab-prod'
      synapseWorkspace: 'syn-folab-prod'

Organisation du code

# Structure recommandée pour un projet Synapse
synapse-folab/
|
+-- .azure-pipelines/
|   +-- ci.yml                 # Pipeline CI
|   +-- cd.yml                 # Pipeline CD
|   +-- templates/             # Templates réutilisables
|
+-- src/
|   +-- pipelines/             # Definitions Synapse pipelines
|   +-- notebooks/             # Notebooks PySpark
|   +-- sql/                   # Scripts SQL
|   +-- linkedServices/        # Linked Services
|   +-- datasets/              # Datasets
|
+-- tests/
|   +-- unit/                  # Tests unitaires
|   +-- integration/           # Tests integration
|
+-- scripts/
|   +-- deploy.sh              # Scripts de déploiement
|   +-- validate.py            # Scripts de validation
|
+-- docs/
|   +-- architecture.md
|   +-- runbook.md
|
+-- README.md
+-- requirements.txt

Infrastructure as Code

# Bicep pour l'infrastructure Azure
# infra/main.bicep
param environment string
param location string = 'westeurope'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: 'st${environment}folab'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
  properties: {
    isHnsEnabled: true
  }
}

resource synapseWorkspace 'Microsoft.Synapse/workspaces@2021-06-01' = {
  name: 'syn-${environment}-folab'
  location: location
  properties: {
    defaultDataLakeStorage: {
      accountUrl: storageAccount.properties.primaryEndpoints.dfs
      filesystem: 'datalake'
    }
  }
}

# Pipeline pour deployer l'infra
- stage: DeployInfra
  jobs:
    - job: DeployBicep
      steps:
        - task: AzureCLI@2
          inputs:
            azureSubscription: 'azure-dev'
            scriptType: 'pscore'
            scriptLocation: 'inlineScript'
            inlineScript: |
              az deployment group create --resource-group rg-folab-dev --template-file infra/main.bicep --parameters environment=dev
Version Bash (cliquez pour afficher)
# Pipeline pour deployer l'infra (Bash)
- stage: DeployInfra
  jobs:
    - job: DeployBicep
      steps:
        - task: AzureCLI@2
          inputs:
            azureSubscription: 'azure-dev'
            scriptType: 'bash'
            scriptLocation: 'inlineScript'
            inlineScript: |
              az deployment group create \
                --resource-group rg-folab-dev \
                --template-file infra/main.bicep \
                --parameters environment=dev

Monitoring des pipelines

# Métriques à suivre
- Build success rate (> 95%)
- Build duration (< 10 min pour CI)
- Deployment frequency (plusieurs fois par jour)
- Lead time (code commit -> production)
- Mean time to recovery (MTTR)

# Alertes recommandées
- Build failure sur main
- Déploiement Prod échoué
- Build duration > seuil
- Tests coverage < seuil

Documentation

À documenter :
  • README avec instructions de setup
  • Architecture diagram
  • Runbook pour les opérations
  • CHANGELOG pour les releases
  • Wiki Azure DevOps pour le projet
# README.md exemple
# FOLAB Synapse Pipelines

## Prerequisites
- Azure CLI
- Python 3.10+
- Access to Azure DevOps

## Local Development
```bash
pip install -r requirements.txt
pytest tests/
```

## Deployment
Deployments are automated via Azure Pipelines.
- Push to `develop` -> Deploy to Dev
- Merge to `main` -> Deploy to Prod (with approval)

## Architecture
See [docs/architecture.md](docs/architecture.md)

Checklist projet DevOps

  • [ ] Repository avec structure claire
  • [ ] Branch policies configurées
  • [ ] Pipeline CI avec tests
  • [ ] Pipeline CD multi-environnements
  • [ ] Templates réutilisables
  • [ ] Secrets dans Key Vault
  • [ ] Documentation à jour
  • [ ] Monitoring et alertes
  • [ ] Backlog maintenu