2017-03-17 77 views
0

我想定义一个Jenkins构建参数,通常由用户以特定方式输入。一个:B:C:在使用之前操纵Jenkins作业参数

为了使用该参数必须通过简单的函数,如下所示(在外壳脚本)

if [ "" != "${SUBPROJ}" ] 
then 
    CLEAN=`echo ":${SUBPROJ}:${CLEAN}" | sed 's|/|:|g' ` 
    END_TARGET=`echo ":${SUBPROJ}:${END_TARGET}" | sed 's|/|:|g' ` 
fi 

这将转换像A/B/C被转化在使用参数之前,Jenkins如何进行这种转换?运行shell脚本步骤不会更改原始参数。

我看着dynamic parameter plugin但似乎并没有允许输入从所提供的参数

回答

1

变量您创建和更改特定buildstep的作用域只是到构建步骤。如果您想在脚本步骤之后将编辑的变量公开到构建步骤,则需要将该变量放回到环境中。我通常通过将值写入文件作为关键值对并使用EnvInject Plugin来完成此操作。

以你的例子'CLEAN'变量现在成立:a:b:c:作为脚本的下一步,你需要将它写入一个文件(我将调用newEnvironmentVariables.txt),如果你想更换SUBPROJ字符串,那么你应该这样做:

if [ "" != "${SUBPROJ}" ] 
then 
    CLEAN=`echo ":${SUBPROJ}:${CLEAN}" | sed 's|/|:|g' ` 
    echo "CLEAN=${CLEAN}" > ${WORKSPACE}\newEnvironmentVariables.txt 
    END_TARGET=`echo ":${SUBPROJ}:${END_TARGET}" | sed 's|/|:|g' ` 
    echo "END_TARGET=${END_TARGET}" >> ${WORKSPACE}\newEnvironmentVariables.txt 
fi 

这将产生一个包含两行(我假设干净END_TARGET是空的,开始用)的文本文件。

CLEAN =:A:B:C:
END_TARGET =:A:B:C:

添加Envinject立即生成步骤脚本之后和路径放置在文件属性文件路径字段。如果您的脚本在您的工作区的根目录下运行,则可以使用${WORKSPACE}\newEnvironmentVariables.txt作为您的路径。

这将在您的jenkins构建作业的环境中创建两个新变量,称为CLEAN和END_TARGET,您可以在随后的构建步骤中像其他任何变量一样使用它。如果您想要更改SUBPROJ的值,则将其用作键值对中的一个键。

+0

听起来像envinject会填补账单。谢谢。当我有机会时,我会尝试。 –

+0

这工作,差不多。由于我配置了工作区,只是写入newEnvironmentVariables.txt并没有将它放到我的项目工作区中。为此,我不得不使用$ WORKSPACE env var,并且在预生成步骤中无法访问它。所以我把它作为envinject之前的一个普通构建步骤,然后按预期工作。感谢您的正确解决方案。然后,我想每次都创建一个新的env var文件而不是>>。但足够接近赢得奖品!谢谢你的帮助。 –

+0

嗯,是的,这是有道理的,我们的构建总是删除工作区,并做一个新的结帐。我想我没有考虑>> vs>。很高兴它的工作。 – Tuffwer

相关问题