2018-06-19
VSTS Build Agent + nodejs – Del 1
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:
- Spara DSC koden till mappen för ditt projekt.
- Ändra $PATToken variabeln i DSC filen. Följ den här länken och följ instruktioner för att få fram en PAT token.
https://docs.microsoft.com/en-us/vsts/accounts/use-personal-access-tokens-to-authenticate?view=vsts - (valbart) Ändra $AgentzipName och $AgentDownloadUrl för att matcha versionen på önskad VSTS agent.
- Ändra $poolName till samma namn på din agent pool i VSTS.
- Ändra $VSTSUrl till urlen för din VSTS instans.
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.