Dans un précédent article, j’expliquais comment créer une autorisation d’étendue de référentiel dans ACR. Nous allons voir comment l’utiliser dans Azure DevOps.

Création d’une jeton d’accès

Comme nous l’avions vu, nous pouvons créer un jeton d’accès à partir d’une scope map existante ou en un créer directement avec la scope map. Suivant la deuxième option, voici la commande :

az acr token create -n test-azure-devops -r testscopemap --repository samples/go content/write content/read

Création d’une connexion de service dans Azure DevOps

Dans Azure DevOps, dans votre projet, aller dans les settings en cliquant sur la route dentée en bas à droite Menu Settings.

Dans le menu, choisir "Service Connections" :

Menu Service Connections.

Si vous êtes comme moi et qu’il s’agit de votre premier Service Connection, cliquer sur "Create service connection" :

Créer Service Connection.

Chercher les connexions de type "Docker" et choisir "Docker Registry" :

Type de Service Connection.

Renseigner les informations :

  • Docker Registry : de la forme https://<nom de l’ACR>.azurecr.io

  • Docker ID : le nom du jeton d’accès précédemment créé

  • Docker Password : Un des 2 mots de passe du jeton d’accès précédemment créé

  • Service connection name : A noter pour la suite. J’ai donné le nom du jeton d’accès mais ce n’est pas obligatoire

Info Service Connection.

Après avoir cliquer sur "Save", la page des connexions d’affiche :

Liste des Service Connections.

Création du pipeline dans Azure DevOps

Dans le menu de gauche, dans le menu "Pipelines" :

Menu Pipelines.

Si comme moi, vous créez le premier pipeline, alors cliquer sur "Create Pipeline" :

Create Pipeline.

Mon projet est dans Azure Repos Git, adosser à mon projet. Si vous êtes comme dans mon cas, choisir "Azure Repos Git YAML" :

Create Pipeline.

Choisir votre repository git :

Choix du repository git.

Choisir un "starter pipeline" :

Type de Pipeline.

Il est alors possible de renseigner son pipeline

azure-pipelines.yml
trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  imageName: 'samples/go'
  dockerRegistryServiceConnection: test-azure-devops

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: $(dockerRegistryServiceConnection)

- task: Docker@2
  displayName: Build and push an image to container registry
  inputs:
    command: buildAndPush
    repository: $(imageName)
    containerRegistry: $(dockerRegistryServiceConnection)

La première tâche va permettre de se connecter vis-à-vis de l’ACR en utilisant le jeton d’accès précédemment créé et les droits associés.

La deuxième tâche construit l’image et pousse l’image dans l’ACR.

Cliquer sur "Save and Run".

Tout est vert !

Après exécution, on peut voir que la connexion s’est bien passée ainsi que la construction de l’image et le transfert vers l’ACR :

Pipeline en succès.

On peut vérifier dans l’ACR le référentiel ainsi créé :

Référentiel de l’ACR.