見出し画像

継続的インテグレーション超入門(2)

外資系企業でソフトウェアエンジニアをしております、タロイモと言います。今日もよろしくお願いします。

前回の1回目の記事では、継続的インテグレーション(CI, Continuous Integration)のメリットについて説明しました。第2回目は継続的インテグレーションのフローについて説明していきたいと思います。

この記事(2)のゴール
・継続的インテグレーションを使用する流れを説明できる。
・主な継続的インテグレーションソフトが分かる。

1. 継続的インテグレーションのワークフロー

継続的インテグレーションのワークフローは以下の画像の通りです。

スクリーンショット 2020-05-24 21.04.59

今回はプログラムのデプロイまで行う説明をしていきます。

⓪継続的インテグレーション設定ファイルを準備
まずは、継続的インテグレーションソフトが自動的に動くように、ソースコードのディレクトリに設定ファイルを準備します。

例えば、 CircleCIだと以下のように.circleci/config.yml ファイルに設定を書き込みます。コードの説明は割愛します。

スクリーンショット 2020-05-24 21.19.51

①コードのチェックイン
設定ファイルをディレクトリ内に、GitHubなどのソースコード管理ソフトにコードをプッシュします。

//例
$ git push origin master

②CIソフトウェアがコードのチェックインを感知
ソースコード管理ソフトにコードがチェックインしたら、継続的インテグレーション(CI)ソフトがそれを感知します。

③ビルドがスタート
感知すると、CIソフトがコードをチェックアウト(プル)し、設定ファイルを元にビルドがスタートします。ソフトによりますが、CircleCIではその様子(RUNNING)をweb上で見ることができます。

スクリーンショット 2020-05-24 21.27.04

⑤コードのコンパイル
言語によりますがコンパイルが必要な言語は、コンパイルするように設定ファイルに書き込めば、CIソフトが自動的にコンパイルしてくれます。

⑥テストを実行
テストファイルを実行するように設定ファイルに書き込めば、以下のように自動的にテストを行ってくれます。

スクリーンショット 2020-05-24 21.34.50

⑦デプロイ
テストが通るとそこで終わるか、AWSやGCPなどのサーバーにデプロイするように設定ファイルに書き込んでおけばデプロイまで行ってくれます。そして、以下のようにSUCCEEDEDと表示され、成功したことがわかります。

スクリーンショット 2020-05-24 21.38.14

以上で継続的インテグレーションのワークフローは完了です。

設定ファイルをディレクトリに入れて置くだけで自動的にビルド、テスト、デプロイまで行ってくれました。

数分で結果もわかるので、エラーが出たらすぐ修正なんてことも可能になります。

2. 主な継続的インテグレーションソフト

最後に簡単に有名な継続的インテグレーションソフトを紹介します。

(1) Jenkins

Jenkinsは2011年に誕生し、Jenkinsおじさんで有名なCIソフトウェアです。大規模開発現場でも使われており、プラグインが充実しています。一方でプラグインの充実のあまり、Jenkins職人が秘伝のタレのような複雑な設定をしてしまうことがあります。

(2)TravisCI

TravisCIは、使いやすいUIを備えたCIソフトウェアです。GitHubと連携することを想定しており、 GitHubユーザーなら使いやすいでしょう。また、クラウド上のサーバーで運用されているため、ビルドサーバーの用意もインストールも必要ありません。

(3)CircleCI

先ほど少し説明したCircleCIは今人気のCIソフトウェアです。日本語にも対応し始めており、メルカリなどの有名スタートアップも利用しています。UIも使いやすく、こちらもクラウドビルドサーバーなので、インストールが必要ありません。

継続的インテグレーション & デリバリーLinux でも macOS でも Android でも、クラウドまたはオンプレミスでご利用いただける、最高の継続的インテcircleci.com

(4)TeamCity

大企業でよく利用されているCIソフトウェアです。最近ではKubernetes上でも実行できるようになり、今後もその勢いはなくなりそうにありません。


以上で、継続的インテグレーションの説明は終わりです。

継続的インテグレーションは使いこなせると、スタートアップ等で重宝される市場が高いエンジニアになることができますので、ソフトウェアエンジニアの方もぜひ挑戦してみてください。きっと気にいるはずですよ。

よろしければサポートお願いします! サポートは、サービスの開発・改良や、記事を書く際の素材費とさせていただきます。 少しでも有益な情報発信をしていけるよう努めてまいります。 是非とも応援よろしくお願いします!!!🙇‍♂️