Merge pull request #1 from Cars-Commerce-Cloud/feat/add-ubuntu-24.04-runner-image
Added custom Dockerfile to build an Ubuntu runner image v24.04 with required custom utils
This commit is contained in:
commit
62245caf58
|
|
@ -0,0 +1,127 @@
|
|||
FROM ubuntu:24.04
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
ARG DOCKER_GROUP_GID=121
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Core dependencies + Git
|
||||
RUN apt-get update -y \
|
||||
&& apt-get install -y software-properties-common ca-certificates curl wget gnupg \
|
||||
&& add-apt-repository -y ppa:git-core/ppa \
|
||||
&& apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
bash sudo git jq unzip zip tar xz-utils \
|
||||
iproute2 dnsutils tzdata \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Locale support: en_US.UTF-8
|
||||
RUN apt-get update -y && apt-get install -y --no-install-recommends locales \
|
||||
&& locale-gen en_US.UTF-8 \
|
||||
&& update-locale LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 \
|
||||
&& echo 'LANG=en_US.UTF-8' >> /etc/environment \
|
||||
&& echo 'LC_ALL=en_US.UTF-8' >> /etc/environment \
|
||||
&& echo 'LANGUAGE=en_US.UTF-8' >> /etc/environment \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV LANG=en_US.UTF-8 \
|
||||
LANGUAGE=en_US.UTF-8 \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
# git-lfs
|
||||
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash \
|
||||
&& apt-get update -y && apt-get install -y --no-install-recommends git-lfs \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# runner user & docker group
|
||||
RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \
|
||||
&& groupadd docker --gid $DOCKER_GROUP_GID \
|
||||
&& usermod -aG sudo runner \
|
||||
&& usermod -aG docker runner \
|
||||
&& echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \
|
||||
&& echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers
|
||||
|
||||
ENV HOME=/home/runner
|
||||
|
||||
# dumb-init as PID1
|
||||
RUN ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \
|
||||
&& [ "$ARCH" = "arm64" ] && ARCH=aarch64 || true \
|
||||
&& [ "$ARCH" = "amd64" ] && ARCH=x86_64 || true \
|
||||
&& curl -fsSL -o /usr/bin/dumb-init \
|
||||
https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_${ARCH} \
|
||||
&& chmod +x /usr/bin/dumb-init
|
||||
|
||||
ENV RUNNER_ASSETS_DIR=/runnertmp
|
||||
RUN ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \
|
||||
&& [ "$ARCH" = "amd64" ] || [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "i386" ] && ARCH=x64 || true \
|
||||
&& mkdir -p "$RUNNER_ASSETS_DIR" \
|
||||
&& cd "$RUNNER_ASSETS_DIR" \
|
||||
&& curl -fsSL -o runner.tar.gz "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCH}-${RUNNER_VERSION}.tar.gz" \
|
||||
&& tar xzf runner.tar.gz && rm runner.tar.gz \
|
||||
&& ./bin/installdependencies.sh \
|
||||
&& mv ./externals ./externalstmp \
|
||||
&& apt-get update -y && apt-get install -y --no-install-recommends libyaml-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Toolcache dirs + envs (both)
|
||||
ENV RUNNER_TOOL_CACHE=/opt/hostedtoolcache
|
||||
ENV AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache
|
||||
RUN mkdir -p /opt/hostedtoolcache \
|
||||
&& chgrp docker /opt/hostedtoolcache \
|
||||
&& chmod g+rwx /opt/hostedtoolcache
|
||||
|
||||
# Runner container hooks (K8s)
|
||||
ENV RUNNER_CONTAINER_HOOKS=/runnertmp/k8s
|
||||
RUN cd "$RUNNER_ASSETS_DIR" \
|
||||
&& curl -fsSL -o runner-container-hooks.zip \
|
||||
"https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip" \
|
||||
&& unzip -q runner-container-hooks.zip -d ./k8s \
|
||||
&& rm -f runner-container-hooks.zip
|
||||
|
||||
# Docker CLI + compose plugin (client only; DinD sidecar provides daemon)
|
||||
RUN set -eux; \
|
||||
ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2); \
|
||||
[ "$ARCH" = "arm64" ] && DARCH=aarch64 || true; \
|
||||
[ "$ARCH" = "amd64" ] && DARCH=x86_64 || true; \
|
||||
curl -fsSL -o docker.tgz "https://download.docker.com/linux/static/${CHANNEL}/${DARCH}/docker-${DOCKER_VERSION}.tgz"; \
|
||||
tar -xzf docker.tgz; install -m755 docker/docker /usr/bin/docker; rm -rf docker docker.tgz; \
|
||||
mkdir -p /usr/libexec/docker/cli-plugins; \
|
||||
curl -fsSL -o /usr/libexec/docker/cli-plugins/docker-compose \
|
||||
"https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${DARCH}"; \
|
||||
chmod +x /usr/libexec/docker/cli-plugins/docker-compose; \
|
||||
ln -sf /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose; \
|
||||
docker compose version >/dev/null
|
||||
|
||||
# add 'make' and build tools
|
||||
RUN apt-get update -y \
|
||||
&& apt-get install -y software-properties-common ca-certificates curl wget gnupg \
|
||||
&& add-apt-repository -y ppa:git-core/ppa \
|
||||
&& apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
bash sudo git git-lfs jq unzip zip tar xz-utils \
|
||||
iproute2 dnsutils tzdata \
|
||||
make \
|
||||
build-essential pkg-config \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Your scripts and hooks
|
||||
COPY entrypoint.sh startup.sh logger.sh graceful-stop.sh update-status /usr/bin/
|
||||
COPY docker-shim.sh /usr/local/bin/docker
|
||||
COPY hooks /etc/arc/hooks/
|
||||
|
||||
# PATH & ImageOS
|
||||
ENV PATH="${PATH}:${HOME}/.local/bin/"
|
||||
ENV ImageOS=ubuntu24
|
||||
RUN echo "PATH=${PATH}" > /etc/environment && echo "ImageOS=${ImageOS}" >> /etc/environment
|
||||
|
||||
USER runner
|
||||
|
||||
ENTRYPOINT ["/usr/bin/dumb-init","--"]
|
||||
CMD ["entrypoint.sh"]
|
||||
Loading…
Reference in New Issue