メモ書き程度に置いておきます・・・(ほぼ色んなサイトからの引用です。)
そもそもインテグレーションとは
インテグレーションとは、統合、統一、融合などの意味を持つ英単語。
複数の異なる要素を組み合わせて1つにしたり、一体として機能するよう調整すること。
コンピュータやソフトウェア、ネットワークなどを組み合わせて一体化し、目的を達成するための
情報システムを構築することを「システムインテグレーション」(SI:System Integration)
と言い、略してインテグレーションと呼ぶことが多い。
このような業務多事業を行う企業などのことを「システムインテグレータ」
(SIer:System Integrator)、あるいは略してインテグレータと言う。
CI(継続的インテグレーション)とは
Continuous Integrationの略で、継続的インテグレーションと呼ばれている。
CI(継続的インテグレーション)では、開発者が自分のコード変更を頻繁に
セントラルリポジトリ(masterみたいなイメージ)にマージし、その度に自動化された
ビルドとテストを実行する。
小さなサイクルでインテグレーションを繰り返し行い、インテグレーションのエラーを
素早く修正することによりチームは統合されたソフトウェアをより迅速に開発することができる。
CD(継続的デリバリー)とは
CDとは、Continuous Deliveryの略で、継続的デリバリーと呼ばれている。
継続的デリバリー(CD)は、継続的インテグレーション(CI)を拡張した手法で、
ビルドやテストでなく、リリースプロセス全体を自動化する。
実施の目的はDevOps(開発者と運用担当者が連携して協力する開発手法)と同様で、
リリーススピードを上げることで、素早く市場からフィードバックを得られ、
ソフトウェアに反映させることができる。
ビジネス戦略を細かく修正しながら進めることで、
リスクの低減とソフトウェアの競争力向上を目的としている。
継続的デリバリー(CD)では、全てのコード変更は、ビルドとテストを実行した後、
テスト環境またはステージング環境にデプロイして、システムテストやUIテストを行う。
開発者は、準備ができた地点で、最後のステップとして運用環境への更新を承認する。
この点は、運用環境へのデプロイが明示的な承認なしで自動的に行われる
「継続的デプロイ」とは異なる。
継続的デリバリー(CD)が行えるようになった背景には、クラウドやコンテナといった技術の
普及や、インフラ環境をコードで管理できるようになった点がある。
そのため、コミットからリリース前で全ての作業が自動で行うことができる。
CI(継続的インテグレーション)と継続的デリバリー(CD)の違いとは
CIとCDの違いは、カバーするプロセスの範囲の違いになっている。
コードレベルのテストまでを自動化するのがCIで、システムテストやデプロイなど、
実行環境やリリースまで影響するような自動化を行うのがCDになる。
CI(継続的インテグレーション)/継続的デリバリー(CD)を行うことで品質の向上と
開発の効率化を同時に達成し、リリーススピードの向上に繋がる。
今日の変化の早い社会においては、システムやサービスも素早く変化が必要になっている。
そういった背景もあり、現在、CI(継続的インテグレーション)/継続的デリバリー(CD)の
活用が広まっている。
Jenkinsとは
Jenkinsとは、CI(継続的インテグレーション)やCD(継続的デリバリー)を
実現するためのツール。
Jenkinsは、
「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」
といった利用目的として、注目されているオープンソースのツール。
CircleCIとは
一言で言えば、Saas型のCI/CDサービス。Saas型とであるという点が特徴。
CircleCIはクラウド上のコンテナあるいはVMを実行環境として使用する。
コンテナかVMかはユーザーが選択可能だが、コンテナの方が起動が早く、
VMは今度有料になる可能性がある。
CircleCIではコンテナの利用を推奨している。
JenkinsとCircleCIを比較して(CircleCI視点)
CircleCIが優れている点
- 環境構築コストが低い
- Saasだから
- Web-UIで初期設定を少しやるだけ
- 冗長化とかも勝手にされている
- Jenkinsの場合、自前でJenkins用のサーバを立てる必要がある
- 運用コストが低い
- Saasだから
- サーバーメンテナンスや故障時の対応をやる必要がない
- ymlファイルで設定できる
- Jenkinsの場合、Web-UIで細かい設定までできるが、職人芸になりがち
CircleCIが劣っている点
- バージョン管理でSVNを使っているプロジェクトでは使えない
- Github/BitBucket連携が前提
- リアルタイムにビルド実行ができない
- 定期実行はできる
- CircleCIで故障が発生しても自分たちで原因解析や復旧をすることが困難
- Saasだから
- Saasの利用料には要注意