2016-11-16 101 views
1

我有一個Jenkins管道作業,我將一些構建變量作爲輸入,並且如果變量未被用戶傳遞,我執行一個腳本並獲取這些變量的值。之後我必須使用這些變量的值來觸發其他工作。在Jenkins管道中更改shell執行程序中的groovy變量

所以我的代碼看起來是這樣的:

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的主要工作,孩子搭建工作T-INTEG流水線被觸發用的空值RELEASE_VERSION參數。

如何更改shell執行程序中的groovy參數,然後使用修改後的值在groovy執行程序中再次訪問它?

回答

0

使用env-inject時,可以將值存儲在屬性文件中,並將它們作爲環境變量注入。找不到任何簡單的方法來做到這一點。

無論如何,這是一個解決方案,將值存儲到文件,並從管道中讀取文件。然後使用eval或類似的將它轉換爲可解析對象(散列)。

Eval.me例如:Serializing groovy map to string with quotes

寫入/讀取到文件例如: https://wilsonmar.github.io/jenkins2-pipeline/

編輯 的可讀性和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>狀態' Q_RELEASE_VERSION_NEW = readFile('status')。trim() –

+1

好極了,爲了提高可讀性,添加了解決問題的方法 – MaTePe

相關問題