J'ai un Jenkins fonctionnant en tant que conteneur Docker, maintenant je veux construire une image Docker en utilisant un pipeline, mais le conteneur Jenkins indique toujours à Docker non trouvé.
[simple-tdd-pipeline] Running Shell script
+ docker build -t simple-tdd .
/var/jenkins_home/workspace/simple-tdd-pipeline@tmp/durable-
ebc35179/script.sh: 2: /var/jenkins_home/workspace/simple-tdd-
pipeline@tmp/durable-ebc35179/script.sh: docker: not found
Voici comment je lance mon image Jenkins:
docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v
/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock
jenkins
Et l'image DockerFile de Jenkins est: https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile
Vous manquez le client docker. Installez-le comme ceci dans Dockerfile:
RUN curl -fsSLO https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz \
&& tar xzvf docker-17.04.0-ce.tgz \
&& mv docker/docker /usr/local/bin \
&& rm -r docker docker-17.04.0-ce.tgz
Edit: mai 2018
Comme indiqué par Guillaume Husta , ce article de blog de jpetazzo décourage cette technique:
Les anciennes versions de ce message conseillaient à
bind-mount
le binaire docker de l'hôte vers le conteneur. Ce n'est plus fiable, car le moteur Docker n'est plus distribué sous forme de bibliothèques (presque) statiques.
Le client Docker doit être installé à l'intérieur d'un conteneur comme décrit ici . De plus, jenkins
utilisateur doit être dans le groupe docker
, donc exécutez ce qui suit:
$ docker exec -it -u root my-jenkins /bin/bash
# usermod -aG docker jenkins
et enfin redémarrer my-jenkins
récipient.
Réponse originale:
Vous pouvez utiliser le docker engine
comme dans ce @ Adrian Mouat blog article .
docker run -d \
--name my-jenkins \
-v /var/jenkins_home:~/.jenkins \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 jenkins
Cela évite d'avoir plusieurs versions du moteur docker sur l'hôte et le conteneur jenkins.
Dans votre interface Jenkins, allez à "Gérer la configuration Jenkins/Global Tool"
Faites ensuite défiler la page jusqu'à Installations Docker et cliquez sur "Ajouter Docker" . Donnez-lui un nom comme "myDocker"
Assurez-vous de cocher la case qui dit "Installer automatiquement" . Cliquez sur "Ajouter un programme d'installation" et sélectionnez "Télécharger sur docker.com" . Laissez "dernier" dans la version Docker. Assurez-vous de cliquer sur Enregistrer.
Dans votre fichier Jenkins, ajoutez l'étape suivante avant d'exécuter des commandes Docker:
stage('Initialize'){
def dockerHome = tool 'myDocker'
env.PATH = "${dockerHome}/bin:${env.PATH}"
}
docker run -d \
--group-add docker \
-v $(pwd)/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-p 8080:8080 -p 50000:50000 \
jenkins/jenkins:lts
Ajoutez simplement l'option --group-add docker
lors de l'exécution de docker.