Del ett | Det första problemet med VSTS är standardagentpoolerna, de är väldigt långsamma och lösningen är att sätta upp egna. Så varför inte? Det här är den första delen av hur du distribuerar dina nya VSTS-agenter från VSTS till Azure med hjälp av ARM mallar och Powershell DSC.

Vi börjar faktiskt i omvänd ordning genom att göra det sista steget i deploymenten först. Vid det här laget borde alla som arbetar och lever i molnet åtminstone veta vad ARM och DSC är. Jag vet inte men jag tycker personligen att DSC är det svårare att lära sig, så det kommer också att bli min utgångspunkt. I den här bloggen kommer vi att titta på en DSC som kommer att konfigurera din nyinstallerade VM för att vara en agent i VSTS-poolen och även installera node.js.

DSC

DSC filen har bara en konfiguration och alla nodnamn har samma konfiguration. Eftersom vi ska distribuera denna DSC via en Azure resource manager (ARM)-mall behöver vi inte någon komplicerad logik för vilken dator som får vilken konfiguration.

För att kunna kompilera denna DSC måste du installera två DSC-moduler

Find-Module xPSDesiredStateConfiguration | install-module
Find-Module PackageManagement -MaximumVersion ”1.1.7.0” | install-module


Configuration Main {

Param ( [string] $nodeName )
$AgentzipName = "vsts-agent-win-x64-2.127.0.zip"
$AgentDownloadUrl = ("https://vstsagentpackage.azureedge.net/agent/2.127.0/{0}" -f $AgentzipName)
$installsource = "C:\vstsAgent"
$PATToken = "[your vsts pat token]"
$poolName = "AzureAgents"
$VSTSUrl = "https://XXXXXXX.visualstudio.com"

Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -Module xPSDesiredStateConfiguration
Import-DSCResource -ModuleName PackageManagement -ModuleVersion "1.1.7.0"

Node $nodeName
 {
 File InstallFolder {
 #Create Installation folder
 Ensure = "Present"
 DestinationPath = $installsource
 Type = "Directory"
 }
 Script Chocolatey {
 SetScript = { 
 iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
 }
 TestScript = { 
 try{[boolean](cver all)} catch {[boolean]($fasle)}
 }
 GetScript = { @{ Result = "OK" } }
 }
 Script nodejs {
 SetScript = { 
 Start-Process -FilePath "chocolatey" -ArgumentList "feature enable -n allowGlobalConfirmation" -Wait
 start-process -FilePath "cinst" -ArgumentList "nodejs.install --force --safe" -Wait
 }
 TestScript = { 
 try{
 $res = (clist nodejs --localonly)
 -not ($res[1] -match "0 packages installed")
 } catch {[boolean]($fasle)}
 }
 GetScript = { @{ Result = "OK" } }
 dependsOn = "[Script]Chocolatey"
 } 
 Script DownloadAgentFiles {
 #Download agent
 SetScript = { 
 wget -OutFile "$using:installsource\$using:AgentzipName" -Uri $using:AgentDownloadUrl
 }
 TestScript = { 
 Test-Path "$using:installsource\$using:AgentzipName" 
 }
 GetScript = { @{ Result = "OK" } } 
 DependsOn = "[File]InstallFolder"
 }
 Archive UnzipAgentFiles {
 Destination = "${installsource}\agent"
 Path = "${installsource}\${AgentzipName}"
 DependsOn = @(
 "[Script]DownloadAgentFiles"
 )
 }
 Script ConfigureAgent {
 SetScript = {
 $Argument = "configure --unattended --agent $env:COMPUTERNAME --url $using:VSTSUrl --auth PAT --token $using:PATToken --pool `"$using:poolName`" --work d:\build --runAsService --windowsLogonAccount 'NT AUTHORITY\SYSTEM' --acceptTeeEula --replace"
 Write-Host "$using:installsource\agent\bin\Agent.Listener.exe"
 start-process -FilePath "$using:installsource\agent\bin\Agent.Listener.exe" -ArgumentList $Argument -Wait -RedirectStandardOutput o
 }
 TestScript = { 
 [boolean](get-service -DisplayName "VSTS*")
 }
 GetScript = { @{ Result = "OK" } } 
 DependsOn = @(
 "[Archive]UnzipAgentFiles",
 "[Script]nodejs"
 )
 }
 }
}

Gör följande:

DSC resurser

Låt oss gå igenom resurserna i DSC filen.

  • File InstallFolder – Vi ser till att det finns en mapp för att hålla installationsfilerna.
  • Script Chocolatey – Skriptet försöker köra cver (Chocolaty kommando) för att upptäcka om chocolatey installeras, om inte vi kör ett externt PS1 skript för att installera den..
  • Script nodejs – Ett annat skript som använder chocolatey för att installera node.js. För att kunna göra detta från en DSC måste vi först aktivera funktionen allowGlobalConfirmation. Annars fungerar inte –force –safe växlarna.
  • Script DownloadAgentFiles – Det här skriptet laddar ner installationsfilerna.
  • Archive UnzipAgentFiles – Packar upp ZIP filen med intallationsfilerna.
  • Script ConfigureAgent – Sista steget är att installera och konfigurera agenten.

The end

Grattis du är klar med denna del. I detta läga kan du manuellt köra DSC-konfigurationen på vilken Windows-server som helst för att konfigurera den för att vara ett VSTS-byggnadsagent.

Men det vi ska vi inte göra. Istället så kommer vi i mitt nästa inlägg skapar en ARM-mall och lägga till DSC-filen i den.

Relaterade inlägg

Vill du vara säker på att inte missa något

Som du märker brinner vi för att dela med oss av våra erfarenheter, nyttiga lärdomar och spaningar ut i exosfären. Se till att följa vårt nyhetsbrev eller vårt flöde på Linkedin så du inte missar något.

Hidden

Denna webbplats använder cookies

Cookies ("kakor") består av små textfiler. Dessa innehåller data som lagras på din enhet. För att kunna placera vissa typer av cookies behöver vi inhämta ditt samtycke. Vi på Exobe AB, orgnr. 556769-5605 använder oss av följande slags cookies. För att läsa mer om vilka cookies vi använder och lagringstid, klicka här för att komma till vår cookiepolicy.

Hantera dina cookieinställningar

Nödvändiga cookies

Nödvändiga cookies är cookies som måste placeras för att grundläggande funktioner på webbplatsen ska kunna fungera. Grundläggande funktioner är exempelvis cookies som behövs för att du ska kunna använda menyer och navigera på sajten.

Funktionella cookies

Funktionella cookies behöver placeras för att webbplatsen ska kunna prestera som du förväntar dig, exempelvis så att den känner av vilket språk som du föredrar, för att känna av om du är inloggad, för att hålla webbplatsen säker, komma ihåg inloggningsuppgifter eller för att kunna sortera produkter på webbplatsen utefter dina preferenser.

Cookies för statistik

För att kunna veta hur du interagerar med webbplatsen placerar vi cookies för att föra statistik. Dessa cookies anonymiserar personuppgifter.

Cookies för personlig anpassning

För att ge dig en bättre upplevelse placerar vi cookies för dina preferenser

Cookies för annonsmätning

För att kunna erbjuda bättre service och upplevelse placerar vi cookies för att kunna anpassa marknadsföring till dig. Ett annat syfte med denna behandling är att kunna marknadsföra produkter eller tjänster till dig, ge anpassade erbjudanden eller marknadsföra och ge rekommendationer kring nya koncept utifrån vad du har köpt tidigare.

Cookies för personlig annonsmätning

För att kunna visa relevant reklam placerar vi cookies för att anpassa innehållet för dig

Cookies för anpassade annonser

För att visa relevanta och personliga annonser placerar vi cookies för att tillhandahålla unika erbjudanden som är skräddarsydda efter din användardata