Créer des pipelies Azure avec Azure DevOps dans un environnement auto-hébergé Linux

Cet article décrit comment créer un environnement d'agent auto-hébergé qui s'appuie sur votre propre machine virtuelle avec Azure DevOps.

Que sont Azure DevOps? Ou que pouvez-vous faire? Puisque d'autres personnes ont écrit en détail sur, je vais l'omettre ici et ne toucher que le sujet principal.

Pourquoi s'auto-héberger?

Dans Azure DevOps, le service de création est Azure Pipelines. Par défaut, les versions sont effectuées dans un environnement hébergé par Microsoft. De plus, ils sont fournis gratuitement.

Alors pourquoi prendre la peine de payer pour la machine virtuelle et de préparer votre propre environnement auto-hébergé? En effet, les environnements hébergés par Microsoft présentent les restrictions suivantes: (Au 20/02/2020)

Les limites des agents hébergés par Microsoft sont les suivantes:

Cependant, si vous l'utilisez dans un projet open source, vous devriez pouvoir le construire avec un agent hébergé par Microsoft, à moins qu'il ne s'agisse d'un très gros projet.

Cependant, dans les systèmes d'entreprise, le développement du système est souvent effectué à partir de sources fermées, et la contrainte d'une heure à chaque fois n'a souvent pas assez de temps pour construire et tester. Dans de tels cas, l'auto-hébergement est une option viable.

De plus, ** Self-Host vous permet de définir librement la taille de la machine virtuelle **, vous pouvez donc utiliser une grande machine virtuelle comme machine de construction et réduire le temps global de construction et de test.

Que souhaitez-vous réaliser dans un environnement auto-hébergé?

Cette fois, ce que nous voulons réaliser est simple. Permet à Azure Pipelines d'appeler des agents pour qu'ils s'exécutent sur des machines virtuelles que vous avez vous-même configurées. La vue d'ensemble ressemble à la figure suivante.

セルフホスト環境

La séquence des flux est exécutée dans l'ordre numérique sur la figure.

  1. Le développeur pousse le code source vers la branche principale
  2. Azure Repos lance la séquence de construction Azure Pipelines déclenchée par une
  3. Azure Pipelines demande à un agent auto-hébergé sur la machine virtuelle de créer
  4. L'agent sur la machine virtuelle crée le code source
  5. L'agent sur la machine virtuelle notifie à Azure Pipelines le résultat, quel que soit le succès ou l'échec de la génération.
  6. Azure Pipelines envoie un e-mail aux développeurs du résultat du build

Conditions préalables

Maintenant, configurons l'environnement d'auto-hébergement à partir d'ici, mais par souci de simplicité, nous allons faire quelques prérequis.

Tout d'abord, les autorisations de l'utilisateur qui travaille doivent remplir les conditions suivantes.

  1. Avoir l'autorisation de créer des utilisateurs et des groupes Azure AD
  2. Avoir le rôle d'administrateur de projet pour Azure DevOps
  3. Vous êtes autorisé à créer des machines virtuelles Ubuntu 18.04

Ensuite, nous supposons que vous avez également une certaine préparation pour les ressources Azure.

  1. Vous avez déjà créé une organisation sur Azure DevOps
  2. Vous avez déjà créé un projet Azure DevOps
  3. Vous disposez déjà d'un référentiel de build dans Azure Repos
  4. Vous avez déjà configuré des groupes de ressources et des machines virtuelles pour l'auto-hébergement.

Ce qui suit n'est pas obligatoire, mais vous trouverez peut-être plus facile pour plus tard.

--Créez un Key Vault dans un groupe de ressources et l'utilisateur actif a l'autorisation de créer un secret

Aperçu du travail

Il est important pour l'automatisation future de comprendre le flux de travail avant de se lancer dans le travail individuel. De plus, si vous comprenez ce qu'il faut définir ou ne pas définir lorsque vous travaillez, vous comprendrez mieux la signification du travail et vous pourrez sélectionner ce qui doit être automatisé et diviser le travail.

Le travail à effectuer ici peut être grossièrement divisé en trois types.

  1. Configuration et association de chaque ressource Azure
  2. Configuration d'un agent pour une machine virtuelle
  3. Créez un nouveau pipeline

Quant à ʻazure-pipelines.yml`, qui est requis pour le dernier nouveau pipeline, Ops peut ne pas être en mesure de saisir les détails en fonction de la cible à construire, il est donc possible que Dev le décrive.

Définition et association de chaque ressource Azure

Ici, nous allons principalement créer ce dont nous avons besoin dans Azure DevOps. Voici ce qu'il faut créer:

Ensuite, je vous expliquerai étape par étape.

Création d'un utilisateur pour exécuter l'agent

La tâche la plus importante cette fois est d'associer Azure Pipelines à des agents dans un environnement auto-hébergé. Sinon, Azure Pipelines ne pourra pas déterminer quel agent appeler et l'agent ne pourra pas déterminer la tâche à effectuer.

Cette fois, créez un nouvel utilisateur et inscrivez-vous en tant qu'administrateur d'agent pour Azure Pipelines. Notez que vous pouvez ignorer cette étape si vous souhaitez associer un administrateur d'agent à un utilisateur existant.

Cependant, en raison de la commodité d'utiliser le jeton d'accès personnel de l'administrateur d'agent, il peut être plus facile (peut-être) de préparer un utilisateur dédié à gérer le jeton.

C'est dommage, mais ne vous inquiétez pas des différents thèmes des captures d'écran ...

Création d'un utilisateur Azure Active Directory

Tout d'abord, nous avons besoin d'un utilisateur pour gérer la file d'attente de l'agent, créez donc un utilisateur Azure AD avec les informations suivantes:

Éléments de réglage Définir la valeur
Nom d'utilisateur Azure-Pipelines-Agent-Queue-Admin-001
Nom Azure Pipelines Queue Admin 001
Nom Admin - 001
sexe Azure Pipelines Agent Queue
mot de passe Tout mot de passe
Lieu d'utilisation Japon

En outre, modifiez les informations de contact d'authentification et entrez l'adresse e-mail de votre administrateur Azure AD ou de votre liste de diffusion d'administrateur.

Ajout d'utilisateurs à Azure DevOps

Ajoutez l'utilisateur créé dans Azure Active Directory à Azure DevOps. Un utilisateur avec des privilèges administratifs Azure DevOps se connecte à Azure DevOps et clique sur «Paramètres d'organisation» dans la figure suivante pour ouvrir l'écran des paramètres de l'organisation.

Organization settings

Ensuite, sélectionnez «Utilisateurs» dans le volet gauche.

Users

Enfin, entrez vos informations et cliquez sur «Ajouter».

Éléments de réglage Définir la valeur
Users L'utilisateur Azure AD que vous venez de créer
Access level Basic
Add to projects Nom du projet à ajouter
Azure DevOps Groups Project Contributors

User information

Création d'un jeton d'accès personnel pour un utilisateur administrateur d'agent

Connectez-vous à Azure DevOps avec l'utilisateur que vous venez de créer. Une fois connecté, modifiez votre profil pour conserver votre adresse e-mail valide.

Une fois connecté, sélectionnez votre projet et cliquez sur «Jetons d'accès personnels» dans le profil en haut à droite de l'écran.

User Profile

Ensuite, comme aucun jeton d'accès n'aurait dû être émis à ce stade, cliquez sur «Nouveau jeton» dans le volet droit.

New Token

Une boîte de dialogue de saisie s'ouvre sur le côté droit de l'écran, saisissez donc les informations requises.

Config Token

Définissez les autorisations pour les étendues suivantes.

portée Définir la valeur
Agent Pools Read & manage
Build Read & execute
Packaging Read, write, & manage
Release Read, write, execute, & manage
Test Management Read & write

Lorsque vous cliquez sur «Créer», le jeton d'accès personnel s'affiche comme indiqué ci-dessous. Cliquez sur l'icône de copie et enregistrez-le quelque part.

Success Creation PAT

Veuillez noter que ** Azure DevOps ne stocke pas ce jeton d'accès personnel **. Assurez-vous de le sauvegarder quelque part pour pouvoir l'oublier.

Voici une astuce, mais c'est une bonne idée de gérer à la fois votre mot de passe et votre jeton d'accès personnel en tant que secret Key Vault. En l'associant à une stratégie personnalisée qui vérifie la date d'expiration de Key Vault et l'audit, vous pouvez émettre un nouveau jeton d'accès personnel et toujours utiliser un jeton valide avant l'expiration du jeton d'accès personnel. Je vais.

En fait, le jeton d'accès personnel n'est nécessaire qu'au moment de la création ...?

Création d'un pool d'agents

Maintenant, voici la création du pool d'agents, qui est le point de cette fois.

Sélectionnez un projet et cliquez sur «Paramètres du projet».

Project settings

Cliquez sur «Pools d'agents» dans le volet gauche.

Agent pools

Cliquez sur «Ajouter un pool» dans le coin supérieur droit du volet droit.

Add pool

Entrez les informations requises et cliquez sur «Créer». Cette fois, nous l'appellerons «Pool d'agents hébergés».

Config pool

Le pool d'agents a été créé, cliquez dessus.

Hosted Agent Pool

Cliquez sur «Nouvel agent» dans le volet droit.

New Agent

Une boîte de dialogue pour l'agent apparaîtra. Cliquez sur l'onglet Linux, assurez-vous que la plate-forme est x64, cliquez sur l'icône de copie et enregistrez le lien de téléchargement.

Copy Download Link

Configurer un agent pour une machine virtuelle

Pour télécharger l'agent plus tôt, procédez comme suit:

  1. Connectez-vous à la machine virtuelle que vous avez déjà préparée.
  2. Créez un répertoire appelé «myagent».
  3. Utilisez le lien de téléchargement pour télécharger l'agent et décompresser le fichier compressé.

La commande est:

mkdir myagent && cd myagent
wget https://vstsagentpackage.azureedge.net/agent/2.164.8/vsts-agent-linux-x64-2.164.8.tar.gz
tar zxvf vsts-agent-linux-x64-2.164.8.tar.gz

Ensuite, configurez l'agent.

./config.sh

Vous verrez une invite semblable à la suivante:


  ___                      ______ _            _ _
 / _ \                     | ___ (_)          | (_)
/ /_\ \_____   _ _ __ ___  | |_/ /_ _ __   ___| |_ _ __   ___  ___
|  _  |_  / | | | '__/ _ \ |  __/| | '_ \ / _ \ | | '_ \ / _ \/ __|
| | | |/ /| |_| | | |  __/ | |   | | |_) |  __/ | | | | |  __/\__ \
\_| |_/___|\__,_|_|  \___| \_|   |_| .__/ \___|_|_|_| |_|\___||___/
                                   | |
        agent v2.164.8             |_|          (commit 99c93e1)


>>Accord de licence:

Pour créer la source à partir du référentiel TFVC, vous devez accepter le contrat de licence Team Explorer Everywhere. Cette étape n'est pas nécessaire si vous construisez la source à partir du référentiel Git.

Vous pouvez trouver une copie du contrat de licence Team Explorer Everywhere ici:
  /home/hayashi_toshiki/myagent/externals/tee/license.html

(Y/N)Acceptez-vous maintenant le contrat de licence Team Explorer Everywhere??Entrer(Si N, appuyez sur Entrée) >

La procédure d'entrée est la suivante.

  1. Tapez «Y» et appuyez sur «Entrée».
  2. Entrez l'URL du serveur. La valeur est «https://dev.azure.com/ {nom de l'organisation}». Après avoir tapé, appuyez sur «Entrée».
  3. Entrez le type d'authentification. Puisque nous utilisons un jeton d'accès personnel, appuyez simplement sur «Entrée».
  4. Entrez dans le pool d'agents. Tapez Hosted Agent Pool et appuyez sur ʻEnter`.
  5. Entrez le nom de l'agent. Nous utiliserons la valeur par défaut, alors appuyez simplement sur «Entrée».
  6. Entrez votre dossier de travail. Nous utiliserons la valeur par défaut, alors appuyez simplement sur «Entrée».

Inscription au service

Enregistrez-vous en tant que service (Daemon) pour que l'agent de la machine virtuelle puisse s'exécuter automatiquement.

La commande pour enregistrer le service est:

cd ~/myagent
sudo ./svc.sh install

Entrez ensuite la commande pour démarrer le service.

sudo ./svc.sh start

Ceci termine la configuration de l'agent sur la machine virtuelle.

La commande pour obtenir l'état du service est la suivante.

sudo ./svc.sh status

Créer un nouveau pipeline

Créez un nouveau pipeline pour vérifier qu'Azure Pipelines et l'agent auto-hébergé sont correctement associés.

Dans Azure DevOps, cliquez sur "Builds" à partir de "Pipelines" dans le volet gauche.

Builds

Cliquez sur «Nouveau pipeline» dans le volet droit.

New Pipeline

Cette fois, nous allons parcourir le référentiel Azure Repos, donc cliquez sur ʻAzure Repos Git`.

Azure Repos Git

Ensuite, vous serez invité à sélectionner un référentiel. Veuillez sélectionner n'importe quel référentiel.

Ensuite, créez un nouveau ʻazure-pipelines.yml? Ou utilisez-vous un existant? Sélectionnez environ. Cette fois, nous allons créer un simple fichier YAML, donc sélectionnez Starter pipeline`.

DevOps-Pipelines-Configure-Edited.png

Enfin, la page d'édition du fichier YAML apparaîtra. Modifiez-la comme suit.

# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- master

# ----------------------------------------------------
#Il est important de spécifier ici le nom du pool d'agents.
# ----------------------------------------------------
pool: Hosted Agent Pool

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script'

- script: |
    echo Add other tasks to build, test, and deploy your project.
    echo See https://aka.ms/yaml
  displayName: 'Run a multi-line script'

Cliquez sur «Enregistrer et exécuter» pour enregistrer le YAML et exécuter le pipeline.

Save and Run

Une boîte de dialogue apparaît dans laquelle vous pouvez saisir le message de validation pour le fichier YAML modifié. Cliquez simplement sur "Enregistrer et exécuter".

Run

Après un certain temps, le Job s'exécutera et vous verrez une page similaire à la suivante, indiquant que le pool d'agents hébergés a été créé avec succès.

Build Succeeded

Vous avez maintenant vérifié que l'agent de votre environnement auto-hébergé et Azure Pipelines fonctionnent ensemble.

finalement

Cette fois, j'ai expliqué comment configurer un agent dans un environnement auto-hébergé et utiliser votre propre environnement de construction.

Les rubriques suivantes ne sont pas mentionnées par souci de concision dans cet article.

J'aimerais écrire à leur sujet si j'ai une autre chance.

Nous espérons que vous trouverez cela utile pour tous ceux qui souhaitent essayer Azure DevOps.

Recommended Posts

Créer des pipelies Azure avec Azure DevOps dans un environnement auto-hébergé Linux
[Linux] Créer un environnement Jenkins avec Docker
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Créez un environnement Django avec Vagrant en 5 minutes
Créez un environnement LAMP avec Vagrant (Linux + Apache + MySQL + PHP)
Créez un environnement Selenium sur Amazon Linux 2 dans les plus brefs délais
Créez facilement un environnement de développement avec Laragon
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez un environnement d'API rapide avec docker-compose
Créez un environnement virtuel pour python avec pyenv
Créez un environnement Python moderne avec Neovim
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Créez un environnement LAMP en très peu de temps
Créer un environnement de développement de langage C avec un conteneur
Créez un environnement python avec ansible sur centos6
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créer un environnement virtuel avec conda avec Python
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
[Memo] Créez un environnement virtuel avec Pyenv + anaconda
Définir une adresse IP fixe dans l'environnement Linux
Créez un environnement virtuel avec pyenv et venv
Créer un environnement de développement Django à l'aide de Doker Toolbox
Travaillez dans un environnement virtuel avec Python virtualenv.
Construire un environnement Python avec OSX Elcapitan
Créez un environnement de développement de plugins Minecraft avec Eclipse
Créez rapidement un environnement Python Django avec IntelliJ
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Créer un environnement d'exécution python avec VS Code
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
[Linux] WSL2 Créer un environnement pour laravel7 avec Ubuntu 20.04
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement de développement avec Poetry Django Docker Pycharm
Comment créer un environnement Python sur Amazon Linux 2
Construire un environnement Django pour Win10 (avec espace virtuel)
Construire un environnement de calcul numérique avec pyenv et miniconda3
J'ai essayé de créer un environnement avec WSL + Ubuntu + VS Code dans un environnement Windows
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
Créez un environnement d'apprentissage automatique scikit-learn avec VirtualBox et Ubuntu
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
Restrictions SSH dans l'environnement Linux
Créez un environnement de développement Go avec les conteneurs distants de VS Code
Créer un environnement de développement Python avec Eclipse (ajouter un éditeur HTML)
Créer un environnement LAMP [CentOS 7]
(Maintenant) Construisez un environnement GPU Deep Learning avec GeForce GTX 960
Créer un environnement python3 avec ubuntu 16.04
Plus de double démarrage ou de VM! Construisons un environnement Linux avec WSL2 et Windows Terminal [WSL2]
Ce à quoi j'étais accro en traitant d'énormes fichiers dans un environnement Linux 32 bits
Construire un environnement python avec direnv
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Créez un environnement de développement confortable avec VSCode x Remote Development x Pipenv
Créer un environnement d'apprentissage automatique
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créer un environnement python avec pyenv (OS X El Capitan 10.11.3)