2016-07-14 299 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

相关问题