今からでもJenkinsに入門してみよう

by ysawa

継続的インテグレーション(Continuous Integration。以下CI)ツールって使っていますか?

ぼくの中では、もはやなくてはならない存在なのですが、開発者の中でも面倒で導入に踏み切れていない人がいるかもしれません。でも、実は、導入はすごく簡単ですし、この辺のツール使いこなせると 人生が変わるくらいのインパクトはあると思います

今回、CIの中の一つである、Jenkins をさくらVPSのカスタムOSの Cent OS 7.3 と Mac OS X にインストールしてみながら、話を進めていこうと思います。

もし、使ったことない人は、この記事で導入までの後押しができれば幸いです。

CIツールってなに?

まず、CIとは、Wikipediaを参照すると、

主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。

ということが書かれています。

非常に定義が広いのでなんでもありですが、ここ数年でプログラマやエンジニアが使うCIツールということになると、もう少し定義が狭まるような気がして、「 人間がやっていては遅いしミスが多い ような作業を機械にやらせちゃおうよ」という感じかと思います。

具体的には、

  • FTPを使ったアップロード
  • Androidのリリースビルド
  • Cocos2d-xのリリースビルド
  • プロダクトのユニットテストからのデプロイ
  • 定期的なサーバから情報ぶっこ抜くなどのバッチ処理

など、結構面倒だった手作業を自動で行えるようになります。CIツールは、簡単に例えると執事のような存在です。

さらに、エラー時にSlackやEメールにメッセージを飛ばしたり、ログやビルド後のファイルを全て残しておけるので、2度3度同じミスを繰り返すことが少なくなります。まさに、継続的インテグレーション。

CIツールがなんで必要なの?

個人的な話をしますと、もはや、 Jenkins がなくては、僕の毎日の平和な生活は成り立ちません。例えば、

  1. リモートサーバに SSH で接続し
  2. Git でプロジェクトをプルして
  3. rsync でドキュメントルートにコピーして
  4. リソースをgzip圧縮する

のような操作は、受託案件をやっていると毎日やる作業ですが、これを Jenkins は一発でミスなくやってくれます。

受託案件も基本的に上記の操作でアップロードしています。手作業でFTPを使ってアップロードすると意外にミスが頻発しますし、ミスするまでの行動履歴が追えません。

Jenkins は、そういうことは一切ないですね。 Jenkins は、全ての行動が正確で正直。非常に頼りがいのある執事です。 全てが手元のログで確認でき、エラーなども後から追うことができます 。これが、まさに僕がCIツールを必要とするわけです。

退屈な仕事は、全部 Jenkins にやってもらい、人間は、もっとクリエイティブな仕事をしたいですね。受託案件で、どうしても FTP を使って手作業でアップロードを指定されたときは、追加料金をとって対応するぐらいでよいかと思います。

その他のCIツール

Jenkins の他に有名なCIツールには、

などがあります。

Travis CI は、有料で、 TeamCity や Circle CI は、フリーミアムモデルです。お金に余裕がある人は、ここらへんも試してみると良いかもしれません。Jenkins より、他のツールとの連携が強そうなので、需要はあるかもしれませんね。

Jenkins は、無料なので、最初に導入する CIツール としてはすごく良いのではないでしょうか。

インストール

JDKのインストール

Jenkins は Java で開発されたツールなので、 JDK をインストールする必要があります。

# yum install java-1.7.0-openjdk -y

これで、 Jenkins をインストールする準備は、完了しました。

Jenkinsのインストール

Jenkins をインストール後、サービスをスタートします。

# cd /etc/yum.repos.d
# curl -O http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum install jenkins -y

今回インストールされた、Jenkins のバージョンは、 2.48 でした。

設定ファイル

設定を変更したい場合は、 /etc/sysconfig/jenkins を変更してみてください。

# vi /etc/sysconfig/jenkins

Jenkinsサーバの起動

以下のコマンドでサーバを立ち上げます。

# service jenkins start

これで、 Jenkins をブラウザ上で開くことができるようになりました。

OS の再起動時にも勝手に立ち上がるようにする場合は、

# systemctl enable jenkins

としておくと良いです。

Mac (Homebrew) の場合

Jenkins は Mac OS X にも入れることができます。Homebrewを使うなら、

$ brew cask install java
$ brew install jenkins
$ brew services start jenkins

で一発です。素晴らしいですね。

初期設定

サーバが無事立ち上がったら http://サーバのIP:8080 にアクセスします。ファイアウォールやネットワークの設定で、うまくアクセスできないことがあるので注意が必要です。

最初、パスワードが必要で、

# cat /var/lib/jenkins/secrets/initialAdminPassword
[ここに出てくる英数字をコピー]

のようにして取り出します。Mac の人は、

$ cat ~/.jenkins/secrets/initialAdminPassword
[ここに出てくる英数字をコピー]

です。このパスワードを最初の画面にある真ん中のテキストフィールドに入れて、エンターを押してしまいましょう。

結構前から Jenkins を使っているのですが、インストール画面がすごくリッチになった気がします。あと、英語読めないよという人も、ブラウザが、日本語設定ならちゃんと日本語で出るらしいです。

次に、プラグインを併せてインストールするかを選択します。左のボタンで良さそうです。

プラグインは後でインストールしていきます。

最小限のプラグインなどがインストールされている様子。

最初の管理ユーザの設定をして、

完了です。 昔、こういうツールをインストールするまでで、結構骨が折れた気がしますが、今は、かなり簡単にできますね。

プラグインを追加

続いて、やっぱりいくつか必要なプラグインが足りないので、インストールしていきます。

ダッシュボード画面に行って、「Manage Jenkins」をクリックします。

つぎに、「Manage Plugins」をクリックします。

「Available」タブを開いて、検索バーにキーワードを入れていくと絞り込まれます。

今回は、「Role-based Authorization Strategy」というプラグインをインストールします。「Install without restart」をクリックして、

完了です。インストールされました。

プラグインのインストールも簡単でした。

その他、

  • SSH plugin
  • Backup plugin

などが必須かなと思います。1つめは、リモートサーバにSSHでログインして操作を行うときに必須です。そして、バックアップは、本当に舐めちゃいけなくて、何十ものプロジェクトが消えたときは、本当に泣きました。

ここまでで、インストールが完了しました。本当にお疲れ様でした。

hello_worldプロジェクトを作ってみる

では、簡単に「Hello world!」と表示するプロジェクトを作って見ます。

まず、ダッシュボード画面に行って、「New item」をクリックします。

プロジェクト名「hello_world」を一番上の欄に入力して、「Freestyle project」を選択します。「OK」をクリックで、空のプロジェクトが作成されます。

プロジェクトの設定画面が出てくるので、

下にスクロールし、「Add build step」→「Execute shell」を選択します。

すると、下のようなテキストエリアが出てくるので、

echo Hello world!

と入力しましょう。これで完了です。「Save」をクリックします。

そして、プロジェクトのルートに戻ってくるので、左側のナビゲーションメニューにある「Build Now」をクリックします。

ボールのアイコンがピコピコして止まったら仕事(ジョブ)が完了した印です。「Console Output」を確認してみましょう。

+ echo Hello 'world!'
Hello world!

のように表示されていて、無事「Hello world!」が出力されたことを確認しました。

実際は、もっと複雑なプロジェクトを作っていくのですが、基本的なフローは変わりません。今回使った echo のようなシェルコマンドがちょっと扱える必要がありますが、それさえできれば、日々の退屈な仕事がだいぶなくなります。

まとめ

最後に、CIツールに関してまとめてみます。

  • 人間のミスを減らす
  • 全てがログとして残る
  • Jenkins は無料!
  • Jenkins のインストールは簡単!

そして、 CIツールは人生を変えるくらいインパクトがあるもの です。まだ、導入していない人は、これを機に導入してみてはいかがでしょうか。

この記事を読んだあとに

ysawa

エヌ次元株式会社代表取締役
東京工業大学工学部計算工学専攻卒業
符号理論の応用に関する研究
在学中よりフリーランスエンジニアとして活動
「持続可能な設計」を得意領域とする
会社設立後も設計からアプリ制作や
Webサイトのコーディングまでを幅広く担当
セキュリティスペシャリスト

 このブログについて

このブログは、プログラマやエンジニアのためになる情報を垂れ流しています。
ちょっと異端的なものも含まれているかもしれません。