2014-04-29

Bitbucket + JenkinsでSalesforceのCI

前回は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のリポジトリを設定

sf-bitbucket-git

 

ビルド・トリガはSCMポーリング。スケジュールは空白で。

sf-bitbucket-build-trigger

 

bitbucketにID/Passwordを保持したくなかったので

適当なディレクトリにbuild.xmlとbuild.propertiesを入れる。

sf-bitbucket-build

 

あとは同じ

sf-bitbucket-afterbuild

 

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にしました。

bitbucket-hook

 

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を利用させていただきました!)

tree-bitbucket-src

 

これで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の連携について

Ubuntu - BitbucketのプライベートリポジトリをJenkinsからビルド

GithubからJenkinsへのServer Hook

このエントリーをはてなブックマークに追加