Jenkinsのジョブをコマンドラインから生成する
Jenkinsのジョブをコマンドラインから、生成する方法を調べてみた。
OSは、Ubuntu14.04。
結論から言うと、XMLファイルをjenkins-cli.jarの create-jobコマンドに与えればよい。
Jenkins CLI - Jenkins - Jenkins Wiki
以下の実行パスや、URLは各自の環境に読み替えること。
jenkins.example.comとなっている箇所は、自身のJenkinsが動作しているURLを指す。
テンプレート用のXMLファイル作成
生成するジョブのテンプレートとなるXMLファイルを作成する。 通常通り、UIからジョブを作成する。
ここでは、echo 'this is 01_job'
をする簡単な01_jobを作成する。
そうすると、サーバ内に、以下のようなファイルが作成される。
jenkins@ubuntu:~$ cat /var/lib/jenkins/jobs/01_job/config.xml <?xml version='1.0' encoding='UTF-8'?> <project> <actions/> <description>this is 01_job</description> <keepDependencies>false</keepDependencies> <properties/> <scm class="hudson.scm.NullSCM"/> <canRoam>true</canRoam> <disabled>false</disabled> <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> <triggers/> <concurrentBuild>false</concurrentBuild> <builders> <hudson.tasks.Shell> <command>echo 'this is 01_job'</command> </hudson.tasks.Shell> </builders> <publishers/> <buildWrappers/>
Jenkins CLI
今回は、Jenkins CLIのcreate-jobコマンドを使い、ジョブを生成する。
Jenkins CLI は、コマンドラインから、Jenkinsを操作するためのjarファイルで、Jenkinsにパッケージされている。
まずは、自身のURL/jnlpJars/jenkins-cli.jar から、jenkins-cli.jar
をダウンロードする。
$ wget http://jenkins.example.com/jnlpJars/jenkins-cli.jar
また、http://jenkins.example.com/cli のようなURLで、使えるコマンド一覧、 ヘルプが参照できる。
ダウンロードしたら、実際に使ってみる。
$ java -jar jenkins-cli.jar -s jenkins.example.com/ -i ~/.ssh/id_rsa version 1.627 $ java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa who-am-i Authenticated as: togashik Authorities: authenticated
-s には、jenkins のURL、-i には、秘密鍵を指定する。 秘密鍵は、ログインユーザに登録した公開鍵とペアになっているものを指定する。
早速、create-job
を使い、ジョブを生成してみる。
最後に与えた02_jobは、新規生成するジョブ名を指す。
$ cat /var/lib/jenkins/jobs/01_job/config.xml | java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa create-job 02_job
これで、ジョブが生成できたはずなので、get-job
で確認してみる。
$ java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa get-job 02_job <?xml version='1.0' encoding='UTF-8'?> <project> <actions/> <description>this is 01_job</description> <keepDependencies>false</keepDependencies> <properties/> <scm class="hudson.scm.NullSCM"/> <canRoam>true</canRoam> <disabled>false</disabled> <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> <triggers/> <concurrentBuild>false</concurrentBuild> <builders> <hudson.tasks.Shell> <command>echo 'this is 01_job'</command> </hudson.tasks.Shell> </builders> <publishers/> <buildWrappers/>
ただし、これでは、02_jobは01_jobの単なるコピーなので、設定に含めたシェルスクリプトは
echo 'this is 01_job'
のままである。
これを、echo 'this is 02_job'
としたいとき等、読み込むxmlファイルを変更する必要がある。
delete-job
で先ほどのジョブを削除する。
$ java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa delete-job 02_job
create-job
で、再生成する。
$ sed 's/01_job/02_job/' /var/lib/jenkins/jobs/01_job/config.xml | java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa create-job 02_job
おまけ
コマンドラインから、生成したジョブを既存のビューに追加する
Jenkins CLIを使う方法を試そうとしたけど、うまくいかなかったので、力づくでやる。
つまり、ビュー構造が定義されているconfig.ymlを手動で変更して、読み込ませる。
02_jobをblogというビューに追加する。
$ sed -n '/^\s*<name>blog/,/^\s*<\/jobNames>/p' /var/lib/jenkins/config.xml <name>blog</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class="hudson.model.View$PropertyList"/> <jobNames> <comparator class="hudson.util.CaseInsensitiveComparator"/> <string>01_job</string> </jobNames> $ sed -i.bak -e '/<string>01_job<\/string>/a\ \ \ \ \ \ \ \ <string>02_job<\/string>' /var/lib/jenkins/config.xml $ sed -n '/^\s*<name>blog/,/^\s*<\/jobNames>/p' /var/lib/jenkins/config.xml <name>blog</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class="hudson.model.View$PropertyList"/> <jobNames> <comparator class="hudson.util.CaseInsensitiveComparator"/> <string>01_job</string> <string>02_job</string> </jobNames>
Jenkinsを安全に再起動する。
$ java -jar jenkins-cli.jar -s http://jenkins.example.com/ -i ~/.ssh/id_rsa safe-restart