如何在同一管道中的批处理脚本中使用Jenkins管道属性定义的属性?

时间:2017-10-27 11:37:55

标签: jenkins-pipeline

我已经使用片段生成器定义了属性,下面是jenkinsfile的部分。

properties([[$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false], parameters([string(defaultValue: 'SNAPSHOT', description: '', name: 'BUILD_TYPE'), string(defaultValue: '5.7.0', description: '', name: 'BRANCH_VERSION')]), pipelineTriggers([])])

当我使用" echo param"回显上面定义的属性时或者" echo env.param"这些参数已正确解析。

以下内容已正确解决:

echo BUILD_TYPE
echo BRANCH_VERSION
echo env.BUILD_TYPE
echo env.BRANCH_VERSION

但是,我需要在批处理脚本中使用这些参数,这是同一个jenkins文件的一部分,但这些参数在那里没有解析。下面是jenkinsfile的批处理部分

bat '''echo off
echo "flag:  env.BUILD_TYPE"
echo "flag:  env.BRANCH_VERSION"'''

1 个答案:

答案 0 :(得分:0)

由于批处理脚本是Windows CMD脚本,必须遵循Windows CMD的语法。

即。这意味着对CMD Interpreter处理的环境变量使用正确的变量扩展。

CMD脚本通过将环境变量包装在百分号中(或启用延迟扩展时的感叹号(!))来扩展环境变量。

例如:Jenkins设置环境变量“BUILD_TYPE”CMD使用“%BUILD_TYPE%”扩展此值

如果它位于独立的CMD文件中,它将如下所示:

REM Script: Jenkinsbat.cmd
@(SETLOCAL
  ECHO OFF
)
echo "flag:  %BUILD_TYPE%"
echo "flag:  %BRANCH_VERSION%"
(ENDLOCAL
  Exit /b
)

Jenkins会通过引用脚本的完整路径来调用它:

bat '''REM  Call Script: Jenkinsbat.cmd
ECHO OFF
CALL "\\URL\Share\Path_to_Bat\Jenkinsbat.cmd"'''

由于您的批处理脚本是位于Jenkins文件中的代码,因此它应如下所示:

bat '''REM Script: Jenkinsbat.cmd
ECHO OFF
echo "flag:  %BUILD_TYPE%"
echo "flag:  %BRANCH_VERSION%"'''