- 更新日: 2014年7月2日
- Jenkins & CI
ユーザー認証ありのJenkinsとBitbucketプライベートリポジトリを連携
ユーザー認証を有効にした Jenkins と Bitbucket のプライベートリポジトリを連携させる手順です。前もって、Jenkins のインストールは済ませておき、ユーザー認証を設定しておきます。詳細は以下。
JenkinsをCentOS6にインストールしてユーザー認証設定 | EasyRamble
Bitbucket
— 環境 —
CentOS 6.4
Jenkins 1.570
Jenkins 側で Bitbucket への SSH 接続用の鍵作成
Jenkinsインストール時に作成されたユーザー(jenkins)で鍵ペアを作成したいのですが、jenkins を yum でインストールしたので、jenkins は service account となっていました。そのままの jenkins アカウントではユーザーとしてログインできないので、事前に以下のように /etc/password を修正します。
1 2 3 4 |
$ cat /etc/passwd jenkins:x:490:486:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false |
/bin/bash を設定し以下のように変更。
1 2 3 4 |
$ sudo vi /etc/passwd jenkins:x:490:486:Jenkins Continuous Build server:/var/lib/jenkins:/bin/bash |
これで、jenkins ユーザーとしてログインできる。
続いて、Bitbucket に公開鍵認証で SSH 接続するための公開鍵・秘密鍵の鍵ペアを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo su - jenkins $ whoami jenkins $ mkdir .ssh $ cd .ssh $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): /var/lib/jenkins/.ssh/jenkins_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: |
パスフレーズは空のまま Enter。
公開鍵(jenkins_rsa.pub)を Bitbucket に登録します。Bitbucket の管理画面で、アカウントの管理(右上プルダウン)→ SSHキー(左メニュー下部)→ 「鍵を追加」から公開鍵を追加します。
~/.ssh/config を作成。
1 2 3 4 5 6 7 8 9 10 11 |
$ vi ~/.ssh/config Host bitbucket.org port 22 Hostname bitbucket.org IdentityFile ~/.ssh/jenkins_rsa TCPKeepAlive yes IdentitiesOnly yes $ chmod 600 ~/.ssh/config $ chmod 600 ~/.ssh/config/jenkins_rsa |
SSH 接続クライアントの設定、 Macの ~/.ssh/config に SSH 接続の設定を書いておく 〜 CentOS6 | EasyRamble
bitbucket に ssh 接続確認。
1 2 3 |
$ ssh -T git@bitbucket.org |
初回は、Are you sure 〜と接続の確認メッセージが出るので、yes にします。
Jenkins に Git plugin をインストール
Git Plugin にチェックをして、「再起動せずにインストール」をクリック。
jenkins を再起動させます。最下部の「jenkins 再起動〜」をチェック。再起動が終了すると、自動でブラウザがリロードされますので再度 Jenkins にログイン。
Jenkins のジョブ(プロジェクト)を作成
実験用に、「Hello World!」ジョブを作成してみます。Jenkinsにログイン後、
新規ジョブ作成 → 「ジョブ名」に「HelloWorld」と入力 → 「フリースタイル・プロジェクトのビルド」にチェック → OK
・「Repository URL」に Bitbucket リポジトリの URL(git@bitbucket.org:user_name/repo_name.git)を入力
・「リポジトリ・ブラウザ」で bitbucketweb を選択 → 「URL」に Bitbucket リポジトリのURL(https://user_name@bitbucket.org/user_name/repo_name.git)を入力
・「ビルド・トリガ」で「SCMをポーリング」にチェック
・ビルド → ビルド手順の追加 → シェルの実行 → 「シェルスクリプト」に’Hello World’を出力させるシェルスクリプトを入力
echo ‘Hello World!’
以上を設定したら、保存します。
手動で HelloWorld ジョブのビルド実行
これで、ビルド実行されます。しばらくすると、左メニュー下のビルド履歴が1つ増えるので、確認するにはその追加されたビルド履歴を選択。
ビルド履歴 → Console Output を確認すると、設定した Bitbucket リポジトリから clone が行われ、その後 echo ‘Hello World!’ のコマンドが実行されたことを確認できます。
1 2 3 4 5 6 7 8 |
ビルドします。 ワークスペース: /var/lib/jenkins/workspace/HelloWorld Cloning the remote Git repository Cloning repository git@bitbucket.org:user_name/repo_name.git ... Hello World! Finished: SUCCESS |
2回目のビルド実行を行いビルド履歴を確認すると、Bitbucket リポジトリに変更が何も push されていないので、「No changes.」という結果が記録されました。
3回目のビルド実行で、リポジトリに変更を加えてテスト。ローカルの開発環境で、CSSをちょっと変更して push。
1 2 3 4 |
$ vi app/assets/stylesheets/custom.css.scss /* last update: 2014/06/30 */ |
以上を追加後、commit して push。
1 2 3 4 5 6 7 8 9 |
$ git add . $ git ci -m "add last updated date to css" $ git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) $ git push |
これで、リポジトリに変更が加えられたので、今度は Jenkins のビルド実行によりリポジトリに変更があったことが記録されるはず。
再び Jenkins でビルド実行後、ビルド履歴を確認してみます。
1 2 3 4 |
Changes 1. add last updated date to css (detail / bitbucketweb) |
期待通り、上記のように記録されていました。
以降は、自動的に Bitbucket リポジトリの変更を検知して、ビルド実行を完全に自動で行う設定です。
ビルド・トリガでスケジュールを設定
前述で設定した「ビルド・トリガ → SCMをポーリング」の箇所で、さらにスケジュールを設定します。以下は5分毎に、Bitbucket リポジトリの変更をチェックする設定です。
crantab によるスケジュールなので、crontab の書式で指定します。ちなみに、既存のジョブの設定を変更するには、ジョブを選択してクリック後、左メニューの設定から。
Bitbucket リポジトリに push して、5分以内にビルド実行されることを確認します。
Bitbucket でのウェブフック設定
ビルド・トリガのスケジュールの代わりに、ウェブフックを使う方法です。Bitbucket のウェブフックを設定し、リポジトリが変更された時に行う動作を設定します。この設定により、Bitbucket リポジトリに変更があった時に、自動で Jenkins ジョブを実行させることができます。
Bitbucket にログイン後、
以下のURLを入力します。
これで、Bitbucket に変更が push された時点で、自動で Jenkins のジョブが実行されます。Jenkins にユーザー認証が付いている場合は、この notifyCommit のエンドポイントURLを使う必要がある。コンソールから以下を実行して、Jenkins のジョブが開始するのをチェックします。
1 2 3 |
$ curl 'http://JenkinsサーバーのURL(IPアドレス):8080/git/notifyCommit?url=git@bitbucket.org:user_name/repo_name.git' |
Bitbucket リポジトリに変更を push して、同様に Jenkins ジョブが実行されるのを確認する。
以上で、Jenkins と Bitbucket リポジトリの連携設定は終了です。
- – 参考リンク –
- 意外と簡単。Jenkinsとbitbucket(Git)を連携する7ステップ – DISってHONEY♪ @gungnir_odin
- Bitbucketのprivate repositoryとJenkinsの連携について – やっつけ仕事の記録
- ユーザ認証が掛かった Jenkins vs. Bitbucket の private repository ファイッ! – Qiita
- AWS EC2でJenkinsとGitの連携 – Devlog
- Cannot switch to jenkins user redhat linux – Super User
- Jenkinsを使ってみよう(Mac OS X&Linux)[Ruby、Rails] – Build Insider
- Jenkinsで小さなテストを実行してみよう(Mac OS X&Linux)[Ruby、Rails] – Build Insider
- Jenkins CIでRSpecを自動実行する – ぱろっと・すたじお
- Rubyアソシエーション: Jenkins
- Jenkinsことはじめ – 技芸のおぼえがき
- Jenkins & CI の関連記事
- CircleCIにmecabをインストール(Rails)
- BitbucketにpushしたらJenkinsにRSpecの自動テストを実行させる
- JenkinsをCentOS6にインストールしてユーザー認証設定
Leave Your Message!