2017-09-15 105 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)