- Azure
- Azure DevOps
- Docker
Lors du build de projets sur Azure DevOps, vous avez peut-être déjà remarqué que vous disposez de deux méthodes pour tester, builder et déployer votre projet :
Avec la première option, vous devez entretenir les agents et probablement les acheter ou les louer, puis installer les outils dont vous avez besoin. Avec la seconde option vous êtes limité par les outils installés par défaut sur chaque agent. Ceci étant dit, quelles autres options avez-vous ? Jetons un coup d’œil aux container jobs!
Les container jobs vous permettent d’exécuter votre job dans une image Docker. Avec cette approche, vous avez juste besoin d’un pool d’agents pouvant exécuter Docker. Quels en sont les avantages ?
Si vous pouvez conteneuriser la technologie que vous utilisez avec Docker, vous pouvez utiliser cette technique.
Voici un petit schéma pour vous aider à comprendre le concept :
Comme vous pouvez le voir ci-dessus vous créez une première image qui sera votre image de base pour toutes les autres. Ensuite, vous pouvez créer une image spécifique pour chaque type de technologie ou de projet que vous avez. Le but est de les garder les plus petites possible afin qu’elles se lancent rapdiment.
Pour créer votre propre image Docker, vous devez répondre aux exigences officielles pour rendre votre image compatible avec Azure DevOps.
Créons une image que nous utiliserons comme base pour toutes les autres images :
FROM ubuntu:18.04
# To make it easier for build and release pipelines to run apt-get,
# configure apt to not require confirmation (assume the -y argument by default)
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "APT::Get::Assume-Yes \"true\";" > /etc/apt/apt.conf.d/90assumeyes
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
jq \
git \
netcat \
nodejs \
unzip \
&& rm -rf /var/lib/apt/lists/*
Ce Dockerfile
déclare une liste d’outils dont Azure DevOps a besoin pour exécuter des scripts et des tâches javascript. Vous pouvez ajouter également quelques outils utiles comme jq
ou unzip
par exemple. Ensuite, nous buildons cette image et la publions sur un Docker Registry. Nous appelerons cette première image your-username/container-base:1.0.0
.
Cette image de base peut déjà exécuter vos scripts et tâches bash
. Prochaine étape, créons une image spécifique en se basant sur celle-ci.
Imaginons que nous ayons un projet qui exécute un serveur Dart
. Par défaut, le framework Dart
n’est pas installé sur l’agent en ligne, c’est donc un bon scénario pour nous. Créons cette image Docker spécifique :
FROM your-username/container-base:1.0.0
RUN apt-get -y update && \
apt-get -y upgrade
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-transport-https \
wget \
gpg
RUN wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/dart.gpg
RUN echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dartlang.org/linux/debian stable main' | tee /etc/apt/sources.list.d/dart_stable.list
RUN apt-get update && apt-get install dart && rm -rf /var/lib/apt/lists/*
ENV PATH="$PATH:/usr/lib/dart/bin:$HOME/.pub-cache/bin"
Comme vous pouvez le voir, nous créons une image avec la dernière version stable de Dart
, biensûr vous pouvez créer une image génériques qui prendra en paramètre une version de Dart
. Enfin vous pourriez ensuite builder une image pour chaque version que vous souhaitez cibler. Nous appelerons cette seconde image your-username/container-dart:stable
. Nous avons maintenant notre image de Dart
prête, utilisons-la !
Pour utiliser une image en tant que container job c’est très simple il vous suffit de la spécifier comme ceci :
container:
image: your-username/your-container:1.0.0
endpoint: # Optional service connection for private Docker registries
Ci-dessous, un exemple d’une commande Dart
s’exécutant dans le container job que nous avons spécifié plus haut:
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Build_Dart_Server
jobs:
- job:
displayName: "Build Dart Server"
container:
image: your-username/container-dart:stable
steps:
- script: dart --version
displayName: 'Check Dart version'
# All your Dart commands here...
Comme vous pouvez le voir, il vous suffit de le déclarer dans la section du job.
Vous savez maintenant comment créer facilement vos propres conteneurs Docker pour tester, builder et déployer vos projets. Il est maintenant temps pour vous de créer votre propre ensemble d’images Docker!
Happy coding!