2017-08-23 5 views
2

私はJenkinsパイプラインジョブを使用しています。私の必要条件は、ジョブのすべてのコミットメッセージを取得し、Jenkinsパイプラインファイルから.ps1ファイルに渡し、次に.ps1ファイルからケーキファイルに渡すことです。ps1ファイルに文字列配列を渡すには?

文字列リストを使用してすべてのコミットメッセージを取得した後、それを配列に変換しています。

ここで、この配列値をJenkinsパイプラインファイルからps1ファイルに渡す必要があります。 私はJenkinsパイプラインファイルの文字列のように渡そうとしました。例外をスローします。誰も私に教えてくださいジェンキンスファイルから.ps1ファイルに配列の値を渡すことが可能ですか?

ジェンキンスファイルの内容:

bat 'powershell.exe -ExecutionPolicy ByPass -File build.ps1 -Script build.cake -Target build -arrayContent '+"${arrayContent}" 

PS1ファイルの内容:

Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" arrayContent=`"$arrayContent`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" 

私は.ps1というファイル内[string[]]$arrayContent = @()として配列を宣言しています。

ケーキファイルの内容:

var arrayContent = Argument<string[]>("arrayContent"); 

答えて

3

PowerShellの配列はPowerShellの外に動作しません。あなたは、単一の区切り文字で区切られた文字列として値を渡すと、その文字列にPowerShellスクリプトを分割することができます:

Param(
    [Parameter(Mandatory=$true)] 
    [string]$ArrayContent, 
    ... 
) 

$stringArray = $ArrayContent -split ',' 
... 
powershell.exe ... -ArrayContent "foo,bar,baz" 

あるいはそれらが自動変数に収集しているように、個々の無名の引数として各文字列を渡します$args

[CmdletBinding()] 
Param(
    ... 
) 

$stringArray = $args 
... 
powershell.exe ... "foo" "bar" "baz" 
関連する問題