前回はJenkinsで手動デプロイをするところまでやったので、今回はbitbucketと連携させてみます。
仕組みとしては
bitbucketにコミット
→コミットをトリガとしてhook(HTTP POST)が起動し、jenkinsに通知する。
→jenkinsは通知されたタイミングでbitbucketからデータを取得して、取得したデータでantを走らせる。
って感じです。
1. Jenkinsにgitのプラグインをインストール
Jenkinsの管理>プラグインの管理 からGIT pluginをインストール。
2. jenkinsユーザのssh設定
まずjenkinsユーザでsshキーを作成します。$ su - jenkins
$ ssh-keygen
生成された公開鍵(${JENKINS_HOME}/.ssh/id_rsa.pub)をbitbucketに設定します。
初回はknown_hostsにbitbucketが登録されていないので
$ git ls-remote -h git@bitbucket.org:{bitbucket_user}/{bitbucket-repository}.git
とかで登録しておきます。
3. 新しいJobを作成
ソースコード管理にbitbucketのリポジトリを設定
ビルド・トリガはSCMポーリング。スケジュールは空白で。
bitbucketにID/Passwordを保持したくなかったので
適当なディレクトリにbuild.xmlとbuild.propertiesを入れる。
あとは同じ
4. antの設定ファイルを編集
今回はbuild.xmlやbuild.propertiesが別の場所にあるので相対パスは使ってません。# /home/jenkins/build_properties/build.xml
<project name="Sample usage of Salesforce-CI Ant tasks" default="deployForCI" basedir="." xmlns:sfc="antlib:com.yutagithub.sforce.ci">
<property file="build.properties" />
<property environment="env" />
<!-- Build / TestResult never actually saves to the server -->
<target name="deployForCI">
<sfc:deployForCI username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" deployRoot="/var/lib/jenkins/workspace/${sf.workspace}/src" sobjectPlural="true" checkOnly="true" testResultFile="/var/lib/jenkins/workspace/${sf.workspace}/test-result.xml" coverageResultFile="/var/lib/jenkins/workspace/${sf.workspace}/coverage.xml"/>
</target>
</project>
# /home/jenkins/build_properties/build.properties
sf.username = ***********
sf.password = ***********
sf.serverurl = https://login.salesforce.com
sf.workspace = **********
5. bitbucketのリポジトリにhookを設定
jenkinsっていうフックがありますが、うまくいかなかったのでPOSTにしました。
URLはhttp://{user}:{password}@{jenkins-server}/git/notifyCommit?url=git@bitbucket.org:{bitbucket-user}/{bitbucket-repository}.git って感じで。
(Basic認証使ってなければhttp://{jenkins-server}/git/… って感じになります。)
6. bitbucketにコミットする。
前回同様こんな感じのフォルダ構成でcommitします。(ForceComSampleを利用させていただきました!)
これでbitbucketにcommitしたら自動的にJenkinsのビルドが走ってくれるように設定が完了しました!
githubとか別のgitサービスの場合も同じような設定方法になります。
うまくいかない場合は上記URLを直接叩いてみて、1-4の設定が合っているかどうかを確認すると良いかも。
実際の開発の時はmeta.xmlとかpackage.xml作るの面倒なので
Eclipseのforce.com IDEやsalesforce migration toolとかで取ってきたものを
編集してcommitする流れになると思います。
今回の参考URL:
Bitbucketのprivate repositoryとJenkinsの連携について