Конвейер 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
Другие вопросы по тегам