Jenkins Groovy将变量传递到并行运行
在下面的Jenkins groovy脚本中,我很难理解如何将一些变量传递到并行运行中:Jenkins Groovy将变量传递到并行运行,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,在下面的Jenkins groovy脚本中,我很难理解如何将一些变量传递到并行运行中: #!/usr/bin/env groovy def call(version, project) { sh '''#!/bin/bash [[ ! -e ${WORKSPACE}/target/rpm/${project}/RPMS/ ]] && mkdir -p ${WORKSPACE}/target/rpm/${project}/RPMS/ (( $(ls ${
#!/usr/bin/env groovy
def call(version, project) {
sh '''#!/bin/bash
[[ ! -e ${WORKSPACE}/target/rpm/${project}/RPMS/ ]] && mkdir -p ${WORKSPACE}/target/rpm/${project}/RPMS/
(( $(ls ${WORKSPACE}/target/rpm/${project}/RPMS/*.rpm | wc -l) != 0 )) && rm ${WORKSPACE}/target/rpm/${project}/RPMS/*.rpm
cd ${WORKSPACE}/scripts/fpm_requirements && bundle install && bundle show fpm
'''
parallel (
"package foo": {
sh '''#!/bin/bash
export PATH=$PATH:~/bin:~/.gem/ruby/gems
cd ${WORKSPACE}/scripts/fpm_requirements
echo Project is ${project}
echo Version is ${version}
echo Iteration is $(echo ${version} | cut -d . -f 3)
'''
},
"package bar": {
sh '''#!/bin/bash
export PATH=$PATH:~/bin:~/.gem/ruby/gems
cd ${WORKSPACE}/scripts/fpm_requirements
echo Project is ${project}
echo Version is ${version}
echo Iteration is $(echo ${version} | cut -d . -f 3)
'''
}
)
}
因此,版本和项目变量在调用的第一个shell中填充,但是当它们到达两个并行运行时,它们不会被拉入
我尝试过几种不同的方法来传递它们,但没有一种有效
有人有任何相关的想法可以帮助您吗?您应该将
'
更改为'
。在Groovy中,单引号/三引号内的字符串不会触发字符串插值,但单引号/三引号内的字符串会触发字符串插值
因此,Shell脚本中的${version}
和${project}
将被视为Shell上下文中的变量,但实际上它们存在于Groovy上下文中
关于Groovy字符串的更多信息,请参见下面的选项2,它更适合您的问题
选项1)使用“
或”
注意:需要在${WORKSPACE}
和$(echo..)
之前退出$
,因为我们希望插值后保留$
选项2)使用'
或'
并将版本
和项目
注入Shell上下文的环境变量中
def call(version, project) {
env.version=version
env.project=project
// Groovy env api used to inject groovy value into environment variable
// so that you can refer groovy value later in shell script
// still use ''' in following code, no need to change
...
您应该将
'
更改为'
。在Groovy中,单引号/三引号内的字符串不会触发字符串插值,但单引号/三引号内的字符串会触发字符串插值
因此,Shell脚本中的${version}
和${project}
将被视为Shell上下文中的变量,但实际上它们存在于Groovy上下文中
关于Groovy字符串的更多信息,请参见下面的选项2,它更适合您的问题
选项1)使用“
或”
注意:需要在${WORKSPACE}
和$(echo..)
之前退出$
,因为我们希望插值后保留$
选项2)使用'
或'
并将版本
和项目
注入Shell上下文的环境变量中
def call(version, project) {
env.version=version
env.project=project
// Groovy env api used to inject groovy value into environment variable
// so that you can refer groovy value later in shell script
// still use ''' in following code, no need to change
...
因此,我尝试了这个方法,但在项目/版本迭代中失败:“命令替换:第9行:意外标记附近的语法错误”表明版本变量为空。我忘了使用
“”“
在第二个shell脚本中,我更新了它。请再试一次。我注意到您使用的shell脚本复杂而冗长,因此我发布了选项2来解决您的问题,这更简单,只需再添加两行代码即可将groovy值注入:version
和project
到环境变量中,通过env.xxx
添加env.version和env.project就是答案。然后脚本继续运行“fpm”,它抛出一些不同的错误,但这完美地回答了问题!因此,我尝试了这个方法,但在项目/版本迭代中失败:“命令替换:第9行:意外标记附近的语法错误”表明版本变量为空。我忘了使用“”“
在第二个shell脚本中,我更新了它。请再试一次。我注意到您使用的shell脚本复杂而冗长,因此我发布了选项2来解决您的问题,这更简单,只需再添加两行代码即可将groovy值注入:version
和project
到环境变量中,通过env.xxx
添加env.version和env.project就是答案。然后脚本继续运行“fpm”,它抛出一些不同的错误,但这完美地回答了问题!