如何在Jenkins中声明全局变量,并在每个项目中的MSBuild任务中使用它

如何在Jenkins中声明全局变量,并在每个项目中的MSBuild任务中使用它,jenkins,msbuild,build-automation,Jenkins,Msbuild,Build Automation,我正在将我们的CI平台从CruiseControl转换为Jenkins,但似乎无法找到一些似乎应该相对简单的方法(免责声明-我不是CI或构建自动化专家,但这被抛到了我的膝上,我觉得很有趣) 在CruiseControl中,我能够声明如下变量: <cb:define rootdir="J:\SOURCES\" /> <cb:define logdir="J:\SOURCES\buildlogs" /> <cb:define iisdir="J:\IIS\" />

我正在将我们的CI平台从CruiseControl转换为Jenkins,但似乎无法找到一些似乎应该相对简单的方法(免责声明-我不是CI或构建自动化专家,但这被抛到了我的膝上,我觉得很有趣)

在CruiseControl中,我能够声明如下变量:

<cb:define rootdir="J:\SOURCES\" />
<cb:define logdir="J:\SOURCES\buildlogs" />
<cb:define iisdir="J:\IIS\" />
<cb:define artifacts="artifacts\" />
OutDir="${IIS_DIR}\ProjectName\bin\\";WebProjectOutputDir="${ITEM_ROOTDIR}\ProjectName\\"
IIS目录是硬编码的。我需要更像这样的东西:

<cb:define rootdir="J:\SOURCES\" />
<cb:define logdir="J:\SOURCES\buildlogs" />
<cb:define iisdir="J:\IIS\" />
<cb:define artifacts="artifacts\" />
OutDir="${IIS_DIR}\ProjectName\bin\\";WebProjectOutputDir="${ITEM_ROOTDIR}\ProjectName\\"

有办法吗?我尝试了配置切片插件,它很有用,但从我所看到的来看并不适合这种需要。对于全局变量,您需要。这允许您(除其他外)在全局(节点)级别、作业级别或作为一个步骤设置变量。您可以直接设置变量,也可以从属性文件或脚本设置变量

一旦设置好,这些变量将作为环境变量提供给Jenkins的其余部分及其步骤(在范围内)

对于向MSBuild传递参数,在配置MSBuild步骤时,有一个选项可以传递格式为
/p:Param=Value的“命令行参数”。

“值”可以是环境变量。在Windows环境中,您可以将其引用为%myvar%


因此,如果您使用envirect配置一个全局的
global\u-IIS\u-DIR=C:\path\to\IIS
,那么您可以在命令行上使用
/p:IIS\u-DIR=%global\u-IIS\u-DIR%

使用内置的Jenkins功能执行此操作:

然后需要展开变量。实际上,这取决于你在哪里使用它


例如:“执行windows批处理命令”生成步骤的
%MSBuild%
%IIS\u DIR%
。其他构建步骤(和插件)可能会以不同的方式使用它。

顺便说一句,对shell使用
${GIT_BRANCH}