diff --git a/Jenkinsfile b/Jenkinsfile index 5e637637a..6ada015aa 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -122,10 +122,11 @@ for (int i = 0; i < splits.size(); i++) { retryCounts = retryCounts + 1 // increment the retry count before allocating a node in case it fails node(nodeLabel) { checkout scm - def image = skipImageBuild ? docker.image('jenkins/ath') : docker.build('jenkins/ath', '--build-arg uid="$(id -u)" --build-arg gid="$(id -g)" --build-arg dockergid="$(getent group docker | cut -d: -f3)" ./src/main/resources/ath-container/') + def image = skipImageBuild ? docker.image('jenkins/ath') : docker.build('jenkins/ath', '--build-arg uid="$(id -u)" --build-arg gid="$(id -g)" ./src/main/resources/ath-container/') sh 'mkdir -p target/ath-reports && chmod a+rwx target/ath-reports' def cwd = pwd() - image.inside("-v /var/run/docker.sock:/var/run/docker.sock -v '${cwd}/target/ath-reports:/reports:rw' --shm-size 2g") { + def dockergid = sh label: 'get docker group', returnStdout: true, script: 'getent group docker | cut -d: -f3' + image.inside("--group-add ${dockergid} -v /var/run/docker.sock:/var/run/docker.sock -v '${cwd}/target/ath-reports:/reports:rw' --shm-size 2g") { def exclusions = splits.get(index).join('\n') writeFile file: 'excludes.txt', text: exclusions infra.withArtifactCachingProxy { diff --git a/ath-container.sh b/ath-container.sh index 836c21eaf..df015a197 100755 --- a/ath-container.sh +++ b/ath-container.sh @@ -26,6 +26,9 @@ docker build \ "$DIR/src/main/resources/ath-container" \ -t "$tag" +# obtain the groupId to grant to access the docker socket +dockergid=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ubuntu:noble stat -c %g /var/run/docker.sock) + docker run \ --interactive \ --tty \ @@ -34,6 +37,7 @@ docker run \ --user ath-user \ --workdir /home/ath-user/sources \ --shm-size 2g \ + --group-add ${dockergid} \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$(pwd):/home/ath-user/sources" \ -v "${HOME}/.m2/repository:/home/ath-user/.m2/repository" \ diff --git a/pom.xml b/pom.xml index cb9b72396..255f14902 100644 --- a/pom.xml +++ b/pom.xml @@ -351,7 +351,7 @@ io.netty netty-bom - 4.1.112.Final + 4.1.113.Final pom import diff --git a/src/main/resources/ath-container/Dockerfile b/src/main/resources/ath-container/Dockerfile index 6f19931f5..ab34cf3c2 100644 --- a/src/main/resources/ath-container/Dockerfile +++ b/src/main/resources/ath-container/Dockerfile @@ -37,16 +37,9 @@ RUN install -m 0755 -d /etc/apt/keyrings \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# Despite the docker SUID hack below, test-containers accesses /var/run/docker.sock directly and so we can not rely on the SUID hack. -# Rather take the docker user group as an arg and make the ath-user a member of that group -# we retain the suid workaround as this method requires a local build of the container -# we need to do this before we install docker so that any files have the correct permission -ARG dockergid=1002 -RUN groupadd docker -g $dockergid - # Docker installation according to https://docs.docker.com/engine/install/ubuntu/ ARG DOCKER_BUILDX_VERSION=0.16.2 -ARG DOCKER_VERSION=27.1.2 +ARG DOCKER_VERSION=27.2.0 RUN install -m 0755 -d /etc/apt/keyrings \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \ && printf 'deb [arch=%s signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu %s stable\n' "$(dpkg --print-architecture)" "$(lsb_release -cs)" > /etc/apt/sources.list.d/docker.list \ @@ -91,13 +84,7 @@ EXPOSE 5942 RUN deluser --remove-home ubuntu \ && groupadd ath-user -g $gid \ - && useradd ath-user -l -c 'ATH User' -u $uid -g $gid -G docker -m -d /home/ath-user -s /bin/bash - -# Set SUID and SGID for docker binary so it can communicate with mapped socket its uid:gid we can not control. This alternative -# approach is used as adding ath-user to the group of /var/run/docker.sock is a build time option and any published container may -# not match what is needed, and changing this at runtime would require root permission we do not -# have in ENTRYPOINT as the container is started as ath-user. -RUN chmod ug+s /usr/bin/docker* + && useradd ath-user -l -c 'ATH User' -u $uid -g $gid -m -d /home/ath-user -s /bin/bash # Give permission to modify the alternatives links to change the java version in use RUN chmod u+s "$(which update-alternatives)"