JenkinsのCopy To Slave Pluginを使ってみる

JenkinsのCopy To Slave Pluginの使い方をまとめました。

SlaveはDebian 8です。


1 Copy To Slave Pluginとは

ジョブの実行時にMaster側にあるファイルをSlave側にコピーするプラグインです。

GitやSubversion等のリポジトリにJenkins向けの設定ファイルやスクリプトを格納する必要がなくなります。

 

ジョブの完了時にSlave側にあるファイルをMaster側にコピーすることも可能です。

2 Copy To Slave Pluginのインストール

Jenkinsのプラグイン制御画面からインストールします。

Jenkinsの管理 -> プラグインの管理 -> 利用可能

https://dl-web.dropbox.com/s/7oi6kqnic27lxaz/0001_CopyToSlave-Install.png

3 システムの設定

システムの設定画面からCopy To Slave Optionを設定します。

Jenkinsの管理 -> システムの設定 -> Copy To Slave Option

https://dl-web.dropbox.com/s/7t38sybhqbr6a76/0002_System-Setting.png

Master側からSlave側にコピーするファイルが格納されているディレクトリについて、以下のオプションがあります。

 

Define an additional "Paths are relative to" option 候補に追加するディレクトリ名
Enable the "Paths are relative to $JENKINS_HOME" option $JENKINS_HOMEを候補に追加

 

追加したディレクトリはジョブの設定画面で表示されるようになります。

https://dl-web.dropbox.com/s/l6s4sdcw29amovj/0003_Directory.png

Debian 8の場合、$JENKINS_HOMEは/var/lib/jenkinsです。

$JENKINS_HOMEを候補に追加するのは推奨されておりません。

4 ジョブの設定

4.1 ビルド環境

ビルド環境の「Copy files into the job's workspace before building」にチェックを入れます。

https://dl-web.dropbox.com/s/ed254437d251o82/0004_Build-Environment.png

ここでMaster側からSlave側にコピーするファイルを設定します。

hello.shはhelloという文字列をhello.txtに書き込むスクリプトです。

$ cat /var/lib/jenkins/userContent/hello.sh 
#!/bin/sh

echo "hello.sh" > hello.txt

ファイル名はワイルドカードを用いたパターンマッチングも使用可能です。

「高度な設定」を押下することで表示される「Files to exclude from the copy」でパターンマッチングしたファイル群から除外するファイルを設定できます(こちらもパターンマッチング)。

4.2 ビルド後の処理

ビルド後の処理の「Copy files back to the job's workspae on master node」を追加します。

https://dl-web.dropbox.com/s/o79zmn4kklsvsre/0005_Post-Build.png

ここでSlave側からMaster側にコピーするファイルを設定します。

ファイル名はワイルドカードを用いたパターンマッチングも使用可能です。

「高度な設定」を押下することで表示される「Files to exclude from the copy」でパターンマッチングしたファイル群から除外するファイルを設定できます(こちらもパターンマッチング)。

5 ジョブの実行

コンソール出力に以下のログが出力されました。

[copy-to-slave] Copying 'hello.sh', excluding nothing, from
'file:/var/lib/jenkins/userContent/' on the master to
'file:/home/hiroom2/workspace/b/' on 'ubuntu-14.04'.
[b] $ /bin/sh -xe /tmp/hudson8418728766916366520.sh
+ sh hello.sh
[copy-to-slave] Copying 'hello.txt', excluding nothing, from
'file:/home/hiroom2/workspace/b/' on
'hudson.slaves.DumbSlave[ubuntu-14.04]' to
'file:/var/lib/jenkins/jobs/b/workspace/' on the master.

Slave側にhello.shがコピーされ、hello.txtが生成されています。

$ tree workspace/b/
workspace/b/
├── hello.sh
└── hello.txt

Master側のworkspace配下にhello.txtがコピーされています。

$ tree /var/lib/jenkins/jobs/b/
/var/lib/jenkins/jobs/b/
├── builds
│   ├── 1
│   │   ├── build.xml
│   │   ├── changelog.xml
│   │   └── log
│   ├── lastStableBuild -> 1
│   ├── lastSuccessfulBuild -> 1
│   └── legacyIds
├── config.xml
├── lastStable -> builds/lastStableBuild
├── lastSuccessful -> builds/lastSuccessfulBuild
├── nextBuildNumber
└── workspace
    └── hello.txt