詹金斯PowerShell的插件解析$ ENV:BUILD_NUMBER
问题描述:
我想使用的詹金斯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.
任何想法都非常欢迎
答
当涉及到环境变量,可能是最好的解决办法是使用提供开箱即用的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)。
指定等号,我不工作的参数。如果您更新脚本以使用'。\ build.ps1 -buildNumber $ bn'代替,那么问题是否会发生? – Persistent13
蛋糕似乎不喜欢 - 获取:正在运行构建脚本...指定了多个构建脚本。 – CShape
听起来好像现在正在正确传递内部版本号。如果你可以发布'。\ build.ps1'的内容,我们可以帮助你进一步。 – Persistent13