C# Jenkins PowerShell插件解析$env:BUILD\u编号

C# Jenkins PowerShell插件解析$env:BUILD\u编号,c#,powershell,jenkins,plugins,cakebuild,C#,Powershell,Jenkins,Plugins,Cakebuild,我正在尝试使用Jenkins上的PowerShell插件来构建我的蛋糕脚本。我想将$env:BUILD_NUMBER解析到Cake脚本中,这在Windows上的PowerShell窗口中运行良好,使用: .\build.ps1 -buildNumber=123 但是当在Jenkins上的PowerShell插件中使用“same”(解析123时Ok)时,它失败了。它没有将$env:BUILD\u NUMBER的值解析为Cake。我用的是: $bn = $env:BUILD_NUMBER; cd

我正在尝试使用Jenkins上的PowerShell插件来构建我的蛋糕脚本。我想将
$env:BUILD_NUMBER
解析到Cake脚本中,这在Windows上的PowerShell窗口中运行良好,使用:

.\build.ps1 -buildNumber=123
但是当在Jenkins上的PowerShell插件中使用“same”(解析123时Ok)时,它失败了。它没有将
$env:BUILD\u NUMBER
的值解析为Cake。我用的是:

$bn = $env:BUILD_NUMBER;
cd D:\_Builds\Al.Common.Std.Interface\SolutionItems\
write-host $bn              //Just at test writing 123 OK
.\build.ps1 -buildNumber=$bn
在cake脚本中,我使用
$bn值
作为NuGet版本号。但我得到了以下错误:

C:\Program Files\dotnet\sdk\2.0.0\NuGet.targets(102,5): error : '1.0.0.$bn' is not a valid version string.

任何想法都是非常受欢迎的

当涉及到环境变量时,最好的解决方案可能是使用现成的别名读取它们

var buildNumber = EnvironmentVariable("BUILD_NUMBER");
也就是说,对于从Jenkins获取构建号,Cake实际上已经提供了一种开箱即用的方法,使用全局可用的属性别名,它提供了一个属性,该属性封装了有关Jenkins环境的所有信息,包括类型化整数

Information("Running on Jenkins {0}, build number: {1}.",
    BuildSystem.Jenkins.IsRunningOnJenkins ? "Yes" : "No",
    BuildSystem.Jenkins.Environment.Build.BuildNumber
);
上面将输出如下内容
在Jenkins上运行是的,版本号:1。
如果在Jenkins上运行,并且
在Jenkins上运行否,版本号:0。
如果没有

现在,如果您仍然想将PowerShell参数作为参数传递给这个问题,那么PowerShell参数的工作方式与其他shell略有不同,我们只包装了最常见的shell。对于使用ScriptArgs参数的
build.ps1
引导程序脚本的其他参数,如下所示:

.\build.ps1 -ScriptArgs "--buildNumber=""$env:BUILD_NUMBER""" 
然后获取这个参数可能看起来像这样

var buildNumber = Argument<int?>("buildNumber", 0);

Information("BuildNumber: {0} ({1})",
    buildNumber, buildNumber.HasValue);
var buildNumber=参数(“buildNumber”,0);
信息(“BuildNumber:{0}({1})”,
buildNumber,buildNumber.HasValue);

如果指定了无效的值,则会输出
BuildNumber:[NULL](False)
,如果存在有效的参数值,则会输出类似
BuildNumber:1(True)
(如果未指定值,则默认为0)。

对于环境变量,也许最好的解决方案是使用Cake开箱即用的别名读取它们

var buildNumber = EnvironmentVariable("BUILD_NUMBER");
也就是说,对于从Jenkins获取构建号,Cake实际上已经提供了一种开箱即用的方法,使用全局可用的属性别名,它提供了一个属性,该属性封装了有关Jenkins环境的所有信息,包括类型化整数

Information("Running on Jenkins {0}, build number: {1}.",
    BuildSystem.Jenkins.IsRunningOnJenkins ? "Yes" : "No",
    BuildSystem.Jenkins.Environment.Build.BuildNumber
);
上面将输出如下内容
在Jenkins上运行是的,版本号:1。
如果在Jenkins上运行,并且
在Jenkins上运行否,版本号:0。
如果没有

现在,如果您仍然想将PowerShell参数作为参数传递给这个问题,那么PowerShell参数的工作方式与其他shell略有不同,我们只包装了最常见的shell。对于使用ScriptArgs参数的
build.ps1
引导程序脚本的其他参数,如下所示:

.\build.ps1 -ScriptArgs "--buildNumber=""$env:BUILD_NUMBER""" 
然后获取这个参数可能看起来像这样

var buildNumber = Argument<int?>("buildNumber", 0);

Information("BuildNumber: {0} ({1})",
    buildNumber, buildNumber.HasValue);
var buildNumber=参数(“buildNumber”,0);
信息(“BuildNumber:{0}({1})”,
buildNumber,buildNumber.HasValue);

如果指定了无效值,则将输出
BuildNumber:[NULL](False)
,如果存在有效的参数值,则输出类似
BuildNumber:1(True)
(如果未指定值,则默认为0)。

使用等号指定参数对我不起作用。如果您将脚本更新为使用
\build.ps1-buildNumber$bn
,是否会出现问题?Cake似乎不喜欢这样-获取:运行构建脚本。。。指定了多个生成脚本。听起来生成号现在已正确传递。如果你能发布
\build.ps1
的内容,我们可能会进一步帮助你。那太好了,问题可以用--(2个减号)解决,比如:。\build.ps1--buildNumber=$bn。丹,那花了我好几天时间。你把我引向了那个方向——谢谢你的时间。用等号指定参数对我来说不起作用。如果您将脚本更新为使用
\build.ps1-buildNumber$bn
,是否会出现问题?Cake似乎不喜欢这样-获取:运行构建脚本。。。指定了多个生成脚本。听起来生成号现在已正确传递。如果你能发布
\build.ps1
的内容,我们可能会进一步帮助你。那太好了,问题可以用--(2个减号)解决,比如:。\build.ps1--buildNumber=$bn。丹,那花了我好几天时间。你把我引向了那个方向——谢谢你的时间。