Jenkinsのジョブをcurlで処理する
例えばの話として、gitにプッシュ(コミット)されたらフックさせるとか使えると思うのですが(subversionでもある)。それを使ってプッシュされたらJenkinsでビルドさせるとか出来るのかなっていう事で調べてみた
Jenkinsジョブをcurlで登録
http://localhost:8080/jenkins とかでアクセス出来る場合には http://localhost:8080/jenkins/createItem?name=ジョブ名 でぶん投げれば良いらしい。
その際にジョブの設定ファイル(config.xml)が必要になる。で既に作ってるとかの場合にはJENKINS_HOME?/job/ジョブ名/config.xmlにあるのでそれをコピーするなりで
例えば以前で書いたジョブとかだと長いけど
<?xml version="1.0" encoding="UTF-8"?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@1.4.0">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<name></name>
<refspec></refspec>
<url>git://localhost:9418/sample.git</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>**</name>
</hudson.plugins.git.BranchSpec>
</branches>
<disableSubmodules>false</disableSubmodules>
<recursiveSubmodules>false</recursiveSubmodules>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<authorOrCommitter>false</authorOrCommitter>
<clean>false</clean>
<wipeOutWorkspace>false</wipeOutWorkspace>
<pruneBranches>false</pruneBranches>
<remotePoll>false</remotePoll>
<ignoreNotifyCommit>false</ignoreNotifyCommit>
<useShallowClone>false</useShallowClone>
<buildChooser class="hudson.plugins.git.util.DefaultBuildChooser"/>
<gitTool>Default</gitTool>
<submoduleCfg class="list"/>
<relativeTargetDir></relativeTargetDir>
<reference></reference>
<excludedRegions></excludedRegions>
<excludedUsers></excludedUsers>
<gitConfigName></gitConfigName>
<gitConfigEmail></gitConfigEmail>
<skipTag>false</skipTag>
<includedRegions></includedRegions>
<scmName></scmName>
</scm>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.tasks.Shell>
<command>android update lib-project -p ActionBarSherlock/actionbarsherlock -t 3
android update lib-project -p SlidingMenu/library -t 3
android update project -p sample -l ../ActionBarSherlock/actionbarsherlock
android update project -p sample -l ../SlidingMenu/library
cp sample/libs/android-support-v4.jar ActionBarSherlock/actionbarsherlock/libs/
cp sample/libs/android-support-v4.jar SlidingMenu/library/libs</command>
</hudson.tasks.Shell>
<hudson.tasks.Ant plugin="ant@1.2">
<targets>clean release</targets>
<buildFile>sample/build.xml</buildFile>
</hudson.tasks.Ant>
</builders>
<publishers/>
<buildWrappers/>
</project>
というような感じになってる。これをボディとしてURLにぶん投げれば良い
curl \
-s \
-X POST \
"http://localhost:8080/jenkins/createItem?name=sample" \
--data-binary @config.xml \
-H "Content-Type: text/xml" \
-w "%{http_code}" \
-o /dev/null
sampleっていうジョブ名で作成する。でその際にレスポンスは取らないけど、結果のステータスコードだけ取る。で成功時には200のステータスコードが返ってくるけど、失敗時・既に存在するなどは400エラーが返ってくる模様
Jenkinsジョブのビルドを開始する
curl http://localhost:8080/jenkins/job/ジョブ名/build
をぶん投げれば良い模様。っていう感じな工程をやれば出来なくも無い模様。ただJenkins側の設定とかしてないのでそのままやると問題は少なからず出てきそうな気もする
んまぁとりあえずはそんな感じな事も出来るよ的な感じで