Azure Artifacts
1 - Présentation
Azure Artifacts permet de créer, héberger et partager des packages avec votre équipe et organisation.
2 - Types de packages supportés
| Type | Description | Registre public |
|---|---|---|
| npm | JavaScript/Node.js | npmjs.com |
| NuGet | .NET | nuget.org |
| Maven | Java | Maven Central |
| Python | pip packages | PyPI |
| Universal | Fichiers binaires | - |
| Cargo | Rust | crates.io |
3 - Créer un Feed
3.1 Via l'interface
- Aller dans Artifacts
- Cliquer "Create Feed"
- Configurer le nom et la visibilité
3.2 Via CLI
# Créer un feed
az artifacts feed create \
--name my-packages \
--organization https://dev.azure.com/MonOrg \
--project MonProjet \
--visibility organization
# Lister les feeds
az artifacts feed list
3.3 Scopes de visibilité
| Scope | Description |
|---|---|
| Project | Visible uniquement dans le projet |
| Organization | Visible dans toute l'organisation |
4 - npm Packages
4.1 Configuration .npmrc
# .npmrc (dans le projet)
registry=https://pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/registry/
always-auth=true
4.2 Authentification
# Via Azure CLI (génère le token)
az artifacts universal download --help
# Ou via Personal Access Token
# Encoder: echo -n "PAT_TOKEN" | base64
# .npmrc avec auth
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/registry/:username=MonOrg
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/registry/:_password=BASE64_PAT
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/registry/:[email protected]
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/:username=MonOrg
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/:_password=BASE64_PAT
//pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/npm/:[email protected]
4.3 Publier un package
# package.json
{
"name": "@monorg/my-package",
"version": "1.0.0"
}
# Publier
npm publish
4.4 Pipeline npm
steps:
- task: npmAuthenticate@0
inputs:
workingFile: '.npmrc'
- script: npm ci
displayName: 'Install dependencies'
- script: npm publish
displayName: 'Publish package'
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
5 - NuGet Packages
5.1 Configuration nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="my-feed" value="https://pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/nuget/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
5.2 Pipeline NuGet
steps:
- task: NuGetToolInstaller@1
- task: NuGetAuthenticate@1
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
- task: NuGetCommand@2
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: 'my-feed'
6 - Maven Packages
6.1 Configuration pom.xml
<distributionManagement>
<repository>
<id>my-feed</id>
<url>https://pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/maven/v1</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>my-feed</id>
<url>https://pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/maven/v1</url>
</repository>
</repositories>
6.2 settings.xml
<servers>
<server>
<id>my-feed</id>
<username>MonOrg</username>
<password>PAT_TOKEN</password>
</server>
</servers>
7 - Python Packages
7.1 Configuration pip
# pip.conf
[global]
index-url=https://pkgs.dev.azure.com/MonOrg/MonProjet/_packaging/my-feed/pypi/simple/
7.2 Publier avec twine
# Installer twine
pip install twine
# Publier
twine upload -r my-feed dist/*
7.3 Pipeline Python
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
- task: TwineAuthenticate@1
inputs:
artifactFeed: 'MonProjet/my-feed'
- script: |
pip install twine
python setup.py sdist bdist_wheel
twine upload -r my-feed --config-file $(PYPIRC_PATH) dist/*
8 - Universal Packages
Pour les fichiers binaires qui ne sont pas des packages standards.
8.1 Publier
az artifacts universal publish \
--organization https://dev.azure.com/MonOrg \
--project MonProjet \
--feed my-feed \
--name my-binary \
--version 1.0.0 \
--path ./dist/
8.2 Télécharger
az artifacts universal download \
--organization https://dev.azure.com/MonOrg \
--project MonProjet \
--feed my-feed \
--name my-binary \
--version 1.0.0 \
--path ./download/
8.3 Pipeline
steps:
- task: UniversalPackages@0
inputs:
command: 'download'
downloadDirectory: '$(System.DefaultWorkingDirectory)'
feedsToUse: 'internal'
vstsFeed: 'MonProjet/my-feed'
vstsFeedPackage: 'my-binary'
vstsPackageVersion: '1.0.0'
9 - Upstream Sources
9.1 Configurer les upstream sources
Permet d'accéder aux packages publics via votre feed :
- Aller dans Feed Settings
- Upstream sources
- Ajouter npmjs.com, nuget.org, etc.
9.2 Avantages
- Cache des packages publics
- Contrôle de version
- Disponibilité même si le registre public est down
- Sécurité (scanning)
10 - Retention Policies
# Configurer la rétention
az artifacts feed update \
--name my-feed \
--days-to-keep-recently-downloaded-packages 30
Résumé
Dans ce chapitre, nous avons appris :
- Les types de packages supportés
- La création de Feeds
- La configuration pour npm, NuGet, Maven, Python
- Les Universal Packages
- Les Upstream Sources
- Les Retention Policies
Prochaine étape
Dans le prochain chapitre, nous verrons Azure Test Plans.
→ Chapitre suivant : Azure Test Plans