2017-09-15 81 views
1

我想使用的詹金斯PowerShell的插件,打造我的蛋糕脚本。我想给$env:BUILD_NUMBER解析成饼脚本 - 这是在PowerShell窗口中使用Windows上工作正常:

.\build.ps1 -buildNumber=123 

但是当使用“相同” 在PowerShell中(OK解析123时)詹金斯上的插件 - 它失败了。它不会解析Cake的$env:BUILD_NUMBER的值。我用这:

$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 

在蛋糕脚本中,我使用$bn-value作为的NuGet版本号。但我得到以下错误:

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

任何想法都非常欢迎

+0

指定等号,我不工作的参数。如果您更新脚本以使用'。\ build.ps1 -buildNumber $ bn'代替,那么问题是否会发生? – Persistent13

+0

蛋糕似乎不喜欢 - 获取:正在运行构建脚本...指定了多个构建脚本。 – CShape

+0

听起来好像现在正在正确传递内部版本号。如果你可以发布'。\ build.ps1'的内容,我们可以帮助你进一步。 – Persistent13

回答

0

当涉及到环境变量,可能是最好的解决办法是使用提供开箱即用的EnvironmentVariable别名只是阅读与蛋糕。

var buildNumber = EnvironmentVariable("BUILD_NUMBER"); 

那获取从詹金斯的内部版本号说,蛋糕其实已经提供了这样做出来使用BuildSystem属性别名是全局可用盒子的一种方式,它提供了一个Jenkins属性,它封装了所有类型的有关Jenkins环境的信息,包括build number作为键入的整数。

Information("Running on Jenkins {0}, build number: {1}.", 
    BuildSystem.Jenkins.IsRunningOnJenkins ? "Yes" : "No", 
    BuildSystem.Jenkins.Environment.Build.BuildNumber 
); 

上面会输出类似 Running on Jenkins Yes, build number: 1.如果你在运行詹金斯和Running on Jenkins No, build number: 0.如果你不是。

现在,如果你仍然想作为参数传递的问题是,PowerShell的参数工作有点不同于其他贝壳和我们只裹着最常见的。对于使用ScriptArgs参数这样额外的参数给build.ps1引导程序脚本:

.\build.ps1 -ScriptArgs "--buildNumber=""$env:BUILD_NUMBER""" 

然后获得该参数可以是这个样子

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

Information("BuildNumber: {0} ({1})", 
    buildNumber, buildNumber.HasValue); 

而且会如果指定输出BuildNumber: [NULL] (False)无效值和像BuildNumber: 1 (True)如果有效的参数值存在(如果没有指定值,它会默认为0)