/ / Як передати змінну до докера в аргументах Jenkins:

Як пройти в змінну для докерних арґзів у декларативному трубопроводі Денкінс - докер, дженкінс, денкінз-декларативний трубопровід

Я створюю Jenkins декларативну роботу на трубопроводіде я запускаю деякі тести вузлів у контейнері докера, який залежить від зовнішнього контейнера db. Я створюю унікальну мережу, а потім намагаюся передати мережевий uid як аргумент докера, щоб контейнер докера мав доступ до вказаного контейнера db:

def myNetwork = dbNetwork
stage("test-ci") {
agent {
docker {
reuseNode true
image "myrepo/my-nodejs"
label "docker"
args "--net ${myNetwork}"
}
}
steps {
script {
try {
sh "npm run test-ci"
} catch(err) {
currentBuild.result = "FAILED"
}
}
}
}

Тим не менш, Jenkins висновок показує, що змінна так чи інакше закінчується бути нульовим до того часу докер отримує його: \ t

$ docker run -t -d -u 233:233 --net null -w /home/jenkins/workspace/es_feature_add-db-container- ...

Я зауважив, що приклад демонстрації передачі аргументів використовує одинарні лапки, але мені потрібні подвійні лапки так myNetwork правильно розширюється, але, можливо, це не є конвеєрним шляхом.

Як правильно передати змінну до докера?

EDIT: Після гри навколо трохи більше, я думаю, що це питання сфери, оскільки я успішно в змозі передавати змінні середовища, як env.BUILD_TAG. В основному мені просто потрібна випадкова, гарантована унікальна мережева назва для даної роботи, тому я не маю конфліктів з іншими роботами - env.BUILD_TAG здається, виконує роботу, але я все одно хотів би знати, чому я не можу передати змінну, яку я визначаю в сценарії.

Відповіді:

0 для відповіді № 1

Створіть environment розділ - це шлях до мосту Groovy і в-Jenkins Shell

String SomeVar = "wibble"

pipeline {
...
environment {
// use a Groovy GString here
SomeVar = "$SomeVar"
// mix with the environment in "shell jenkins"
MyBuild = "$SomeVar-$GIT_COMMIT"
}
}
stage(DockerBuild) {
echo "this is a groovy level call - so" +  env.SomeVar  + "will work"
}

Коротше кажучи, ми можемо мати змінну в сегменті Grtoovy, а в ділянці трубопроводу ще доступ до неї в Shell і якщо нам потрібно використовувати дзвінки рівня groovy (зазвичай docker.build), varible має значення env.Varname