Jenkinsの導入

銀鷹です。

今回は、Debian7へのJenkinsの導入です。
基本的な手順はhttp://qiita.com/soramugi/items/4b91222caaa67fb460f5を参考にしました。
加えて、前回インストールしたGitLabとの連携も行います。

環境

OS: Debian7
Jenkins + GitLab6.6。
なお、今回はJenkinsとGitLabは同じサーバで動いています。

インストール

Jenkinsがリポジトリを公開してくれているので、こいつを使います。参考

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

インストールは以上で完了。非常に単純です。

認証の設定

デフォルトでは、Jenkinsさんは非常にオープンな人なので、誰のお仕事でも受けてしまう模様。
なので、ちゃんと設定をします。
詳細は、こちらに丁寧にまとまっているので、こちらを参照して下さい。

GitLabとの連携

JenkinsからGitLabへのアクセス

まずは、jenkinsユーザでGitLabへアクセス出来るようにします。

# 鍵の作成
sudo su jenkins
# ssh-keygenの設定はご自由に。
ssh-keygen -t rsa -b 2048

ここで作成した、公開鍵をGitLabに登録。
ユーザは、Jenkinsでビルドさせたいリポジトリにアクセス出来るユーザならだれでも良いはず。

GitLabのProfile settings -> SSH -> Add SSH Keyから登録。
登録したら、以下のコマンドでちゃんと入れるかを確認。

# もし、ポートを変えてるなら-pオプションでポートも指定して下さい。
ssh git@<GitLabのIPアドレスorドメイン> -i <秘密鍵> [-p <SSHのポート>]
# 以下の様な結果が帰ってくればOK
PTY allocation request failed on channel 0
Welcome to GitLab, <ユーザ名>!
Connection to <GitLabのIPアドレス> closed.

ここまでがOKなら、残りはJenkinsへの設定です。

gitlab-hook-pluginのインストールと設定

まずは、Jenkinsのトップページから、
Jenkinsの管理 -> プラグインの管理へ進み、
利用可能のタブを選択して、右上のフィルタに「gitlab」と入力。
候補の中にある、「Gitlab Hook Plugin」を選択してインストール。
以上でインストールは完了。

あとは、実際にジョブを作成します。
トップページから、新規ジョブ作成 -> フリースタイル・プロジェクトのビルドを選択。
設定のところで、ソースコード管理の中にあるGitを選択。

GitLabからリポジトリをクローンする時のURLをRepository URLへ、
Credentials以下のAddを押して、KindSSHユーザ名と秘密鍵を選択、
ユーザ名に「git」、秘密鍵Jenkinsマスター上のファイルからを選択して、
秘密鍵の場所をフルパスで指定。
もし、鍵にパスワードがあるなら、下の高度な設定を押してパスフレーズにパスワードを入力。

あとは、リポジトリ・ブラウザで「gitlab」を選択、
URLにGitLab上のプロジェクトのURLを、Versionには「6.6」を入れて完了。

残りの設定を適当に埋めて、保存で完了です。

ここまで出来たら、Jenkinsのトップページへ戻って、
作ったプロジェクトの右端にあるアイコンを押して、為にしにビルドしてみましょう。
ビルドが成功すれば設定はOKです。

hookの設定

ここまで出来たら、後はGitLab側で、Pushされた時に、自動的にビルドが走るようにします。

GitLabのプロジェクトのSettings->Web Hooksを選択。
URLに「http://<JenkinsサーバのIPアドレスorドメイン>/gitlab/build_now」を入力
Triggerは「Push events」でOKです。
入力が終わったらAdd Web Hookをクリック。
最後に、下に追加された内容を確認した上で、Test Hookをクリック。
Jenkins側でビルドがされているか確認して下さい。
ちゃんとビルドが走っていれば次から、Pushする度にビルドが走ります。
これで、何時でも勝手にJenkinsおじさんがお仕事してくれます。


以上で、GitLabとJenkinsの連携は完了です。
基本的には、

  • JenkinsユーザでGitLabへアクセスを可能にする
  • GitLab-Hook-Pluginを入れる
  • JenkinsのジョブでGitからファイルを取得してビルドを行うようにする
  • GitLab側でWeb Hooksを設定する

の4点が出来ていれば動くと思います。

次回は、JenkinsとDockerの連携を扱います。
これが出来るようになれば、わざわざJenkinsが動くサーバに環境を入れなくても、
手元で作ったDockerコンテナでビルドが実行できるので、お手軽です。

今回は以上になります。