Sign inSign up

sharadchhetri/azp-agent-linux

By sharadchhetri

Updated about 2 years ago

Azure Self Hosted Agent in Ubuntu 22.04 LTS

Image
0

279

sharadchhetri/azp-agent-linux repository overview

Introduction

Azure Self Hosted Agent in Ubuntu 22.04 LTS with ansible , git, az, az bicep and aws cli. Find more info here: Microsoft Azure DevOps!

Dockerfile

We have added some more packages and minor changes.
FROM ubuntu:22.04
ENV TARGETARCH="linux-x64"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update
RUN apt install -y curl git jq libicu70 software-properties-common;apt-add-repository --yes --update ppa:ansible/ansible \
    && apt -y install ansible zip unzip apt-utils \
    && curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip;unzip awscliv2.zip \
    && ./aws/install -i /usr/local/aws-cli -b /usr/local/bin \
    && curl -sL https://aka.ms/InstallAzureCLIDeb | bash \
    && az bicep install

WORKDIR /azp/ COPY ./start.sh ./ RUN chmod +x ./start.sh RUN useradd -m -d /home/agent agent RUN chown -R agent:agent /azp /home/agent USER agent ENTRYPOINT [ "./start.sh" ]

start.sh file

#!/bin/bash
set -e

if [ -z "${AZP_URL}" ]; then echo 1>&2 "error: missing AZP_URL environment variable" exit 1 fi

if [ -z "${AZP_TOKEN_FILE}" ]; then if [ -z "${AZP_TOKEN}" ]; then echo 1>&2 "error: missing AZP_TOKEN environment variable" exit 1 fi

AZP_TOKEN_FILE="/azp/.token" echo -n "${AZP_TOKEN}" > "${AZP_TOKEN_FILE}" fi

unset AZP_TOKEN

if [ -n "${AZP_WORK}" ]; then mkdir -p "${AZP_WORK}" fi

cleanup() { trap "" EXIT

if [ -e ./config.sh ]; then print_header "Cleanup. Removing Azure Pipelines agent..."

# If the agent has some running jobs, the configuration removal process will fail.
# So, give it some time to finish the job.
while true; do
  ./config.sh remove --unattended --auth "PAT" --token $(cat "${AZP_TOKEN_FILE}") && break

  echo "Retrying in 30 seconds..."
  sleep 30
done

fi }

print_header() { lightcyan="\033[1;36m" nocolor="\033[0m" echo -e "\n${lightcyan}$1${nocolor}\n" }

Let the agent ignore the token env variables

export VSO_AGENT_IGNORE="AZP_TOKEN,AZP_TOKEN_FILE"

print_header "1. Determining matching Azure Pipelines agent..."

AZP_AGENT_PACKAGES=$(curl -LsS
-u user:$(cat "${AZP_TOKEN_FILE}")
-H "Accept:application/json;"
"${AZP_URL}/_apis/distributedtask/packages/agent?platform=${TARGETARCH}&top=1")

AZP_AGENT_PACKAGE_LATEST_URL=$(echo "${AZP_AGENT_PACKAGES}" | jq -r ".value[0].downloadUrl")

if [ -z "${AZP_AGENT_PACKAGE_LATEST_URL}" -o "${AZP_AGENT_PACKAGE_LATEST_URL}" == "null" ]; then echo 1>&2 "error: could not determine a matching Azure Pipelines agent" echo 1>&2 "check that account "${AZP_URL}" is correct and the token is valid for that account" exit 1 fi

print_header "2. Downloading and extracting Azure Pipelines agent..."

curl -LsS "${AZP_AGENT_PACKAGE_LATEST_URL}" | tar -xz & wait $!

source ./env.sh

trap "cleanup; exit 0" EXIT trap "cleanup; exit 130" INT trap "cleanup; exit 143" TERM

print_header "3. Configuring Azure Pipelines agent..."

./config.sh --unattended
--agent "${AZP_AGENT_NAME:-$(hostname)}"
--url "${AZP_URL}"
--auth "PAT"
--token $(cat "${AZP_TOKEN_FILE}")
--pool "${AZP_POOL:-Default}"
--work "${AZP_WORK:-_work}"
--replace
--acceptTeeEula & wait $!

print_header "4. Running Azure Pipelines agent..."

chmod +x ./run.sh

To be aware of TERM and INT signals call ./run.sh

Running it with the --once flag at the end will shut down the agent after the build is executed

./run.sh "$@" & wait $!

Start Container

Provide the values in the argument. docker run -e AZP_URL="" -e AZP_TOKEN="" -e AZP_POOL="" -e AZP_AGENT_NAME="Docker Agent - Linux" --name "azp-agent-linux" sharadchhetri/azp-agent-linux:latest

Tag summary

Content type

Image

Digest

sha256:dc08c0107

Size

525.1 MB

Last updated

about 2 years ago

docker pull sharadchhetri/azp-agent-linux