Lokalny, zdockerzyowany agent budowania Azure DevOps

GRAPH

Wraz z modułem Pipeline usługi Azure DevOps, posiadamy dostęp do agentów budowania, zlokalizowanych w chmurze Microsoftu. Jest to całkiem przydatne, bo nie wymaga żadnej konfiguracji z naszej strony. Ma jednak kilka ograniczeń. Przede wszystkim limitowany jest czas dostępu do takich agentów. Dodatkowo, z racji swojej lokalizacji w chmurze, nie będą mogły one w swobodny sposób komunikować się z systemami on-premise.

W ramach zabaw postanowiłem skonfigurować dla testów lokalnego agenta budowania, na moim domowym pc, w kontenerze dockera. Poniżej Dockerfile i przykład uruchomienia. Kontener bazuje na obrazie ubuntu:20.04 i uzupełniłem go o SDK dotnet.

Plik Dockerfile

Na bazie pliku z dokumentacji MS.

FROM ubuntu:20.04
RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends \
    apt-transport-https \
    apt-utils \
    ca-certificates \
    curl \
    git \
    iputils-ping \
    jq \
    lsb-release \
    software-properties-common \
    libicu66 \
    wget

# Download Microsoft signing key and repository
RUN wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

# Install Microsoft signing key and repository
RUN dpkg -i packages-microsoft-prod.deb

# Clean up
RUN rm packages-microsoft-prod.deb

# Update packages
RUN DEBIAN_FRONT=noninteractive apt update -y 
RUN DEBIAN_FRONT=noninteractive apt-get install -y dotnet-sdk-7.0
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
RUN DEBIAN_FRONT=noninteractive apt-get autoremove -y
RUN DEBIAN_FRONT=noninteractive apt-get clean -y

# Can be 'linux-x64', 'linux-arm64', 'linux-arm', 'rhel.6-x64'.
ENV TARGETARCH=linux-x64

WORKDIR /azp

COPY ./start.sh .
RUN chmod +x start.sh

ENTRYPOINT [ "./start.sh" ]

Plik start.sh

start.sh – ten plik nie jest mojego autorstwa, pochodzi z dokumentacji MS.

Przykład użycia

docker build -t dockeragent:latest .

docker run -e AZP_URL=https://dev.azure.com/pawelworwag -e AZP_TOKEN=<TOKEN> -e AZP_AGENT_NAME=bestyja-docker-2 -e AZP_POOL=u4.local -e Linux=Ubuntu -e Linux_version=20.04 --name azure-devops-agent --rm -d dockeragent:latest
-e AZP_URL=adres naszej organizacji
-e AZP_TOKEN=token (Personal Access Token)
-e AZP_AGENT_NAME=nazwa agenta
-e AZP_POOL=pula agentów zdefiniowana w Azure DevOps
-e Linux=Ubuntu -e Linux_version=20.04dodatkowe tagi