Используя Декларативный конвейер Jenkins , можно легко указать Dockerfile, метку агента, аргументы сборки и запустить аргументы следующим образом:
*Jenkinsfile (Declarative Pipeline)*
agent {
dockerfile {
dir './path/to/dockerfile'
label 'my-label'
additionalBuildArgs '--build-arg version=1.0'
args '-v /tmp:/tmp'
}
}
Я пытаюсь добиться того же, используя скриптовый конвейерный синтаксис. Я нашел способ передать метку агента и запустить аргументы, но не смог передать каталоги и аргументы сборки . В идеале я написал бы что-то вроде этого (метки и аргументы запуска уже работают):
*Jenkinsfile (Scripted Pipeline)*
node ("my-label"){
docker.dockerfile(dir: './path/to/dockerfile', additionalBuildArgs:'--build-arg version=1.0')
.inside('-v /tmp:/tmp') {
\\ add stages here
}
}
Документация показывает, как это можно сделать с помощью существующего docker image, то есть с директивой image
в конвейере.
*Jenkinsfile (Declarative Pipeline)*
pipeline {
agent {
docker { image 'node:7-alpine' }
}
stage('Test') {
//...
}
}
*Jenkinsfile (Scripted Pipeline)*
node {
docker.image('node:7-alpine').inside {
stage('Test') {
//...
}
}
}
Однако синтаксис конвейерного сценария для директивы dockerfile
отсутствует. Обходной путь, который я использую в данный момент, - это создание самого изображения.
node ("my-label"){
def testImage = docker.build("test-image", "./path/to/dockerfile", "--build-arg v1.0")
testImage.inside('-v /tmp:/tmp') {
sh 'echo test'
}
}
Любая помощь очень ценится!