Git
bitbucket
Jenkins

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

More than 3 years have passed since last update.

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


手順

Jenkins は Ubuntu 12.04 で動いているものとします.インストール方法は click here

バージョンは 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

昔は 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 のやつ) が届き,それがビルドトリガになってあとはお好きにどうぞとなります.


参考書籍・サイト


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

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