Конвейер Jenkins должен удалить контейнер на удаленном демоне после развертывания, я хочу, чтобы он работал
Я пытаюсь создать развертывание моего кода, используя конвейер jenkins, а также используя демон удаленного докера для развертывания. все работает, но конвейер jenkins останавливает и удаляет все контейнеры после завершения сценария конвейера. сервер запускается всего на 10 секунд после того, как этот контейнер останавливается и удаляется.
stage {
steps {
script {
docker.withServer('tcp://10.10.10.10:2375') {
docker.withRegistry('https://registry.my.com/','jenkins-registry') {
docker.image('registry.my.com/image-my/my:latest').withRun(' -p 9090:80 -i -t --name harpal ') {
sh 'docker ps -a'
}
}
}
}
}
выход
[Flights-Docker-POC] Running shell script
+ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a4c5094a8d2 registry.my.com/image-my/my:latest "/usr/bin/supervisord" 6 hours ago Up Less than a second 0.0.0.0:9090->80/tcp harpal
[Pipeline] sh
[Flights-Docker-POC] Running shell script
+ docker stop 6a4c5094a8d22179b364ee2d3b97e998a2c13e8b136c55816c0d8f838c17248b
6a4c5094a8d22179b364ee2d3b97e998a2c13e8b136c55816c0d8f838c17248b
+ docker rm -f 6a4c5094a8d22179b364ee2d3b97e998a2c13e8b136c55816c0d8f838c17248b
6a4c5094a8d22179b364ee2d3b97e998a2c13e8b136c55816c0d8f838c17248b
2 ответа
got the answer for it.it wasn't issue related to entry point in my image
was suppose to use image.run() method instead of withRun(), withRun() method internally calls run() method and stops container in finally block of its implementation.
public <V> V withRun(String args = '', Closure<V> body) {
docker.node {
Container c = run(args)
try {
body.call(c)
} finally {
c.stop()
}
}
}
btw thank you guys for help.
script was supposed to be like.
stage {
steps {
script {
docker.withServer('tcp://10.10.10.10:2375') {
docker.withRegistry('https://registry.my.com/','jenkins-registry') {
docker.image('registry.my.com/image-my/my:latest').run(' -p 9090:80 -i -t --name harpal ')
}
}
}
}
Я не верю, что есть способ сохранить его с помощью плагина Docker класса Groovy, он предназначен для удаления контейнера после запуска.
Если вы просто пытаетесь запустить Docker-контейнеры из Jenkins, просто используйте команды оболочки для
sh 'docker run -p 9090:80 -i -t --name harpal registry.my.com/image-my/my:latest '
Если вы пытаетесь сохранить контейнер живым, чтобы отладить его и осмотреться, я обычно добавляю
sh 'sleep 30m'
Затем перейдите к машине Docker и осмотрите контейнер с
docker exec -it <ContainerID> bash