CI環境のススメ -Jenkins-
おはこんばんちは!そしてはじめまして!
OthloTechに最近参加しました@ジュジュです!
去年までは低レイヤをやってたんですが最近Androidアプリを作り始めたりしています。以後お見知りおきくださいな。
誰か強い人教えてください
さて、今週OthloBlogは自分が担当ということでCI,CDについてお話するとともに、CIツールとして有名なJenkinsの使い方を少し紹介したいなって思っています。
下記URLからダウンロードできますよー
https://jenkins.io/
というわけでさっそく書き始めたいと思います!
CI,CDって何?
まず、こんな疑問を持つ方もいるんじゃないでしょうか。
単語の省略なので英語とその直訳を調べてみました。
CI = Contiuous Integration(継続的インテグレーション)
CD = Contiuous Delivery(継続的デリバリー)
ますます何だこれって感じです。
なんだかよくわからないのでかんたんに説明すると
CI = 自動でビルドやらテストやらをやってくれる環境
CD = 自動でデプロイしてくれる環境
こんな認識でもいいんじゃないでしょうか。ともに開発サイクルの短いアジャイル開発なんかでよく使われるようですね。間違っていたらごめんなさい。
そんなの、手元でビルドしてデプロイすれば良くないですか。。。
こんな意見を持った方、もっともだと思います。のでCI,CD環境を作る意味を話していこうと思います。
ソフトウェア開発していてこんな経験ありませんか?
- チームで利用しているソフトウェアのバージョンが異なりバグる
- ビルドやテストの通らないプルリクを適当にレビューしてマージしdevelopブランチがバグる
- 自分の開発してない部分のテストをしたくない
- デプロイ面倒臭がっていたら開発終盤でバグ祭り
自慢じゃないですが自分はあります
まぁ人間はミスをする生き物でこれを100%防ぐのは不可能です。
そこで
ミスがミスにならない環境を作ろう!
問題にいち早く気づくような環境を作ろう!
と、こんなのがCI,CD環境を作る意義であります。
で、そんなCI,CDを実現するためのツールとして今回紹介するのがJenkinsというわけです。
Jenkinsの機能
Jenkinsは何かをトリガー(きっかけ)としてバッチ処理をしてくれるツールです。WindowsでもLinuxでもMacでもシェルで動作するものであればだいたいなんでもできます。
シェルが使えるならなんかいろんなことさせられそうです。プラグインも豊富に用意されており用意にいろんなことができるようになっています。
本記事では具体的な設定とかではなくJenkinsをつかってどんな面倒臭さを解消できるのかを紹介していきたいと思います。
GitHubのプルリクエストをトリガーにする
Jenkinsをつかうならまず、やってほしいのはこれです。
プルリク手元に引っ張って動作確認するの面倒くさくないですか?
そんな煩わしさ解消できます。
JenkinsにGitHub Pull Request Builderというプラグインを導入するとビルドとテストを自動的にするようにできるんです!これでコードレビューは動作確認をサボっても良くなるかもしれないですね!
しかも、プルリクエストを実際にdevelopやmastarといったブランチとマージしてテストするなんてことも出来ちゃいます。
これでマージしたらあかんかったみたいな事態ともおさらばできますね!
ちなみにテストが成功するとこんな感じになります。
失敗するとこんな感じ。
これなら気づきそうですね。
プルリクのブランチにコミットをプッシュしてもリビルドされるので細かい変更した時のテストも楽ちんです!
特定のブランチへのpushをトリガーにする
次に紹介する機能です。
いちいちデプロイするの面倒くさくないですか?
masterかdevelopかreleaseか、どれが対象になるかはわかりませんがプルリクがマージされたときに自動でデプロイしてくれれば楽ちんですよね。
デプロイのためのプラグインがあるかどうかは言語とかによる部分がかなり大きいですがだいたいシェル使えば出来ると思うので問題ないでしょう。
検証環境での実際のテストが簡単になりますね!PluginとしてはGit PluginやGitHub Pluginとか使えばかんたんです。
与えられたコードを解析する
これに関しては行き過ぎではあるんですけど
そもそもコードレビュー面倒くさくないですか?
SonarQubeってソフトをJenkinsに登録して動作させればコードの静的解析なんてのもできたりします。バグっぽいところやバグの香りがするところなんかを指摘してくれますよ!Quality Gateってやつを設定すれば評価基準なんかも設定できたりします!動作もプラグインがあるから簡単です。
ちなみにWeb系作ってるとjQueryでバグがたくさんあるって怒られるからあんまり当てにならないかもしれません。
テストと解析による評価基準通れば自動でマージするとかもできますが、頼り過ぎはまだよくなさそうです。時代の進化に期待しましょう!
結果をslackに通知する
個人的には結構大事な機能です。
プルリク投げたときに他の人に伝えるの面倒くさくないですか?
Jenkinsの処理が終わったあとに事前に設定したslackのチャンネルに通知できたりします。テストやビルドが失敗したときだけ通知って形にもできますよ!
これを設定しておけばプルリク投げるたんびにslackでメンションつけてレビューしてーって言わなくてもすむわけですよ。
設定しておくだけでいいのでコミュ障害の僕でも臆さなくてすむわけですね。
終わりに
いかがだったでしょうか?この記事を読んでこのJenkinsってやつなかなか有能な執事さんだなって思っていただけたらとても嬉しいです。
それでは皆さん快適な開発ライフをお過ごしくださいな!