Accélérer votre CI/CD Azure en utilisant une image Docker

Ayant eu de multiples expériences dans le monde du conseil, j'ai pu acquérir une expertise dans la conception et la construction de services de collaboration d'entreprise. Je suis passionné par les technologies Microsoft et surtout Azure. Aujourd'hui je possède une solide expérience en méthodologie de développement et j'ai mené des équipes de développement technique au succès. Je possède également une solide connaissance de l'infrastructure qui fait de moi une ressource efficace pour mettre en œuvre la transformation numérique vers le cloud Microsoft. Je suis un professionnel efficace et honnête qui aime relever les challenges. Aimant partager mes connaissances; je suis à l'aise en tant que Technical Leader et en tant que membre d'une équipe. Mes compétences techniques sont les suivantes: Azure, DevOps, Architecture Applicative, Développement de solution Cloud Native, écosystème Microsoft... et bien d'autres. Pour voir mes certifications Microsoft : https://www.youracclaim.com/users/antoine-loizeau
Lorsque vous créez vos pipelines CI/CD en utilisant des outils externes vous perdez un temps considérable lors du téléchargement des binaires, de l'installation et la configuration avant de pouvoir continuer votre traitement.
Dans cet article, je vous propose simplement de construire une image Docker vous permettant d'accélérer votre CI/CD car tous les outils nécessaires seront embarqués et configurés en amont de vos activités de déploiements.
Les outils
Avant de vous fournir le Dockerfile associé à ma proposition voici la liste des outils installés dans l'image utilisant une base linux Ubuntu 20.04 :
git, curl, gzip, jq ...
nodejs & npm
python 3 & pip
Azure CLI & PowerShell
Binaire agent d'Azure DevOps
HashiCorp Terraform avec ces outils:
Terraform-docs
Checkov
Infracost
Dockerfile
Et voici le fichier dockerfile tant attendu, n'oubliez pas de fournir les trois arguments attendus :
args:
- runtimeImage: ubuntu:20.04
agentVersion: "2.217.2"
tfDocsVersion: "v0.16.0"
ARG runtimeImage
FROM ${runtimeImage}
ARG agentVersion
ARG tfDocsVersion
ENV AGENT_ALLOW_RUNASROOT="0"
ENV DEBIAN_FRONTEND=noninteractive
ENV \
APP_ROOT=/opt/app-root \
# The $HOME is not set by default, but some applications needs this variable
HOME=/opt/app-root \
PATH=/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
USER 0
WORKDIR ${APP_ROOT}
RUN apt-get update && \
apt-get install -y -qq --no-install-recommends \
apt-transport-https \
apt-utils \
bash \
bc \
build-essential \
ca-certificates \
curl \
git \
gnupg \
gzip \
iputils-ping \
jq \
lsb-release \
nodejs \
npm \
python3.7 \
python3-pip \
software-properties-common \
tar \
unzip \
wget && \
add-apt-repository ppa:deadsnakes/ppa && \
wget -q "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb" && \
wget -O- https://apt.releases.hashicorp.com/gpg | \
gpg --dearmor | \
tee /usr/share/keyrings/hashicorp-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
tee /etc/apt/sources.list.d/hashicorp.list && \
dpkg -i packages-microsoft-prod.deb && \
apt-get update && \
apt-get install -y powershell \
terraform && \
pip3 install -U urllib3 requests setuptools checkov && \
curl -sL https://aka.ms/InstallAzureCLIDeb | bash && \
curl -fsSL "https://vstsagentpackage.azureedge.net/agent/${agentVersion}/vsts-agent-linux-x64-${agentVersion}.tar.gz" -O && \
tar xvfz vsts-agent-linux-x64-${agentVersion}.tar.gz && \
rm vsts-agent-linux-x64-${agentVersion}.tar.gz && \
curl -Lo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/${tfDocsVersion}/terraform-docs-${tfDocsVersion}-linux-amd64.tar.gz && \
tar -xzf terraform-docs.tar.gz && \
chmod +x terraform-docs && \
mv terraform-docs /usr/local/bin/terraform-docs && \
rm terraform-docs.tar.gz && \
curl -fsSL https://raw.githubusercontent.com/infracost/infracost/master/scripts/install.sh | sh && \
chmod 777 -R /opt/app-root && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY start.sh stop.sh .
ENTRYPOINT ["/bin/bash", "start.sh"]
Start.sh
#!/bin/bash
trap -- '' SIGINT SIGTERM
./config.sh --unattended --agent "$HOSTNAME" --url "https://dev.azure.com/aloizeau" --auth PAT --token "$TOKEN" --pool "$POOL" --work "_work" --replace --acceptTeeEula
./run.sh
exit 0
Stop.sh
!/bin/bash
echo "cleanup. removing azure pipelines agent..."
./config.sh remove --unattended --auth PAT --token "$TOKEN"
exit 0
Whitelist des URLs utilisées
Au besoin, si vous avez un réseau bridé, voici quelques urls à autoriser pour le bon fonctionnement du build:
"terraform-docs.io;api.github.com;*.azure.com;*.microsoft.com;*.core.windows.net;*.infracost.io;infracost.io;*.icanhazip.com;files.pythonhosted.org;*.bridgecrew.cloud;*.githubusercontent.com;*.hashicorp.com;pypi.org;*.vsassets.io;ipv4.icanhazip.com;*.dev.azure.com;dev.azure.com;vssps.dev.azure.com;dc.services.visualstudio.com;*.azure.com;management.core.windows.net;graph.windows.net;*.vault.azure.net;login.microsoftonline.com;*.azurewebsites.net;github.com;kubernetes-charts.storage.googleapis.com;*.azurecr.io;*.blob.core.windows.net;vstsagentpackage.azureedge.net;registry.terraform.io;releases.hashicorp.com;aka.ms;objects.githubusercontent.com;*.visualstudio.com;*.vsrm.visualstudio.com;*.vstmr.visualstudio.com;*.vssps.visualstudio.com;*.vsblob.visualstudio.com;bridgecrew.cloud;*.file.core.windows.net"






