Как установить и ссылаться на переменную в файле Jenkins
У меня есть декларативный сценарий конвейера для моего проекта с несколькими каналами, в котором я хотел бы прочитать текстовый файл и сохранить результат в виде строковой переменной, доступ к которой будет получен позже. Используя генератор фрагментов, я попытался сделать что-то вроде этого:
filename = readFile 'output.txt'
Для которого filename
будет моей строкой.
Я получаю ошибку на выходе консоли Jenkins:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 30: Expected a step @ line 30, column 5.
filename = readFile 'output.txt'
Нужно ли использовать шаг withEnv
для установки вывода readFile
в переменную окружения Jenkins? Если да, то как?
благодаря
Ответы
Ответ 1
Ошибка связана с тем, что вам разрешено использовать шаги трубопровода внутри директивы steps
. Один из обходных путей, который, как я знаю, - это использовать шаг script
и обернуть произвольный сценарий конвейера внутри него и сохранить результат в переменной среды, чтобы он мог использоваться позже.
Итак, в вашем случае:
pipeline {
agent any
stages {
stage("foo") {
steps {
script {
env.FILENAME = readFile 'output.txt'
}
echo "${env.FILENAME}"
}
}
}
}
Ответ 2
Согласно документации, вы также можете установить глобальные переменные среды, если позже вы захотите использовать значение переменной в других частях вашего скрипта. В вашем случае это будет установка его в корневой конвейер:
pipeline {
...
environment {
FILENAME = readFile ...
}
...
}
Ответ 3
Мы обошли это, добавляя функции к шагу environment
, то есть:
environment {
ENVIRONMENT_NAME = defineEnvironment()
}
...
def defineEnvironment() {
def branchName = "${env.BRANCH_NAME}"
if (branchName == "master") {
return 'staging'
}
else {
return 'test'
}
}
Ответ 4
Полный пример для сценария:
stage('Build'){
withEnv(["GOPATH=/ws","PATH=/ws/bin:${env.PATH}"]) {
sh 'bash build.sh'
}
}