Created
August 1, 2021 09:53
-
-
Save cassidydotdk/8271bff7768adfd552ba370e88cd8dc8 to your computer and use it in GitHub Desktop.
Setting up a Docker based VSTS Agent that can run Docker commands
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
agent: | |
image: yourproject.azurecr.io/vsts-agent:${VERSION:-latest} | |
build: | |
context: ./build/agent | |
args: | |
BUILD_IMAGE: mcr.microsoft.com/windows/servercore:20H2 | |
scale: 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# escape=` | |
ARG BUILD_IMAGE | |
FROM ${BUILD_IMAGE} | |
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"] | |
RUN Set-ExecutionPolicy RemoteSigned -Force; Set-ExecutionPolicy Unrestricted -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) | |
RUN choco install docker -y | |
RUN choco install docker-compose -y | |
WORKDIR /azp | |
COPY start.ps1 . | |
CMD powershell .\start.ps1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (-not (Test-Path Env:AZP_URL)) { | |
Write-Error "error: missing AZP_URL environment variable" | |
exit 1 | |
} | |
if (-not (Test-Path Env:AZP_TOKEN_FILE)) { | |
if (-not (Test-Path Env:AZP_TOKEN)) { | |
Write-Error "error: missing AZP_TOKEN environment variable" | |
exit 1 | |
} | |
$Env:AZP_TOKEN_FILE = "\azp\.token" | |
$Env:AZP_TOKEN | Out-File -FilePath $Env:AZP_TOKEN_FILE | |
} | |
Remove-Item Env:AZP_TOKEN | |
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 | Out-Null | |
# Let the agent ignore the token env variables | |
$Env:VSO_AGENT_IGNORE = "AZP_TOKEN,AZP_TOKEN_FILE" | |
Set-Location agent | |
Write-Host "1. Determining matching Azure Pipelines agent..." -ForegroundColor Cyan | |
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(Get-Content ${Env:AZP_TOKEN_FILE})")) | |
$package = Invoke-RestMethod -Headers @{Authorization=("Basic $base64AuthInfo")} "$(${Env:AZP_URL})/_apis/distributedtask/packages/agent?platform=win-x64&`$top=1" | |
$packageUrl = $package[0].Value.downloadUrl | |
Write-Host $packageUrl | |
Write-Host "2. Downloading and installing Azure Pipelines agent..." -ForegroundColor Cyan | |
$wc = New-Object System.Net.WebClient | |
$wc.DownloadFile($packageUrl, "$(Get-Location)\agent.zip") | |
Expand-Archive -Path "agent.zip" -DestinationPath "\azp\agent" | |
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 "$(${Env:AZP_URL})" ` | |
--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 | |
} | |
finally | |
{ | |
Write-Host "Cleanup. Removing Azure Pipelines agent..." -ForegroundColor Cyan | |
.\config.cmd remove --unattended ` | |
--auth PAT ` | |
--token "$(Get-Content ${Env:AZP_TOKEN_FILE})" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
docker run --restart always -d -v "\\.\pipe\docker_engine:\\.\pipe\docker_engine"-e AZP_AGENT_NAME=DockerBuildAgent01 -e AZP_POOL="On Premise Build Agents" -e AZP_URL=https://dev.azure.com/yourproject/ -e AZP_TOKEN=yourPAT yourproject.azurecr.io/vsts-agent:latest |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment