Docker/Agent.ps1
Clear-Host $message = @" ___ ___ _ / _ \ / _ \ | | / /_\ \_____ _ _ __ ___ / /_\ \ __ _ ___ _ __ | |_ | _ |_ / | | | '__/ _ \ | _ |/ _` |/ _ \ '_ \| __| | | | |/ /| |_| | | | __/ | | | | (_| | __/ | | | |_ \_| |_/___|\__,_|_| \___| \_| |_/\__, |\___|_| |_|\__| __/ | |___/ "@ Write-Host $message -ForegroundColor Magenta Write-Host "" -ForegroundColor White Write-Host Agent - $Env:AZP_AGENT_NAME Write-Host PAT - $Env:AZP_TOKEN $ProgressPreference = 'SilentlyContinue' [string]$global:selectedSubscription = "" [string]$global:adoOrg = $Env:AZP_ORG [string]$global:selectedProject = $Env:AZP_PROJECT $global:dockerAgent = "" $global:adoURL = "" if (!(Test-Path "$env:APPDATA\Microsoft.PowerPlatform.Docker")) { $global:dockerAgent = New-Item -Path "$env:APPDATA\Microsoft.PowerPlatform.Docker" -ItemType Directory } if (!(Test-Path "\azp")) { New-Item -Path "\azp" -ItemType Directory } if (!(Test-Path "$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json")) { $global:dockerAgent = New-Item "$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json" -ItemType File $global:dockerAgent = Get-Content "$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json" | ConvertFrom-Json } else { $global:dockerAgent = Get-Content "$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json" | ConvertFrom-Json $global:selectedSubscription = $global:dockerAgent.AzureSubscription $global:adoOrg = $global:dockerAgent.adoOrg $global:selectedProject = $global:dockerAgent.selectedProject $global:adoURL = "https://dev.azure.com/$global:adoOrg" } if (!($global:dockerAgent.PreReqs)) { . \Installers\Install-PreRequisites.ps1 Clear-Host } Write-Host Azure DevOps Organisation - $global:adoOrg $global:adoURL = "https://dev.azure.com/$global:adoOrg" Write-Host Azure DevOps Project - $global:selectedProject $dockerProject = @([ordered]@{AgentName = $Env:AZP_AGENT_NAME; AzureSubscription = $global:selectedSubscription; AzureToken = ""; PreReqs = $true; adoOrg = $global:adoOrg; selectedProject = $global:selectedProject }) $dockerProject | ConvertTo-Json | Out-FileUtf8NoBom ("$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json") $global:dockerAgent = Get-Content "$env:APPDATA\Microsoft.PowerPlatform.Docker\$Env:AZP_AGENT_NAME.json" | ConvertFrom-Json $Env:AZP_TOKEN_FILE = "\azp\.token" $Env:AZP_TOKEN | Out-FileUtf8NoBom -FilePath $Env:AZP_TOKEN_FILE if ((Test-Path Env:AZP_WORK) -and -not (Test-Path $Env:AZP_WORK)) { New-Item $Env:AZP_WORK -ItemType directory | Out-Null } New-Item "\azp\agent" -ItemType directory -ErrorAction SilentlyContinue | Out-Null # Let the agent ignore the token env variables $Env:VSO_AGENT_IGNORE = "AZP_TOKEN,AZP_TOKEN_FILE" Set-Location azp\agent Write-Host "1. Determining matching Azure Pipelines agent..." -ForegroundColor Cyan $ADOUrl = $global:adoURL Write-Host $ADOUrl $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(Get-Content ${Env:AZP_TOKEN_FILE})")) $package = Invoke-RestMethod -Headers @{Authorization=("Basic $base64AuthInfo")} "$($ADOUrl)/_apis/distributedtask/packages/agent?platform=win-x64&`$top=1" $packageUrl = $package[0].Value.downloadUrl Write-Host $packageUrl $fragments = $packageUrl.Split('/') $filename = $fragments[$fragments.Length - 1] Write-Host FileName - $filename Write-Host "$(Get-Location)\$filename" if (!(Test-Path -Path "$(Get-Location)\$filename")) { Write-Host "2. Downloading and installing Azure Pipelines agent..." -ForegroundColor Cyan $wc = New-Object System.Net.WebClient $wc.DownloadFile($packageUrl, "$(Get-Location)\$filename") } else { Write-Host "2a. Agent already up to date" } Expand-Archive -Path $filename -DestinationPath "\azp\agent" -Force -ErrorAction SilentlyContinue try { Write-Host "3. Configuring Azure Pipelines agent..." -ForegroundColor Cyan .\config.cmd --unattended ` --agent "$(if (Test-Path Env:AZP_AGENT_NAME) { ${Env:AZP_AGENT_NAME} } else { ${Env:computername} })" ` --url "$global:adoURL" ` --auth PAT ` --token "$(Get-Content ${Env:AZP_TOKEN_FILE})" ` --pool "$(if (Test-Path Env:AZP_POOL) { ${Env:AZP_POOL} } else { 'Default' })" ` --work "$(if (Test-Path Env:AZP_WORK) { ${Env:AZP_WORK} } else { '_work' })" ` --replace Write-Host "4. Running Azure Pipelines agent..." -ForegroundColor Cyan .\run.cmd pause } finally { Write-Host "Cleanup. Removing Azure Pipelines agent..." -ForegroundColor Cyan .\config.cmd remove --unattended ` --auth PAT ` --token "$(Get-Content ${Env:AZP_TOKEN_FILE})" pause } |