Module 6 : Azure Artifacts

Qu'est-ce qu'Azure Artifacts ?

Azure Artifacts permet de créer, héberger et partager des packages :


+----------------------------------------------------------+
|                    AZURE ARTIFACTS                        |
+----------------------------------------------------------+
|                                                           |
|   Feeds (flux de packages)                               |
|       |                                                   |
|       +-- NuGet (.NET)                                   |
|       +-- npm (JavaScript)                               |
|       +-- Maven (Java)                                   |
|       +-- Python (pip)                                   |
|       +-- Universal Packages                             |
|                                                           |
+----------------------------------------------------------+
            

Créer un Feed

# Via le portal ou CLI
# Artifacts > Create Feed

Feed: folab-packages
Visibility: Members of DataLab-Lab organization
Upstream sources:
  - nuget.org
  - npmjs.com
  - pypi.org

Publier un package Python

# Structure du package
folab-transformations/
    +-- folab_transformations/
    |       +-- __init__.py
    |       +-- esg.py
    |       +-- utils.py
    +-- tests/
    +-- setup.py
    +-- pyproject.toml

# setup.py
from setuptools import setup, find_packages

setup(
    name="folab-transformations",
    version="1.0.0",
    packages=find_packages(),
    install_requires=[
        "pandas>=1.5.0",
        "pyspark>=3.3.0"
    ]
)

# Pipeline pour publier
- stage: Publish
  jobs:
    - job: PublishPackage
      steps:
        - task: UsePythonVersion@0
          inputs:
            versionSpec: '3.10'

        - script: |
            pip install build twine
            python -m build
          displayName: 'Build package'

        - task: TwineAuthenticate@1
          inputs:
            artifactFeed: 'folab-packages'

        - script: |
            twine upload -r folab-packages dist/*
          displayName: 'Publish to Artifacts'

Consommer un package Python

# Configurer pip pour utiliser le feed
# pip.conf ou pip.ini
[global]
index-url=https://pkgs.dev.azure.com/mycompany-folab/_packaging/folab-packages/pypi/simple/

# Ou via variable d'environnement
export PIP_INDEX_URL=https://pkgs.dev.azure.com/mycompany-folab/_packaging/folab-packages/pypi/simple/

# Installer le package
pip install folab-transformations

# Dans un notebook Synapse
%pip install folab-transformations --index-url https://pkgs.dev.azure.com/...

Universal Packages

Pour les artefacts qui ne sont pas des packages standard (binaires, configs, etc.) :

# Publier un Universal Package (PowerShell)
az artifacts universal publish --organization https://dev.azure.com/mycompany-folab --feed folab-packages --name synapse-config --version 1.0.0 --path ./config/

# Télécharger
az artifacts universal download --organization https://dev.azure.com/mycompany-folab --feed folab-packages --name synapse-config --version 1.0.0 --path ./downloaded-config/

# Dans un pipeline
- task: UniversalPackages@0
  inputs:
    command: 'download'
    downloadDirectory: '$(Build.SourcesDirectory)/config'
    feedsToUse: 'internal'
    vstsFeed: 'folab-packages'
    vstsFeedPackage: 'synapse-config'
    vstsPackageVersion: '1.0.0'
Version Bash (cliquez pour afficher)
# Publier un Universal Package (Bash)
az artifacts universal publish \
    --organization https://dev.azure.com/mycompany-folab \
    --feed folab-packages \
    --name synapse-config \
    --version 1.0.0 \
    --path ./config/

# Télécharger
az artifacts universal download \
    --organization https://dev.azure.com/mycompany-folab \
    --feed folab-packages \
    --name synapse-config \
    --version 1.0.0 \
    --path ./downloaded-config/

Upstream Sources

Les Upstream Sources permettent de :
  • Cacher les packages publics (npm, pypi, nuget)
  • Accélérer les builds (pas besoin d'aller sur Internet)
  • Sécuriser la chaîne d'approvisionnement
  • Contrôler les packages autorisés

Retention et nettoyage

# Configurer la retention
# Feed Settings > Retention

Policies:
- Maximum versions per package: 10
- Days to keep recently downloaded: 30
- Days to keep packages: 365

# Supprimer une version spécifique (PowerShell)
az artifacts universal delete --organization https://dev.azure.com/mycompany-folab --feed folab-packages --name synapse-config --version 0.9.0
Version Bash (cliquez pour afficher)
# Supprimer une version spécifique (Bash)
az artifacts universal delete \
    --organization https://dev.azure.com/mycompany-folab \
    --feed folab-packages \
    --name synapse-config \
    --version 0.9.0

Pipeline Artifacts vs Azure Artifacts

Type Usage Retention
Pipeline Artifacts Partage entre stages d'un pipeline Liée au pipeline run
Azure Artifacts Packages réutilisables Long terme
# Pipeline Artifacts (temporaire)
- publish: $(Build.ArtifactStagingDirectory)
  artifact: build-output

- download: current
  artifact: build-output

# Azure Artifacts (permanent)
- task: UniversalPackages@0
  inputs:
    command: 'publish'
    ...
Bonnes pratiques Artifacts :
  • Versionner semantiquement (SemVer)
  • Utiliser upstream sources pour le cache
  • Documenter les packages (README, CHANGELOG)
  • Configurer la retention automatique
  • Scanner les packages pour les vulnérabilités