JenkinsのCopy To Slave Pluginの使い方をまとめました。
SlaveはDebian 8です。
Table of Contents
1 Copy To Slave Pluginとは
ジョブの実行時にMaster側にあるファイルをSlave側にコピーするプラグインです。
GitやSubversion等のリポジトリにJenkins向けの設定ファイルやスクリプトを格納する必要がなくなります。
ジョブの完了時にSlave側にあるファイルをMaster側にコピーすることも可能です。
2 Copy To Slave Pluginのインストール
Jenkinsのプラグイン制御画面からインストールします。
Jenkinsの管理 -> プラグインの管理 -> 利用可能
3 システムの設定
システムの設定画面からCopy To Slave Optionを設定します。
Jenkinsの管理 -> システムの設定 -> Copy To Slave Option
Master側からSlave側にコピーするファイルが格納されているディレクトリについて、以下のオプションがあります。
Define an additional "Paths are relative to" option | 候補に追加するディレクトリ名 |
Enable the "Paths are relative to $JENKINS_HOME" option | $JENKINS_HOMEを候補に追加 |
追加したディレクトリはジョブの設定画面で表示されるようになります。
Debian 8の場合、$JENKINS_HOMEは/var/lib/jenkinsです。
$JENKINS_HOMEを候補に追加するのは推奨されておりません。
4 ジョブの設定
4.1 ビルド環境
ビルド環境の「Copy files into the job's workspace before building」にチェックを入れます。
ここで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」を追加します。
ここで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