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.04 | dodatkowe tagi |