Edited at

proxy 環境化の CentOS に Ansible で Jenkins をインストール

More than 5 years have passed since last update.


はじめに

GitHub の絶大な人気と相まって、近年では Travis CI などの名前も多く見かけるようになりましたが、今なお CI (Continuous Integration:継続的インテグレーション) と言えば Jenkins の名前を思い浮かべる方が多いかと思います。

Jenkins を動作させるためには以下のようにいくつかの方法があり、どれもとても簡単です。


  1. .war ファイルをダウンロードし、サーブレットコンテナにデプロイして動作させる

  2. .war ファイルをダウンロードし、組み込みの Jetty サーバで動作させる

  3. ネイティブパッケージをダウンロードし、サービスとして動作させる

今回は 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.host9999 は自身の環境に読み替えてください。

認証が必要な場合は 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 の画面が表示されることを確認します。

20140408_001.JPG

Jenkins 自体の使い方については、下記書籍や Java - Jenkins使い方メモ - Qiita などが参考になるでしょう。


まとめ

以上のように、とても簡単な手順でプロキシサーバの存在する企業 LAN 内に Jenkins を構築することができました。

はじめに書いた通り、Jenkins 自体のインストールはとても簡単ですが、それでもプロキシサーバや apache との連携は自分で設定しなければなりません。また、apache と連携する際にサブドメインでアクセスするのか、サブディレクトリでアクセスするのか、またはサーバ自体を Jenkins 専用としてしまうのかなど、判断に困る場合もあるでしょう。

これらの作業や判断をコード化、自動化することで、もともと簡単な Jenkins のインストールを更に簡単にすることができます。

なにより、どれだけ簡単な作業でもコード化し、バージョン管理していくという方針を徹底することが肝要です。パラメータを少し変更するだけでも playbook を修正し、serverspec によるテストを追加し、バージョン管理するとなると、とても負荷が高く感じますが、これを徹底することでサーバ構築作業の属人化を排除することができます。

クラウド、ブルーグリーンデプロイ、イミュータブルインフラストラクチャなどの単語が飛び交う昨今、サーバ構築作業のコード化、自動化の価値はとても高く、導入を検討する価値は充分にあると思います。