Jenkins で Git リポジトリの ID と PW をセキュアに保存する方法

Jenkins から https 接続で認証付きの Git リポジトリを参照する場合、以下のように URL に直接ユーザー名とパスワードを書く必要がありました。

https://{USERNAME}:{PASSWORD}@foo.com/git/bar.git

当然 Jenkins の設定ファイルにパスワードがそのまま書かれてしまいます。個人開発ならいいですが、チーム開発では危険すぎます。これをセキュアにしようとすると、.netrc を使ったりするややこしい手順が必要でした。

ところが、2013年10月22日にリリースされた Git Plugin 2.0 から、Credential Plugin と連携して暗号化したパスワードを保存できるようになったため、大幅に設定が楽になりました。

以下にそのやり方をメモしておきます。

リポジトリの URL は https://foo.com/git/bar.git とします。

“Jenkins の管理 > Credentials > Add domain” をクリックし、Git リポジトリのドメインを入力します。

Specification の URI スキーマには https を選択します。

続いて、”Add Credentials” をクリックし、認証情報入力画面を出します。

“Kind” は ユーザー名とパスワード を、”ユーザー名” には https 認証のユーザー名を入力します。完了したら “OK” をクリック。

これで一旦、認証鍵一覧画面に戻されます。引き続き、いま入力したユーザー名をクリック。

“Update” をクリック。

“パスワード” 欄に認証パスワードを入力し、”Save” をクリック。

以上で foo.com のリポジトリの認証情報が設定できました。

あとはプロジェクトの設定画面を開き、”ソースコード管理システム > Git” の “Repository URL” に https://foo.com/git/bar.git を、”Credentials” に先ほど入力した ID/PW のペアを選択すれば OKです。

これでプロジェクトをビルド可能になります。

Git 1.7.1 では認証が通らない?

CentOS 6.3 で、EPEL リポジトリから Git をインストールすると 1.7.1 が入りますが、これだとうまく認証が通りませんでした。プロジェクトの設定画面で “Repository URL” と “Credential” を入力しても、 Error performing command: ls-remote -h というエラーが出て進めませんでした。

仕方ないので手動でソースから Git 1.8.4.1 をインストールしたら、無事エラーが出なくなりました。

Git のソースインストール方法手順は以下。いつもの Configure -> make -> make install です。

cd /usr/local/src
wget https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz
tar zxvf git-1.8.4.1.tar.gz
cd git-1.8.4.1
./configure
make
make install

なお、この場合 Git のバイナリが /usr/local/bin 配下にインストールされるので、”Jenkins の管理 > システム設定 > Git > Path to Git executable” に /usr/local/bin/git と入力する必要があります。

参考