2016-04-06 17 views
3

:上記で私はJenkinsfileで、この一見単純なパターンを使用しようとしていますどのように私はジェンキンスパイプラインで実行パラメータを使用することができます

def params = input message: 'Define versions to use:', parameters: [ 
    [ 
     $class: 'RunParameterDefinition', 
     description: '', 
     filter: 'SUCCESSFUL', 
     name: 'pr1_run', 
     projectName: 'MyProject1' 
    ], [ 
     $class: 'RunParameterDefinition', 
     description: '', 
     filter: 'SUCCESSFUL', 
     name: 'pr2_run', 
     projectName: 'MyProject2' 
    ] 
] 

// ... 
step([ 
    $class: 'CopyArtifact', 
    fingerprintArtifacts: true, 
    projectName: 'MyProject1', // resorted to this 
    selector: [ 
     $class: 'ParameterizedBuildSelector', 
     parameterName: '${params.pr1_run}' 
    ], 
    target: _dir 
]) 

を、私は私がしました

java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowRun 

を取得

step([ 
    $class: 'CopyArtifact', 
    fingerprintArtifacts: true, 
    projectName: 'MyProject1', 
    selector: [ 
     $class: 'SpecificBuildSelector', 
     buildNumber: params.pr1_run.number 
    ], 
    target: 'pr1' 
]) 

と私は

を得る:また SpecificBuildSelectorを試してみました
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use field hudson.model.Run number 

ユーザーが選択した多数の上流プロジェクトビルドを最終ビルドに結合したいだけです。

答えて

0

両方問題がRunParameterValue.getValue()は、ライブRunオブジェクトを返すgetNumber() -ORに対し、より一般的には、buildEnvironmentパイプラインからより適切で-wouldことは、同じ問題の症状です。私はこれを追跡するためにJENKINS-34101を提出しました。

NotSerializableException(恐らく幸運なこと)をバイパスすると、RejectedAccessExceptionは、その方法を管理者として承認することによって簡単に解決されます。パイプラインでは必ずSpecificBuildSelectorを使用してください(cf. JENKINS-33577参照)。

¹Updateスクリプトのセキュリティプラグインあなたがmethod hudson.model.Run getNumber()、ないfield hudson.model.Run number承認するように求められますので。

+0

私は¹のやり方を理解していません。いずれにせよ、ビルドセレクタを使う必要はなく、単に 'step([$ class: 'CopyArtifact'、fingerprintArtifacts:true、run:pr1_run])'を使うのが理想的です。なぜ私は、私が望む正確な実行を完全に記述しているオブジェクトを手元に持っている場合、なぜプロジェクト名を2回指定するのか。 –

+0

(a)_Script Security_プラグインを1.18以降に更新します。 (b)プロジェクト名をローカル変数に保存する場合、プロジェクト名を2回指定する必要はありません。 (c)上で説明したように、 'Run'sは' Serializable'ではないので、それらに参照することはできません。ビルド番号のようなフラットなデータを扱うほうが良いです。 –

+0

スクリプトセキュリティプラグインの更新はここでは役に立ちません(少なくとも1.27以降)。 –

1

まあ、Script Security Plugin 1.18.1で、まだorg.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run getNumberを取得しています。どのような作品

は、明示的にparam = nullを設定し、CopyArtifactでpr1_numberを使用して、その後

def pr1_number = (''+params.pr1_run).split('#')[1] 

とあります。

これは、プロジェクト間のアクションのためにパイプラインの準備が整っていないことを示しています。

関連する問題