RĂ©cemment, je suis tombĂ© sur une bĂȘte pas si populaire dans le monde DevOps, les pipelines Azure DevOps. ImmĂ©diatement, j'ai ressenti l'absence d'instructions ou d'articles clairs sur le sujet, je ne sais pas Ă quoi il est liĂ©, mais Microsoft a clairement quelque chose Ă travailler en termes de vulgarisation de l'outil. Aujourd'hui, nous allons crĂ©er un pipeline pour les tests automatisĂ©s dans le cloud Azure.
Donc, la tĂąche:
Il existe des logiciels qui s'appuient sur les mĂȘmes Azure DevOps, qui sont assemblĂ©s Ă partir d'un projet sur WIX. S'il y a un intĂ©rĂȘt, j'Ă©crirai sur cet outil. En fait, il s'agit d'un moyen plus automatisĂ© de crĂ©er des programmes d'installation Windows, qui remplace le InstallShield standard. Ainsi, notre logiciel construit et gĂ©nĂšre avec succĂšs un artefact, un certain setup.exe, qui place l'application sur un systĂšme Windows. Il est nĂ©cessaire de placer cette application dans une machine virtuelle similaire Ă un prod, de copier les tests automatisĂ©s prĂ©parĂ©s par l'Ă©quipe de test lĂ -bas, de les exĂ©cuter et de collecter les rĂ©sultats afin de considĂ©rer la branche comme bonne ou mauvaise avant de fusionner. Tout est comme dans GitLab,
uniquement via w ....En tant qu'environnement de virtualisation oĂč nous exĂ©cuterons nos tests, nous utilisons Ă©videmment Azure DevTest Labs, une entitĂ© dans les abonnements Azure, qui a Ă©tĂ© créée pour dĂ©former toutes sortes de non-sens de test en elle pour un prix raisonnable.
1. Intégration cÎté cloud
Tout d'abord, nous devons intĂ©grer nos laboratoires DevTest Ă Azure DevOps, pour lesquels nous avons besoin d'un principal de service, essentiellement un compte de service qui vous permet d'accĂ©der aux pipelines dans le cloud et d'y crĂ©er / supprimer des ressources pour nous-mĂȘmes.
Accédez à l'abonnement et recherchez le service Azure Active Directory

Nous trouvons les enregistrements d'applications et cliquez sur Nouvel enregistrement, cela créera notre principal de service. Je ne passerai pas en revue les paramÚtres que je choisirai lors de la création, cela peut différer selon les abonnements.

Maintenant, nous devons donner des droits à notre directeur de service. Pour ce faire, accédez à l'icÎne d'abonnement avec une clé. Choisissez notre abonnement.

Ensuite, dans ContrÎle d'accÚs, cliquez sur Attribution de rÎle et recherchez ce compte dans la recherche par le nom que vous venez de créer. Nous donnons le rÎle de contributeur, cela suffit.

Ensuite, revenez à notre principal de service dans Azure AD et ouvrez ses propriétés. Plus tard, nous aurons besoin de tous les identifiants qui s'y trouvent, nous les enregistrons.
C'est lĂ que se terminent nos paramĂštres de portail et nous allons Ă Azure DevOps.
2. Intégration du cÎté d'Azure DevOps
Tout d'abord, nous allons dans les paramÚtres du projet et sélectionnez Connexions de service. Créez un nouvel élément de type Azure Resource Manager.

Maintenant, nous avons besoin de tous les identifiants que nous avons enregistrés. Cliquez sur utiliser la version complÚte de la boßte de dialogue de connexion au service. Et entrez toutes les données que nous avons reçues du directeur de service. Cliquez sur vérifier et si tout va bien, conservez la connexion. Nos pipelines peuvent désormais l'utiliser pour se connecter au cloud.

3. Création d'un pipeline
Nous passons maintenant Ă la plus intĂ©ressante, la construction du pipeline lui-mĂȘme. Ouvrez le menu Pipelines-Builds

Nous sommes accueillis par un menu pour créer une nouvelle construction, qui tentera par défaut de créer un fichier YAML pour nous avec une configuration appropriée. Nous refusons poliment cela et choisissons la version classique. Le désir de Microsoft de tout faire comme les gens et de donner la possibilité de personnaliser autant que possible les pipelines via YAML, mais la documentation limitée et juste l'inopérabilité pratique de nombreux modules nous indique qu'il est trop tÎt pour utiliser cette fonctionnalité.

De la variĂ©tĂ© des modĂšles, nous avons besoin d'un simple pipeline vide. AprĂšs sa crĂ©ation, nous sommes accueillis par une fenĂȘtre d'Ă©dition vide, dans laquelle nous allons passer beaucoup de temps.

Alors, cliquez sur + et entrez dans un certain magasin de modules, d'oĂč nous aurons besoin des composants suivants de la liste.

Avant de procéder à la configuration de la tùche de pipeline, nous devons créer et placer plusieurs fichiers dans le projet. Ce sera le modÚle ARM de notre machine virtuelle, que nous générerons dans Azure DevTest Labs, le script pour obtenir la machine IP aprÚs sa création et, si vous le souhaitez, les scripts de nos tests ou ce que nous voulons exécuter sur l'hÎte.
4. Génération de modÚles ARM
Pour crĂ©er une machine virtuelle, nous devons d'abord gĂ©nĂ©rer un modĂšle pour cela, un fichier json, que nous mettons dans le code du projet afin qu'il puisse ĂȘtre lu Ă partir de lĂ par le pipeline.
Nous allons dans notre laboratoire et trouvons le menu Formules (bases réutilisables), cliquez pour en créer un nouveau.

Nous serons accueillis par une longue liste d'images comme base, le choix de la taille de la machine, tout comme lors de la crĂ©ation d'une machine virtuelle. Ă ce stade, nous ne nous arrĂȘterons pas, nous allons immĂ©diatement passer au dernier Ă©lĂ©ment des propriĂ©tĂ©s de la machine, Ă savoir les artefacts. Vous pouvez utiliser toutes les configurations nĂ©cessaires Ă votre environnement. Par exemple, j'ajoute une machine au domaine et j'y ajoute un compte de service en tant qu'administrateur afin que le pipeline puisse ensuite accĂ©der Ă cette machine sous ce compte. Tout cela peut varier, mais pour rĂ©ussir les tests du code, nous avons besoin d'un artefact, sur lequel nous nous attarderons plus en dĂ©tail. Pour mettre la derniĂšre version du logiciel que nous avons testĂ© sur notre machine, nous utiliserons l'artefact TĂ©lĂ©charger les pipelines Azure et exĂ©cuter l'artefact Script. Rappelez-vous au dĂ©but, j'ai dit que quelque part une construction va avec le programme d'installation de l'application? Maintenant, nous devons dire Ă la machine virtuelle, ou plutĂŽt au modĂšle, pour qu'il aille prendre cet artefact. Et je ne l'ai pas simplement rĂ©cupĂ©rĂ©, mais Ă©galement dĂ©fini, pour lequel nous remplissons des champs spĂ©ciaux indiquant le projet, le nom de la gĂ©nĂ©ration et la clĂ© secrĂšte. La clĂ© secrĂšte, comme dans tous les systĂšmes de ce type, est gĂ©nĂ©rĂ©e dans le compte, dans ce cas dans Azure DevOps et stockĂ©e dans Secrets dans votre laboratoire. Il y a une petite mise en garde, dans Secrets, nous l'enregistrerons, mais ce n'est ni froid ni chaud, il sera lancĂ© Ă partir d'un autre utilisateur dans le cadre du pipeline, donc nous devrons saisir Ă nouveau manuellement la clĂ© secrĂšte dans le modĂšle.
Un autre artefact qui doit ĂȘtre inclus est «Configurer WinRM», nous en aurons besoin pour un accĂšs ultĂ©rieur Ă la machine. Il n'y a qu'un seul paramĂštre, le nom d'hĂŽte. Comme nous ne le savons pas Ă l'avance, nous utiliserons la variable% COMPUTERNAME%.

Nous avons donc ajoutĂ© tous les artefacts nĂ©cessaires, nous allons passer Ă la raison pour laquelle nous sommes venus ici. Nous obtenons le modĂšle ARM gĂ©nĂ©rĂ© dans l'onglet AvancĂ© de la mĂȘme fenĂȘtre de crĂ©ation de formule.

Copiez le contenu de la page dans le fichier VMtemplate.json et placez-le Ă la racine du projet. Nous n'avons plus besoin du cloud, nous revenons au pipeline.
5. Configuration du pipeline
Commençons par le plus important et le plus intĂ©ressant, la crĂ©ation d'une machine virtuelle, pour cela nous avons fait toutes ces intĂ©grations et modĂšles. Dans l'abonnement Azure RM, nous sĂ©lectionnons notre connexion de service, que nous avons configurĂ©e Ă l'Ă©tape 2. Ensuite, l'environnement de laboratoire disponible s'affiche. Ensuite, nous sĂ©lectionnons json que nous avons gĂ©nĂ©rĂ© et nous dĂ©finissons quelques variables obligatoires. Le nom d'utilisateur et le mot de passe de la voiture peuvent ĂȘtre dĂ©finis directement ou avec des variables, mais je ne suis pas sĂ»r du tout que cela fonctionne, quoi que j'Ă©crive lĂ -bas, je ne pourrais pas entrer dans la voiture avec ces crĂ©dits, l'essentiel est de dĂ©finir le nom de la voiture afin qu'il soit toujours possible unique. Pour cela, j'utilise la variable d'environnement de gĂ©nĂ©ration.

Ensuite, nous avons mis en place un autre point important. AprÚs le décollage de la voiture, nous devons également connaßtre ses paramÚtres d'une maniÚre ou d'une autre, et ce n'est pas mieux pour nous mais pour la ligne de paiement. Pour ce faire, nous créons un script, par exemple GetLabVMParams.ps1 et le mettons là , dans le projet. J'ai pris le texte du script sur le site Web de Microsoft, mais je l'ai légÚrement corrigé pour mon environnement, car il a pris des machines PublicIP et FQDN. Je n'en ai pas, mais il y a PrivateIP qui n'est pas si facile à obtenir, j'ai donc ajouté un morceau.
Param( [string] $labVmId) $labVmComputeId = (Get-AzureRmResource -Id $labVmId).Properties.ComputeId # Get lab VM resource group name $labVmRgName = (Get-AzureRmResource -Id $labVmComputeId).ResourceGroupName # Get the lab VM Name $labVmName = (Get-AzureRmResource -Id $labVmId).Name # Get lab VM public IP address # $labVMIpAddress = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).IpAddress # Get lab VM FQDN # $labVMFqdn = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName -Name $labVmName).DnsSettings.Fqdn # Get lab VM private IP address $VmNetworkdetails= (((Get-AzureRmVM -ResourceGroupName $labVmRgName -Name $labVmName).NetworkProfile).NetworkInterfaces).Id $nicname = $VmNetworkdetails.substring($VmNetworkdetails.LastIndexOf("/")+1) $labVMnetwork = (Get-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $labVmRgName)|Select-Object -ExpandProperty IPConfigurations $labVMIpAddress = $labVMnetwork.PrivateIpAddress # Set a variable labVmRgName to store the lab VM resource group name Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName" # Set a variable labVMIpAddress to store the lab VM Ip address Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress" # Set a variable labVMFqdn to store the lab VM FQDN name Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn" Write-Output $labVMIpAddress Set-Item wsman:\localhost\client\trustedhosts * -Force
De tout ce que le script lit, nous n'avons besoin que de la variable labVMIpAddress. Eh bien, c'est pour moi, peut-ĂȘtre avez-vous besoin d'autre chose, pour cela, je n'ai rien supprimĂ© et j'ai juste commentĂ© l'excĂšs.
Je vais également expliquer la derniÚre ligne du script, il permet à notre machine de génération d'accéder à n'importe quel hÎte via WinRM.
L'Ă©tape suivante, nous exĂ©cutons notre merveilleux script. Il aura besoin de la mĂȘme connexion au cloud, la variable d'entrĂ©e avec l'ID de la machine, qui Ă ce moment-lĂ sera dĂ©jĂ connue de l'Ă©tape prĂ©cĂ©dente. Comment? Ici, il est nĂ©cessaire de mentionner une chose aussi merveilleuse que les variables de sortie. Chaque Ă©tape peut avoir une liste de variables qui sont transmises aux prochaines Ă©tapes du pipeline. En consĂ©quence, pour notre super script, une telle variable sera labVMIpAddress, n'oubliez pas de l'indiquer.

De plus, je fais des choses assez simples qui, en plus, peuvent varier d'un cas à l'autre. J'exécute un script à distance avec la création de boules, dans lequel je téléchargerai ensuite mes scripts.
New-Item âC:\test" âtype directory New-SMBShare âName âtestâ âPath âC:\testâ âFullAccess everyone
D'aprĂšs le nom des choux, il est clair que nous copions ensuite un exemple de script sur la machine et l'exĂ©cutons en une Ă©tape de plus. En tant qu'adresse de la machine distante, notre variable $ (labVMIpAddress) nous est utile. Ensuite, nous utilisons la tĂąche «ramasser l'artefact des boules» et copions les rĂ©sultats du script dans notre environnement de build, puis nous enregistrons ces fichiers dans l'artefact de build avec la mĂȘme tĂąche standard. Une fois que nous n'avons plus besoin de la voiture, nous la tuons Ă la derniĂšre Ă©tape. La principale difficultĂ©, comme on peut le voir dans le volume de l'article, est de s'intĂ©grer au cloud et d'Ă©tablir le contact avec la machine virtuelle que vous avez créée, alors vous pouvez dĂ©jĂ vous amuser autant que vous en avez besoin.
Ceci est mon premier article, alors ne jugez pas strictement, les commentaires sont les bienvenus.