Вы можете достичь этого, но не с помощью синтаксиса docker {}
, потому что
Выполните конвейер или этап с заданным контейнером, который будет динамически подготовлен
У вас есть несколько других опций, таких как label
и args
, но ни одна из опций не помешает идее плагина: запустите контейнер, выполните ваши операции, остановите и удалите контейнер.
Чтобы переопределить это поведение, вам придется выполнить действия, выполняемые плагином jenkins:
- выполнить непосредственно клиентскую программу docker в вашем конвейере (необходимо иметь клиент docker на Машина Дженкинса)
- написать команды для выполнения в образе
Что-то вроде:
stage('Docker execution') {
steps {
sh "CONTAINER_ID= $(docker run ubuntu:fooVersion)"
sh "docker exec -ti $CONTAINER_ID commandToExecuteOnContainer"
}
}
Обратите внимание, что он будет создавать новые образы Ubuntu при каждом выполнении конвейера. Так что даже в целях отладки он может быстро превратиться в беспорядок.
В целях отладки я думаю, что вызывать функцию ожидания конвейера Jenkins проще и удобнее.
Например:
steps {
// ....
sleep(time:15,unit:"MINUTES")
}
Если указанного c времени недостаточно, поскольку вам необходимо проверить состояние контейнера, возможно, через несколько часов или дней, вы можете сохранить его состояние, используя подкоманду commit
из docker, например docker commit myContainerId
.
Вы можете выполнить эту команду непосредственно в конвейере Jenkins (почему бы не определить параметр отладки в качестве входных данных конвейера) или выполнить ее непосредственно на компьютере, где клиент docker обращается к реестру docker используется трубопроводом.