読者です 読者をやめる 読者になる 読者になる

雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい28歳。

非常に簡単に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とした。

次のページでは、定期的に実行を選択。
スケジュールの中にこんな風に書く。

f:id:fkei:20140315143216p:plain

5分に一回実行する設定だ。
cronと同じような書式のようだけど、cronは細かく使ったことが無いので正確に同じかは分かりません。

次は[ビルド]項目から[ビルド手順の追加]->[シェルの実行]を選択。 以下のような簡単なスクリプトを登録する。

f:id:fkei:20140315143213p:plain

で、保存する。

そのあとで該当するフォルダやファイルを作って、ルート権限から書き込みが出来るよう設定をする必要があります。
フォルダの権限の設定やファイルの設定が終わったらビルドを実行してみる。

f:id:fkei:20140315143210p:plain

プロジェクトの設定画面の上の方にビルドの実行履歴が表示される。
リストの#??というナンバーの左に青いアイコンがあれば出れば実行は成功。 指定したファイルに一定時間ごとに時間が書かれるようになればOK。 定期的にシェルを実行出来るはずです。 SCMをポーリングに設定すればGitやSVNとの連携も出来るはずです。

3.Jenkinsを設定していて気づいたこと

大分前からこんな本やら、

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

こんな本が、
開発ツール徹底攻略 (WEB+DB PRESS plus)

開発ツール徹底攻略 (WEB+DB PRESS plus)

家に転がってたので交互に読みながら入門編なことやってる訳だけど、実は以前何度かトライして、セットアップ方法は分かっても全く使えず挫折していました。 今回、その失敗の理由がようやく分かったので書いておきます。

これらの本やその他の説明サイトでは、「こんな雰囲気のことに使えるよ!では使ってみよう!」といった感じでツールが出来ることの雰囲気から、いきなりツールのセットアップ方法やら使い方に移る。
しかしこれだと「セットアップは出来た。で、結局どう使うの?」となってしまっていた。
結局、このツール(Jenkins)を使う条件を満たすのにどんな環境でやらなければならないかということの説明に実感がなく、目的が欠如した状態で勉強してしまっているからそうなる。
このツールの重要な用件として例えば、

  • 適切にテストコードがメンテナンスされること
  • 定型作業のフローや内容がある程度定義されていること、それがバッチ処理によることが出来るものであること

などが地味に重要であることが分かる。
これって実は結構大変なことなんだよね。
考えてみると意外と定型化されていない、フロー化されていないようなタスクで周囲は溢れかえっている。 今わたわたしてしているプロジェクトに対して適用しようとすると、かえって混乱の元になるかもしれない。

4.で、どうするよ?

別に普段から使えない訳ではない。 いわゆるジョブスケジューラ的なものがセットアップ出来るソフトがOSに関わらず共通 少なくともcronやタスクスケジューラの設定をこまこまやるよりは多少マシに扱えるはず。 後々、最初からバッチ処理で自分の仕事の補助作業をしていくよう組み立てて行けば良い。 とりあえず自分のタスクを定義するところから始めましょう。