CI(Continuous Integration)とは

本日の宿題その①。
いろいろ調べたまとめ。

運用、テスト、共同開発とか、自分で趣味でやってる範疇では扱わないことことばかりで、しばらくはインプットが多そう。でも調べるのも楽しい。

CIの目的

頻繁に本番レポジトリにコードをマージし、その影響を逐一確認していくことによって、一度に大量の変更が本番レポジトリに加えられて、それによって発生する問題が見えにくくならないようにする。

CIの流れ

①マージする新しいコードには必ず単体テストを行う。つまり、テストに通らないコードはマージしない。

②そのコードが本番ブランチにマージされると、自動的にコンパイルされ(自動的に試験サーバーにデプロイされ)、既にコミットしてあるすべての単体テスト結合テスト、コーディング規約に反する記述はないか(静的解析)、などを自動的にチェックする。

③これらのチェックにfailした場合、そのコードのマージは取り消される。(つまり、本番レポジトリには必ずクリーンなコードだけが存在するようになる。)

CIの種類/ツール

CIに使われる(試験サーバーへの)デプロイ、テスト、管理者へのフィードバックなどを一貫して自動で行うツールを「オーケストレーションツール」という。

オーケストレーションツールはオンプレのサーバーで動くものと、クラウドで動くものとに分かれていて、自分のところではオンプレのものが使われているようだ。(Jenkins?)

疑問

1: 実際のところ、どこまで自動化されているのだろう?(すべてのテストに通過したらAWS,Salesforce, kintoneといった本番環境までデプロイしているのだろうか?)

2: 結合テストってどう書いてあるんだろう。Unitテストしか書いたことがないので、あんまり想像できない。テスト用のライブラリ(Minitestを使ったことがないので、それも触ってみなきゃな。NUnitとどう違うのだろう。)

少なくともプルリクがacceptされてコードがマージされない限り、Jenkins(かなにか)が起動することはないのだから、しばらく自分には関係ない気はする。