docker
jenkins
sudo usermod -a -G docker jenkins
Docker Jenkins. , Jenkinsfile
pipeline{agent{dockerfile
pipeline{agent{image
:
pipeline {
agent {
dockerfile {
filename 'Dockerfile.jenkinsAgent'
}
}
stages {
, docker run
, .
- () Docker.
- Docker, Docker-in-Docker, .
- , . ,
docker run
( sudo
).
Docker
Docker- Docker, Docker Dockerfile:
FROM debian:stretch-backports
RUN apt-get -y update && \
apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release \
software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get -y update && \
apt-get -y install \
docker-ce \
docker-ce-cli \
containerd.io
...
Docker
, Jenkins Docker, Docker Docker, . , Jenkins Docker :
pipeline {
agent {
dockerfile {
filename 'Dockerfile.jenkinsAgent'
args '-v /var/run/docker.sock:/var/run/docker.sock'
}
}
UID GID
. . , , - UID GID Docker ( root.docker
). , ( useradd... jenkins
groupadd... docker
Jenkins Docker). jenkins
docker
args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'
Docker jenkins
docker
, Docker, , jenkins
, , , UID GID , , GID docker
, docker build
Dockerfile , Docker:
pipeline {
agent {
dockerfile {
filename 'Dockerfile.jenkinsAgent'
additionalBuildArgs '--build-arg JENKINSUID='id -u jenkins' --build-arg JENKINSGID='id -g jenkins' --build-arg DOCKERGID='stat -c %g /var/run/docker.sock''
args '-v /var/run/docker.sock:/var/run/docker.sock -u jenkins:docker'
}
}
id
UID GID jenkins
stat
Docker.
Dockerfile , jenkins
docker
, groupadd
, groupmod
useradd
:
FROM debian:stretch-backports
ARG JENKINSUID
ARG JENKINSGID
ARG DOCKERGID
...
RUN apt-get -y update && \
apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release \
software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get -y update && \
apt-get -y install \
docker-ce \
docker-ce-cli \
containerd.io
...
RUN groupadd -g ${JENKINSGID} jenkins
RUN groupmod -g ${DOCKERGID} docker
RUN useradd -c "Jenkins user" -g ${JENKINSGID} -G ${DOCKERGID} -M -N -u ${JENKINSUID} jenkins