はじめに
GitHub の絶大な人気と相まって、近年では Travis CI などの名前も多く見かけるようになりましたが、今なお CI (Continuous Integration:継続的インテグレーション) と言えば Jenkins の名前を思い浮かべる方が多いかと思います。
Jenkins を動作させるためには以下のようにいくつかの方法があり、どれもとても簡単です。
- .war ファイルをダウンロードし、サーブレットコンテナにデプロイして動作させる
- .war ファイルをダウンロードし、組み込みの Jetty サーバで動作させる
- ネイティブパッケージをダウンロードし、サービスとして動作させる
今回は Ansible を使って Jenkins のネイティブパッケージをインストールし、以下の構成で動作させる手順を紹介します。
- OpenJDK 1.7.0
- Jenkins
- apache
前提
プロキシサーバが存在する企業内 LAN で、以下の手順に従って仮想環境を構築しているものとします。
以下、上記手順に従って構築した仮想環境を作業マシン、jenkins を構築する環境を対象マシンと呼びます。
手順
対象マシンの準備
まず対象マシンを用意します。ここでは Vagrant 上に仮想サーバとして作成しますが、すでに対象マシンが存在する場合、この手順は不要です。
適当な box をダウンロードしていない場合は、proxy 環境化の CentOS に Ansible で Redmine をインストール - Qiita と同様の手順で box をダウンロードします。
box が用意できたら、適当なディレクトリを作成、移動して box を初期化します。
bash-3.1$ mkdir -p /c/vagrants/jenkins
bash-3.1$ cd /c/vagrants/jenkins/
bash-3.1$ vagrant init CentOS-6.3-x86_64-v20130101
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
作成された Vagrantfile を開いて IP アドレスを設定します。ここでは 192.168.33.200 としました。
bash-3.1$ vi Vagrantfile
bash-3.1$ grep private_network Vagrantfile
config.vm.network "private_network", ip: "192.168.33.200"
最後に box を起動します。
bash-3.1$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'CentOS-6.3-x86_64-v20130101'...
==> default: Matching MAC address for NAT networking...
(snip)
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => C:/vagrants/jenkins
鍵交換
proxy 環境化の CentOS に Ansible で Redmine をインストール - Qiita を参照して、作業マシンの公開鍵を対象マシンに登録します。
プロビジョニング
以下のようにして作業マシンに playbook を clone します。
# vagrant at precise64 in ~ [13:22:25]
$ g clone https://github.com/garbagetown/ansible-jenkins.git
Cloning into 'ansible-jenkins'...
remote: Reusing existing pack: 75, done.
remote: Total 75 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (75/75), done.
clone したディレクトリに移動し、プロキシサーバの情報を設定します。your.proxy.host
と 9999
は自身の環境に読み替えてください。
認証が必要な場合は http://username:password@your.proxy.host:9999/
のように設定します。
# vagrant at precise64 in ~ [13:23:18]
$ ansible-jenkins
# vagrant at precise64 in ~/ansible-jenkins on git:master o [13:24:12]
$ echo 'http_proxy: http://your.proxy.host:9999' >> roles/proxy/vars/main.yml
続いて、hosts ファイルの内容を確認します。対象マシンの IP アドレスと異なる場合は適宜修正してください。
# vagrant at precise64 in ~/ansible-jenkins on git:master x [13:24:28]
$ cat hosts
[jenkins]
192.168.33.200
最後に playbook を実行します。
# vagrant at precise64 in /vagrant/ansible-jenkins on git:master x [13:29:50]
$ ansible-playbook -i hosts site.yml
PLAY [install jenkins] ********************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.33.200]
(snip)
NOTIFIED: [jenkins | restart httpd] *******************************************
changed: [192.168.33.200]
PLAY RECAP ********************************************************************
192.168.33.200 : ok=19 changed=17 unreachable=0 failed=0
# vagrant at precise64 in /vagrant/ansible-jenkins on git:master x [13:34:35]
確認
プロビジョニングが正常に完了したら、ブラウザから 192.168.33.200
にアクセスし、Jenkins の画面が表示されることを確認します。
Jenkins 自体の使い方については、下記書籍や Java - Jenkins使い方メモ - Qiita などが参考になるでしょう。
まとめ
以上のように、とても簡単な手順でプロキシサーバの存在する企業 LAN 内に Jenkins を構築することができました。
はじめに書いた通り、Jenkins 自体のインストールはとても簡単ですが、それでもプロキシサーバや apache との連携は自分で設定しなければなりません。また、apache と連携する際にサブドメインでアクセスするのか、サブディレクトリでアクセスするのか、またはサーバ自体を Jenkins 専用としてしまうのかなど、判断に困る場合もあるでしょう。
これらの作業や判断をコード化、自動化することで、もともと簡単な Jenkins のインストールを更に簡単にすることができます。
なにより、どれだけ簡単な作業でもコード化し、バージョン管理していくという方針を徹底することが肝要です。パラメータを少し変更するだけでも playbook を修正し、serverspec によるテストを追加し、バージョン管理するとなると、とても負荷が高く感じますが、これを徹底することでサーバ構築作業の属人化を排除することができます。
クラウド、ブルーグリーンデプロイ、イミュータブルインフラストラクチャなどの単語が飛び交う昨今、サーバ構築作業のコード化、自動化の価値はとても高く、導入を検討する価値は充分にあると思います。