Pipeline 利用時の Maven ローカルリポジトリ

144 views
Skip to first unread message

tak.n

unread,
Aug 2, 2016, 3:03:35 AM8/2/16
to 日本Jenkinsユーザー会
既存の Maven のジョブを Pipeline Plugin 使って置き換えようかと思っています。
その際にローカルリポジトリを以前の「Maven プロジェクトのビルド」にあったように Jenkins のエグゼキューター毎に持たせたいのですが、良い実現方法が思いついていません。

現状 Pipeline 対応の Maven プラグインはまだ無いようなので、単に mvn コマンドを実行する形になると思います。
ローカルリポジトリは settings.xml で指定することになるので動的に `mvn --settings` で置き換えるにしても、肝心のエグゼキューターの情報をどう得るのかが分かりませんでした。

どうにかして Jenkins のオブジェクトを Pipeline のコード上で取得できたりするのでしょうか?

Kiyotaka Oku

unread,
Aug 2, 2016, 9:44:47 PM8/2/16
to jenkin...@googlegroups.com
「Use Groovy Sandbox」のチェックを外せばPipelineスクリプト内でもJenkinsのAPIを呼び出すことが出来ます。

import jenkins.model.Jenkins
def executor = Jenkins.instance.getJob('ジョブ名').builds[0].executor

PipelineジョブだとOneOffExecutorが返ってくるようなので、やりたいことは出来なさそうです。


--
このメールは Google グループのグループ「日本Jenkinsユーザー会」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには jenkinsci-ja...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

T.N

unread,
Aug 4, 2016, 12:44:44 AM8/4/16
to 日本Jenkinsユーザー会
Oku さん

ご回答ありがとうございました。

よくよく見てましたら、Pipeline Syntax の Global Variable Reference に evn.EXECUTOR_NUMBER で取得できると書いてありました。
確認不足ですみません。

複数エグゼキューターを持たせたノード上で同時にジョブを実行させたところ、異なる値を得られました。

Maven については -Dmaven.repo.local=path/to で settngs.xml を使わなくてもローカルリポジトリを指定できたので、
上記の evn.EXECUTOR_NUMBER と組み合わせて、エグゼキューター毎に使い分けさせられそうです。


sh "mvn  -Dmaven.repo.local=/path/to/repos.${evn.EXECUTOR_NUMBER} ... clean install"

実行結果抜粋
mvn --errors --update-snapshots --batch-mode -Dmaven.repo.local=/var/tmp/repos.0 -f xxx/pom.xml clean install



2016年8月3日水曜日 10時44分47秒 UTC+9 Kiyotaka Oku:
Reply all
Reply to author
Forward
0 new messages