非常に簡単にJenkinsを使ってみるテスト
MacBookAirの左Shiftキーが壊れて打ちづらいなと思いながらブログ書いてました。
オープンソースの継続的インテグレーション(CI)ツールJenkinsを簡単に触ってみたました。 ずっと前(4年くらい前)から気になってたけど、使い方がイマイチ分からなかったので勉強し始めました。
1.継続的インテグレーションって?
まずJenkinsとは、「オープンソースの継続的インテグレーション(CI)ツールである」って結局なんなんだよと思ってしまう不勉強な私です。
私が理解した限りでCIとは「何度も繰り返し実行する定型作業を自動化して開発を効率化すること」のようだ。
定型作業と言えば、大規模ソフト開発においてはビルドマンがやるビルド作業だったり、テストフレームワークを使った自動テストだったり、そのログの集計だったり、レポートの作成だったり、テスト済みソフトパッケージの次行程への受け渡しだったりといったことが思い浮かべられる。
これが楽になるなら導入できるに越したことはないよね。
2.使ってみる
2.1.環境
- LinuxMint16
2.2.インストール
公式サイトのチュートリアル通りにやった方が結果的には良かったです。
apt-keyを突っ込んでやらないと何やら動いてくれませんでした。
いきなり
sudo apt-get install jenkins
ってやったらdaemonが無いとかなんとか言われてハマります。
2.3.起動とか
sudo /etc/init.d/jenkins start
と言った形でコマンド一発で動くから導入は楽。
サーバが起動したらWebブラウザでhttp://localhost:8080
にアクセスすればヒゲおじさんが見られるばず。
/etc/init.d/jenkins
にインストールされるようなので、エイリアスで、
alias jenkins='/etc/init.d/jenkins' alias sudo='sudo '
と定義しておくとニワトリ並みの私の記憶力でも次の日使うことが出来ました。
sudoの後ろにスペースをつけたエイリアスを書くとエイリアスにsudoを引っ付けられることを初めて知った。
2.3.超簡単な使い方
新規ジョブの作成 -> フリースタイル・プロジェクトのビルド を選択。 ジョブ名はsamplejobとした。
次のページでは、定期的に実行を選択。
スケジュールの中にこんな風に書く。
5分に一回実行する設定だ。
cronと同じような書式のようだけど、cronは細かく使ったことが無いので正確に同じかは分かりません。
次は[ビルド]項目から[ビルド手順の追加]->[シェルの実行]を選択。 以下のような簡単なスクリプトを登録する。
で、保存する。
そのあとで該当するフォルダやファイルを作って、ルート権限から書き込みが出来るよう設定をする必要があります。
フォルダの権限の設定やファイルの設定が終わったらビルドを実行してみる。
プロジェクトの設定画面の上の方にビルドの実行履歴が表示される。
リストの#??というナンバーの左に青いアイコンがあれば出れば実行は成功。
指定したファイルに一定時間ごとに時間が書かれるようになればOK。
定期的にシェルを実行出来るはずです。
SCMをポーリングに設定すればGitやSVNとの連携も出来るはずです。
3.Jenkinsを設定していて気づいたこと
大分前からこんな本やら、
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (62件) を見る
- 作者: Junio C Hamano,大塚弘記,川口耕介,kana,大竹智也(tomoya),尾藤正人,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/04/10
- メディア: 大型本
- クリック: 1回
- この商品を含むブログ (11件) を見る
これらの本やその他の説明サイトでは、「こんな雰囲気のことに使えるよ!では使ってみよう!」といった感じでツールが出来ることの雰囲気から、いきなりツールのセットアップ方法やら使い方に移る。
しかしこれだと「セットアップは出来た。で、結局どう使うの?」となってしまっていた。
結局、このツール(Jenkins)を使う条件を満たすのにどんな環境でやらなければならないかということの説明に実感がなく、目的が欠如した状態で勉強してしまっているからそうなる。
このツールの重要な用件として例えば、
- 適切にテストコードがメンテナンスされること
- 定型作業のフローや内容がある程度定義されていること、それがバッチ処理によることが出来るものであること
などが地味に重要であることが分かる。
これって実は結構大変なことなんだよね。
考えてみると意外と定型化されていない、フロー化されていないようなタスクで周囲は溢れかえっている。
今わたわたしてしているプロジェクトに対して適用しようとすると、かえって混乱の元になるかもしれない。
4.で、どうするよ?
別に普段から使えない訳ではない。 いわゆるジョブスケジューラ的なものがセットアップ出来るソフトがOSに関わらず共通 少なくともcronやタスクスケジューラの設定をこまこまやるよりは多少マシに扱えるはず。 後々、最初からバッチ処理で自分の仕事の補助作業をしていくよう組み立てて行けば良い。 とりあえず自分のタスクを定義するところから始めましょう。