Azure DevOps (Travis, Google Cloud build & co) proposent des agents de build en mode Saas (hébergés par un tier).
Ils sont très pratique car il n’y a aucune infrastructure à gérer mais ils peuvent poser problème lorsque la build doit se faire sur un service protégé.
En effet les agents étant public ils peuvent ne pas avoir les autorisations pour déployer sur un service.
J’ai rencontré le problème avec le service Azure Service Fabric protégé par un Network Security Group, lors de l’exécution de la tâche de déploiement cette dernière ne se fait pas car la sécurité refuse toutes les ip public.
Solutions
Première solution (qui sera la meilleure dans le futur)
Première solution mais qui n’est pas encore faisable aurait été d’ajouter le Service Tag Azure Devops au Network Security Group, mais ce dernier n’existe pas encore.
Néanmoins il est possible d’ajouter le tag AzureCloud en attendant, mais c’est un “légèrement” bourrin…
Deuxième solution (bourrin)
Seconde solution est d’ajouter les plages d’ip liées à votre service de build.
L’ensemble des ip public Azure est présente ici : https://www.microsoft.com/en-us/download/details.aspx?id=56519 et tout les services fournissent ces données : travis, google cloud…
Troisième solution
Troisième solution que je préfère est d’ajouter lors de la build l’ip de l’agent de build au Network Security Group.
Sur Azure Devops cela se fait via la tâche Azure Cli et il existe des équivalents ailleurs (Jenkins: azure-cli, Bamboo: azure-cli-run…).
Voici le script générique (à adapter en fonction du service de build utilisé et des ports requis):
On oublie pas de supprimer la règle après la build
Et voilà!
Sources
Documentation
- https://azure.microsoft.com/en-us/services/expressroute/
- https://devblogs.microsoft.com/devops/azure-devops-roadmap-update-for-2020-q2/
- https://www.microsoft.com/en-us/download/details.aspx?id=56519
- https://docs.travis-ci.com/user/ip-addresses/
- https://cloud.google.com/compute/docs/faq#find_ip_range
- https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-cli?view=azure-devops
- https://plugins.jenkins.io/azure-cli/