ユーザ認証が掛かった Jenkins vs. Bitbucket の private repository ファイッ！

お互いに鍵が掛かりあった状況で，CI 出来るようになるには一体どうすれば…　ネットの海にはそれに対する回答がわんさかありました．

## 手順

Jenkins は Ubuntu 12.04 で動いているものとします．インストール方法は [click here](http://pkg.jenkins-ci.org/debian/)．

バージョンは 1.504 でした．少々違っても大丈夫なのかな？この辺 Jenkins にまだそれほど詳しくないんでよく分からないです．

Jenkins には `http://my.domain:8080` でアクセス出来るものとします．

Jenkins のユーザ認証機能はそれだけで割と複雑なので省略します．とにかく，誰でもがジョブにアクセスしたり出来ないようになっている状況になったとします．

まずは Ubuntu のユーザ jenkins (※ここで言うユーザというのは Jenkins パッケージをインストールしたときに同時に作られた，Ubuntu のユーザとしての jenkins です．Jenkins にあるユーザ認証とは無関係です．) で公開鍵作成．`sudo su - jenkins` からの `ssh-keygen` で良いと思います (パスフレーズは入力しない，っていうか質問には Enter 連打で無心で応える)．

次に Git Plugin を導入しておきます．**Jenkins の管理 (Manage Jenkins)** > **プラグインの管理 (Manage Plugins)** から，**Git Plugin** という名前のプラグインを導入するのです．

Bitbucket 側に移動します．まずはプライベートリポジトリを用意します．リポジトリ URL が `git@bitbucket.org:user/repos.git` になったとしましょう．

Mercurial の方はゴメンナサイ (´・ω・｀)

リポジトリの管理画面にて，**Deployment keys** に先ほど作ったユーザ jenkins の公開鍵を追加します．これでユーザ jenkins がこのリポジトリを clone することが出来るようになります．

更に管理画面にて，**Webhooks** に以下の URL を持つ設定を追加します．Title は何でもいいです．他はデフォルトで大丈夫だと思います．

```
http://my.domain:8080/git/notifyCommit?url=git@bitbucket.org:user/repos.git
```

参考画像

![bitbucket-jenkins.png](https://qiita-image-store.s3.amazonaws.com/0/4087/7d00278e-fd24-2c32-fbe5-410ec0fb0689.png)

昔は POST という Service (HTTP POSTを投げるもの) を追加していたのですが，それは Bitbucket からは無くなります．

Jenkins 側に戻ってきます．ジョブを作って，そのジョブの**設定 (Configure)** に行きます．

**ソースコード管理システム (Source Code Management)** を Git にして，リポジトリ URL を打ち込みます．打ち込むべきは `git@bitbucket.org:user/repos.git` です．

ここでこの操作が初めてである場合はエラーが出ます．SSH で known_hosts に Bitbucket 側が登録されていないからです．一度だけコンソールにて，

```
git ls-remote -h git@bitbucket.org:user/repos HEAD
```

とでも実行してやり，「このホスト信用して登録すんの？」的な問いに yes しましょう．

次に，**ビルド・トリガ (Build Triggers)** にて **SCM をポーリング (Poll SCM)** にチェックを入れます．**スケジュール (Schedule)** は空白でいいです．

## 接続テスト

`http://my.domain:8080/git/notifyCommit?url=git@bitbucket.org:user/repos.git` の URL を，curl や wget で，もしくはブラウザに打ち込んでみることで，実際に Jenkins 側でジョブが走り始めるかどうかチェックしましょう．

## 完了

以上です．Bitbucket に push したら Jenkins に HTTP リクエスト (notifyCommit を含んだ URL のやつ) が届き，それがビルドトリガになってあとはお好きにどうぞとなります．

## 参考書籍・サイト

* [Jenkins実践入門　~ビルド・テスト・デプロイを自動化する技術](http://www.amazon.co.jp/dp/4774148911)
* [JenkinsにBitbucketからビルド命令を出す際にIDとPasswordを埋め込まないようにする - TOKOROM BLOG](http://www.tokoro.me/2012/07/29/security-for-jenkins/)
* [Jenkinsを使ったiOSアプリビルド自動化11 GitHubとJenkinsの連携 | なんてこったいブログ](http://nantekottai.com/2012/07/13/git-hook-and-access-controlled-jenkins/)
* [さくらのVPS+Jenkins+github+rails3 - リア充爆発日記](http://d.hatena.ne.jp/ria10/20130107/1357527272)
* [How do I get Jenkin&#39;s to build on push to a BitBucket git repository? - Stack Overflow](http://stackoverflow.com/questions/11231064/how-do-i-get-jenkins-to-build-on-push-to-a-bitbucket-git-repository)
* [Jenkinsインストール - Narwhal](http://d.hatena.ne.jp/nosa1/20120828/1346118703)

## 参考になりきらなかったサイト・参考サイトに辿り着くのに必要だったサイト

* [Jenkins Service Management - Bitbucket - Atlassian Documentation - Confluence](https://confluence.atlassian.com/display/BITBUCKET/Jenkins+Service+Management)
* [Jenkins@さくらVPSにOctopressのデプロイを任せてみる - TOKOROM BLOG](http://www.tokoro.me/2012/07/29/jenkins-octopress/)
* [appendix. Gitリポジトリとの連携 - ノウハウ共有サイト！](https://sites.google.com/site/yasuda/maven/appendex-gitripojitoritono-lian-xie)
* [Gitのpost-commit hookを使ってJenkinsにビルドして頂く - HIDARI日記（右）](http://hidari-lab.hatenablog.com/entry/git_post-commit-hook_with_jenkins)

決して貶めているのではなく，ここの情報も調べた上での成果です．きちんと思考の過程を残すんや…！