2016-07-14 57 views
0

我在Jenkins CI服務器上正在使用一些構建腳本。爲了保持組織性,我傾向於將作業中的每個「Execute Shell」部分縮小並隔離在範圍內。在Jenkins的「Execute Shell」部分之間維護配置變量

比方說,我正在建立一個字符串值,我希望以後在我的工作中的各個地方使用。 (例如與標籤,日期格式等相關的標籤,消息的名字......)

Execute Shell #1 
# Utilizing Multiple Lines and temporary variables for readability 
tagName="$tagName_Sub1 $tagName_Sub2 $tagName_Sub3" 

Execute Shell #2 
# Build Script - tagName is an argument to my build script 
run build_job $tagName 

Execute Shell #3 
# Tag Git 
git tag -a $tagName 

Execute Shell #4 
# Something else 
echo "Hello World, $tagName" 
+0

它看起來像你真正想要的是一個數組,而不是一個字符串。考慮*定義一個數組:'tagNames =(「$ tagName_Sub1」「$ tagName_Sub2」「$ tagName_Sub3」)',然後用'「{{tagNames [@]}''適當地使用它。 –

+0

否則,當您嘗試使用帶有文字空間的標籤名稱時,會出現非常不愉快的時間,並且非空格字符已臨時添加到IFS中,或者可以解釋爲glob匹配文件系統內容。 –

+0

...參見http://mywiki.wooledge.org/BashFAQ/050 - 該處的警告和建議適用於任何情況,其中'$ foo'(不包括雙引號)被用作命令行生成的一部分。 –

回答

1

不存在一般的答案:一是可以變量只輸出直接的子過程,而不直接合作父母程序;然而,有一個建立目錄爲你提供了一個共享的商店,可以協同使用你的兄弟姐妹。


因此,您可以使用declare -p生成腳本分量,採購時,將重新創建一個變量,因爲它的前殼實例存在:

declare -p tagName >vars # optionally, you can put more than one variable name here 

......然後,在其他代碼:

source vars # import all variables written to the file 

使用declare -p序列化地位的不只是內容上(適當地引用或逃到安全地讀回),但也是一個變量是否已經輸出;無論是數組還是常規字符串;是否將其標記爲整數特殊處理;並以其他方式確保您獲得的內容真正是您保存的內容。

確保所涉及的所有腳本實際上都使用/bin/bash運行,而不是/bin/sh;這是特定於bash的語法。

+0

謝謝,這個工作很好。我將所有內容都聲明爲「vars」,並將「源變量」添加到所有Execute Shell塊的頂部,並且一切正常。 – FishStix