2016-11-16 2 views
1

У меня есть работа с конвейером Jenkins, где я беру некоторые переменные сборки в качестве входных данных, и если переменные не передаются пользователем, я запускаю скрипт и получаю значение этих переменных , Позже я должен использовать значение этих переменных для запуска других заданий.Изменение переменных groovy внутри исполнятеля оболочки в конвейере Jenkins

Так что мой код выглядит примерно так:

node { 
withCredentials([[$class: 'StringBinding', credentialsId: 'DOCKER_HOST', variable: 'DOCKER_HOST']]) { 

env.T_RELEASE_VERSION = T_RELEASE_VERSION 
env.C_RELEASE_VERSION = C_RELEASE_VERSION 
env.N_RELEASE_VERSION = N_RELEASE_VERSION 
env.F_RELEASE_VERSION = F_RELEASE_VERSION 

.... 

stage concurrency: 1, name: 'consul-get-version' 
sh ''' 
     if [ -z ${T_RELEASE_VERSION} ] 
     then 
      export T_RELEASE_VERSION=$(ruby common/consul/services_prod_version.rb prod_t_release_version) 
      aws ecr get-login --region us-east-1 
      aws ecr list-images --repository-name t-server | grep ${T_RELEASE_VERSION} 
     else 
      aws ecr get-login --region us-east-1 
      aws ecr list-images --repository-name t-server | grep ${T_RELEASE_VERSION} 
     fi 

....... 


    't-integ-pipeline' : { 
build job: 't-integ-pipeline', parameters: [[$class: 'StringParameterValue', name: 'RELEASE_VERSION', value: T_RELEASE_VERSION], 
              [$class: 'BooleanParameterValue', name: 'FASTFORWARD_TO_DEPLOY', value: true]] 
}, 

...... 

Проблема, когда я запуская основную работу с пустым T_RELEASE_VERSION, ребенок строить работу т-МЭГ-конвейер запускается с пустым значением из Параметр RELEASE_VERSION.

Как изменить параметр groovy внутри исполнятеля оболочки, а затем получить его снова в groovy-исполнителе с измененным значением?

ответ

0

При использовании env-injection можно было сохранить значения в файлах свойств и ввести их в качестве переменных среды. Не удалось найти какой-либо простой способ сделать это в конвейере.

В любом случае, это решение, сохранить значения в файле и прочитать файл из конвейера. Затем используйте eval или аналогичный, чтобы преобразовать его в воспринимаемый объект (хеш).

Eval.me пример: Serializing groovy map to string with quotes

Запись/Чтение подать пример: https://wilsonmar.github.io/jenkins2-pipeline/

EDIT Manish решение для читаемости:

sh 'ruby common/consul/services_prod_version.rb prod_n_release_version > status' 
N_RELEASE_VERSION_NEW = readFile('status').trim() 
sh 'ruby common/consul/services_prod_version.rb prod_q_release_version > status' 
Q_RELEASE_VERSION_NEW = readFile('status').trim() 
+0

Я использовал ваше предложение и придумал что-то вроде это: sh 'ruby common/consul/services_prod_version.rb prod_n_release_version> status' N_RELEASE_VERSION_NEW = readFile ('status'). trim() sh 'ruby common/consul/services_prod_version.rb prod_q_release_version> status' Q_RELEASE_VERSION_NEW = readFile ('status'). Trim() –

+1

Отлично, добавив способ, который вы решили для моего ответа, только для удобства чтения – MaTePe

Смежные вопросы