Nous avons un fichier Jenkins qui utilise le plugin docker pour exécuter un script à l'intérieur d'un conteneur donné. Cela fonctionne bien pour certaines images, mais échoue immédiatement avec un code de sortie -1 sur d'autres. Nous avons réduit l'erreur à un simple sleep
. Voici le fichier Jenkins:
node("docker") {
def wheezy_image = docker.image("pyca/cryptography-runner-wheezy")
wheezy_image.pull()
wheezy_image.inside {
sh """sleep 120"""
}
}
Et voici la sortie jenkins
+ docker pull pyca/cryptography-runner-wheezy
Using default tag: latest
latest: Pulling from pyca/cryptography-runner-wheezy
Digest: sha256:ff5d9f661b05d831ace3811eec9f034fed7994279ff2307695a2cb7c32d6fa11
Status: Image is up to date for pyca/cryptography-runner-wheezy:latest
[Pipeline] sh
[3525-VE2ETALXLYB7VN3] Running Shell script
+ docker inspect -f . pyca/cryptography-runner-wheezy
.
[Pipeline] withDockerContainer
$ docker run -t -d -u 1000:1000 -w /var/jenkins_home/workspace/3525-VE2ETALXLYB7VN3 --volumes-from 1382a2e208dd5575acd26f11678855282fc854319096de60cef6818ea279f25f -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat pyca/cryptography-runner-wheezy
[Pipeline] {
[Pipeline] sh
[3525-VE2ETALXLYB7VN3] Running Shell script
+ sleep 120
[Pipeline] }
$ docker stop --time=1 887db8989e03a10dd89132b1ac6e18261ee4a49e6afe8b0c5568326b6c023654
$ docker rm -f 887db8989e03a10dd89132b1ac6e18261ee4a49e6afe8b0c5568326b6c023654
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
GitHub has been notified of this commit’s build result
ERROR: script returned exit code -1
Finished: FAILURE
Fait intéressant, si le sommeil est inférieur à 1 seconde, cela passe (mais le sommeil de 120 secondes fonctionne très bien sur la plupart des autres images).
Pour référence, voici un image jessie qui fonctionne, et un image sifflante qui ne fonctionne pas.
Est-ce que quelqu'un sait ce qui pourrait se passer ici?
Il semble que votre image ne soit pas équipée de ps
. Je viens de prendre la base Debian et j'ai pu répliquer que cela ne fonctionnerait pas. Ps installé, et cela a fonctionné. Vous pouvez également utiliser la fonction withRun et cela fonctionne. Voici mon fichier Jenkins:
node("docker") {
// Weezy that also ran... apt-get update && apt-get install -y procps
def wheezy_image = docker.image("smalone/weezy-ps-test")
wheezy_image.pull()
wheezy_image.inside {
sh 'sleep 2'
}
// Base image for weezy-ps-test that has no ps installed using withRun() instead of inside()
wheezy_image = docker.image("debian:wheezy")
wheezy_image.pull()
wheezy_image.withRun { c ->
sh 'sleep 2'
}
// Base image for weezy-ps-test that has no ps installed
wheezy_image = docker.image("debian:wheezy")
wheezy_image.pull()
wheezy_image.inside {
sh 'sleep 2'
}
}
J'ouvrirai un ticket sur le plugin de pipeline Docker, s'il n'en existe pas.
EDIT: Il y avait un ticket ouvert, mais ils n'avaient pas encore trouvé la cause première. Voir: https://issues.jenkins-ci.org/browse/JENKINS-40101 pour suivre l'état de ce problème!