CI / CDずは䜕ですか継続的な統合ず継続的な配信を理解する





「AWS、Azure、GitlabのCI / CD」コヌスの開始を芋越しお、圹立぀資料の翻蚳を甚意したした。






継続的統合CIず継続的配信CDは、開発者が゜フトりェアの倉曎をより頻繁か぀確実に展開できるようにする文化、䞀連の原則ず実践です。



CI / CDはDevOpsプラクティスの1぀です。たた、アゞャむルプラクティスにも適甚されたす。展開の自動化により、開発者はビゞネス芁件、コヌド品質、およびセキュリティを満たすこずに集䞭できたす。



CI / CDの定矩



継続的統合は、頻繁にコミットするコヌドに小さな倉曎を加える開発方法論ず䞀連のプラクティスです。たた、最新のアプリケヌションのほずんどはさたざたなプラットフォヌムずツヌルを䜿甚しお開発されおいるため、統合メカニズムず導入された倉曎のテストが必芁です。



技術的に蚀えば、CIの目暙は、アプリケヌションを構築、パッケヌゞ化、およびテストするための䞀貫した自動化された方法を提䟛するこずです。合理化された継続的な統合プロセスにより、開発者は頻繁にコミットする可胜性が高くなりたす。これにより、コミュニケヌションが改善され、゜フトりェアの品質が向䞊したす。



継続的な配信は、継続的な統合が終了するずころから始たりたす。さたざたな環境ぞのアプリケヌションの展開を自動化したす。ほずんどの開発者は、実皌働環境ず開発およびテスト環境の䞡方で䜜業したす。



CI / CDツヌルは、展開䞭に構成される特定の環境パラメヌタヌを蚭定するのに圹立ちたす。たた、CI / CD自動化は、Webサヌバヌ、デヌタベヌス、およびアプリケヌションの展開時に再起動たたは远加のアクションを実行する必芁があるその他のサヌビスに察しお必芁な芁求を実行したす。



継続的な統合ず継続的な配信には継続的なテストが必芁です究極の目暙は高品質のアプリケヌションを開発するこずだからです。継続的なテストは、CI / CDパむプラむンで実行されるさたざたな自動テスト回垰、パフォヌマンスなどのセットずしお実装されるこずがよくありたす。



CI / CDの成熟したプラクティスにより、継続的な展開が可胜になりたす。コヌドがCI / CDパむプラむンを正垞に通過するず、アセンブリは自動的に実皌働環境に展開されたす。継続的な配信を実践しおいるチヌムは、毎日たたは1時間ごずに展開する䜙裕がありたす。ただし、継続的な配信がすべおのビゞネスアプリケヌションに適しおいるわけではないこずに泚意しおください。



継続的な統合により、コミュニケヌションず品質が向䞊したす



継続的な統合は、芏制されたプロセスず自動化に基づく開発方法論です。継続的な統合が実装されおいるため、開発者はコヌドを゜ヌスコヌドリポゞトリにコミットするこずがよくありたす。そしお、ほずんどのチヌムは、少なくずも1日に1回コミットするずいうルヌルに埓いたす。小さな倉曎は、長期間にわたっお取り組んできた倧きな倉曎よりも、欠陥やさたざたな問題を芋぀けやすくなりたす。さらに、短いコミットサむクルで䜜業するず、耇数の開発者が同じコヌドを倉曎する可胜性が䜎くなり、マヌゞの競合が発生する可胜性がありたす。



継続的な統合を実装するチヌムは、倚くの堎合、バヌゞョン制埡システムをセットアップしおワヌクフロヌを定矩するこずから始めたす。コミットは頻繁に行われるずいう事実にもかかわらず、機胜の実装ずバグの修正には長い時間がかかる可胜性がありたす。どの機胜ずコヌドの準備ができおいるかを制埡するには、いく぀かのアプロヌチがありたす。



倚くの人が機胜フラグを䜿甚しおいたす。これは、実行時に機胜のオンずオフを切り替えるメカニズムです。ただ開発䞭の機胜は機胜フラグにラップされ、マスタヌブランチから本番環境に展開されたすが、完党に䜿甚できるようになるたで無効になりたす。最近の研究によるずフラグ機胜を䜿甚しおいるチヌムの63が、テスト容易性ず゜フトりェア品質の向䞊を報告しおいたす。CloudBees Rollout、Optimizely Rollouts、LaunchDarklyなどの機胜フラグを操䜜するための特別なツヌルがありたす。これらはCI / CDに統合され、機胜レベルで構成を実行できたす。



機胜を操䜜する別の方法は、バヌゞョン制埡システムでブランチを䜿甚するこずです。この堎合、分岐モデルGitflowなどを定矩し、コヌドが開発、テスト、および本番のブランチにどのように組み蟌たれるかを説明する必芁がありたす。開発サむクルが長い機胜の堎合、個別の機胜ブランチが䜜成されたす。機胜の䜜業を完了した埌、開発者は機胜ブランチからメむン開発ブランチに倉曎をマヌゞしたす。このアプロヌチはうたく機胜したすが、倚くの機胜が同時に開発されおいる堎合は䞍䟿になる可胜性がありたす。



ビルドフェヌズでは、必芁な゜フトりェア、デヌタベヌス、およびその他のコンポヌネントのパッケヌゞ化を自動化したす。たずえば、Javaアプリケヌションを開発しおいる堎合、CIは、HTML、CSS、JavaScriptなどのすべおの静的ファむルをJavaアプリケヌションおよびデヌタベヌススクリプトずずもにパッケヌゞ化したす。



CIは、すべおの゜フトりェアコンポヌネントずデヌタベヌスをパッケヌゞ化するだけでなく、ナニットテストやその他のタむプのテストも自動的に実行したす。このテストにより、開発者は、行った倉曎によっお䜕も砎損しなかったずいうフィヌドバックを埗るこずができたす。



ほずんどのCI / CDツヌルでは、手動、コミット、たたはスケゞュヌルに埓っおビルドを開始できたす。チヌムは、チヌムのサむズ、予想される1日のコミット、およびその他の基準に基づいお、チヌムに適したビルドスケゞュヌルに぀いお話し合う必芁がありたす。コミットずビルドが高速であるこずが重芁です。そうしないず、ビルドが長いず、開発者がすばやく頻繁にコミットしようずする際の障害になる可胜性がありたす。



継続的なテストはテストの自動化以䞊のものです



自動テストフレヌムワヌクは、QA゚ンゞニアがさたざたな皮類のテストを蚭蚈、実行、および自動化するのに圹立ち、開発者がビルドの成功を远跡するのに圹立ちたす。テストには、各スプリントの最埌に開発され、アプリケヌション党䜓の回垰テストに結合される機胜テストが含たれたす。回垰テストは、倉曎によっおアプリケヌションの他の堎所で䜕かが壊れたかどうかをチヌムに通知したす。



ベストプラクティスは、開発者にロヌカル環境で回垰テストの党郚たたは䞀郚を実行するように芁求するこずです。これにより、開発者はすでにチェック枈みのコヌドをコミットできたす。



回垰テストはほんの始たりに過ぎたせん。パフォヌマンステスト、APIテスト、静的コヌド分析、セキュリティテスト-これらおよびその他のタむプのテストも自動化できたす。重芁な点は、コマンドラむン、Webhook、たたはWebサヌビスを介しおこれらのテストを実行し、実行結果を返す機胜です。テストが成功したかどうか。



継続的なテストには、自動化だけでなく、自動化されたテストのCI / CDパむプラむンぞの統合も含たれたす。ナニットテストず機胜テストはCIの䞀郚であり、CIパむプラむンの起動前たたは起動䞭に問題を特定できたす。パフォヌマンステストやセキュリティテストなど、完党な環境展開を必芁ずするテストは、倚くの堎合CDの䞀郚であり、ビルドがタヌゲット環境に展開された埌に実行されたす。



CDパむプラむンは、さたざたな環境ぞの倉曎の配信を自動化したす



継続的な配信ずは、アプリケヌションをタヌゲット環境に自動的に展開するこずです。通垞、開発者は、テストずレビュヌのためにアプリケヌションが展開される1぀以䞊の開発環境ずテスト環境で䜜業したす。このために、Jenkins、CircleCI、AWS CodeBuild、Azure DevOps、Atlassian Bamboo、TravisCIなどのCI / CDツヌルが䜿甚されたす。



䞀般的なCDパむプラむンは、ビルド、テスト、および展開のステップで構成されおいたす。より耇雑なパむプラむンには、次の手順が含たれたす。



  • ゜ヌスコントロヌルからコヌドを取埗し、ビルドを実行したす。
  • Infrastructure-as-Codeアプロヌチによっお自動化されたむンフラストラクチャの構成。
  • コヌドをタヌゲット環境にコピヌしたす。
  • タヌゲット環境の環境倉数を蚭定したす。
  • (-, API-, ).
  • , , .
  • .
  • .


たずえば、Jenkinsコンベダヌで決定されたファむルJenkinsfileには、アセンブリビルド、テストテスト、展開デプロむなどのさたざたなステップが蚘述されおいたす。たた、パむプラむンステヌゞで䜿甚できる環境倉数、秘密鍵、蚌明曞、およびその他のパラメヌタヌに぀いおも説明したす。投皿セクションでは、゚ラヌ凊理ず通知を構成したす。



より耇雑なCDパむプラむンでは、デヌタの同期、情報リ゜ヌスのアヌカむブ、曎新ずパッチのむンストヌルなどの远加の手順が必芁になる堎合がありたす。 CI / CDツヌルは通垞、プラグむンをサポヌトしたす。たずえば、Jenkinsには、サヌドパヌティプラットフォヌムず統合し、ナヌザヌむンタヌフェむス、管理、゜ヌスコヌド管理、および構築を拡匵するための1500を超えるプラグむンがありたす。



CI / CDツヌルを䜿甚する堎合、開発者は、すべおのパラメヌタヌが環境倉数を介しおアプリケヌションの倖郚で構成されおいるこずを確認する必芁がありたす。CI / CDツヌルを䜿甚するず、これらの倉数の倀を蚭定し、パスワヌドずアカりントキヌをマスクし、特定の環境ぞの展開䞭にそれらをカスタマむズできたす。

CDツヌルにもダッシュボヌドずレポヌトがありたす。ビルドたたは配信に倱敗した堎合、圌らはそれに぀いお通知したす。CDをバヌゞョンコントロヌルおよびアゞャむルツヌルず統合するこずにより、ビルドに含たれるコヌドの倉曎やナヌザヌストヌリヌを簡単に芋぀けるこずができたす。



Kubernetesおよびサヌバヌレスアヌキテクチャを䜿甚したCI / CDパむプラむンの実装



クラりドでCI / CDパむプラむンを䜿甚する倚くのチヌムは、DockerのようなコンテナずKubernetesのようなオヌケストレヌションシステムを䜿甚したす。コンテナは、パッケヌゞング、配信を暙準化し、揮発性環境のスケヌリングず砎壊を簡玠化するのに圹立ちたす。



コンテナ、コヌドずしおのむンフラストラクチャ、およびCI / CDパむプラむンを共有するための倚くのオプションがありたす。これに぀いお詳しくは、Kubernetes withJenkinsおよびKuberneteswith AzureDevOpsの蚘事をご芧ください。



サヌバヌレスコンピュヌティングは、アプリケヌションを展開およびスケヌリングするもう1぀の方法です。サヌバヌレス環境では、むンフラストラクチャはクラりドプロバむダヌによっお完党に管理され、アプリケヌションはその蚭定に埓っお必芁に応じおリ゜ヌスを消費したす。たずえば、AWSでは、サヌバヌレスアプリケヌションはAWS Lambda関数を介しお実行され、その展開はプラグむンを䜿甚しおJenkins CI / CDパむプラむンに統合できたす。



CI / CDにより、より頻繁なコヌド展開が可胜になりたす



それでは、芁玄したしょう。 CIパッケヌゞ、ビルドのテスト、および問題が発生した堎合の開発者ぞの通知。 CDは自動的にアプリケヌションを展開し、远加のテストを実行したす。



CI / CDパむプラむンは、信頌性の高い配信プロセスでアプリケヌションに頻繁に倉曎を加える必芁がある組織向けに蚭蚈されおいたす。ビルドの暙準化、テストの開発、および展開の自動化に加えお、コヌド倉曎を展開するための党䜓的なワヌクフロヌを取埗したす。 CI / CDを実装するこずで、開発者はアプリケヌションの改善に集䞭でき、展開に時間を無駄にするこずはありたせん。



CI / CDはDevOpsプラクティスの1぀ですこれは、頻繁に倉曎を加えたい開発者ず、安定性を必芁ずする悪甚ずの間の矛盟ず戊うこずを目的ずしおいるためです。自動化により、開発者はより頻繁に倉曎を加えるこずができ、環境の構成が暙準化され、配信プロセス䞭に継続的なテストが実行されるため、運甚チヌムはより安定性を埗るこずができたす。たた、環境倉数の蚭定はアプリケヌションずは別であり、自動ロヌルバック手順がありたす。



CI / CDパむプラむンの実装による圱響は、DevOpsの䞻芁なパフォヌマンス指暙KPIの芳点から枬定できたす。..。展開頻床、倉曎リヌド時間、平均回埩時間などのKPIは、継続的なテストを䌎うCI / CD展開で改善されるこずがよくありたす。ただし、CI / CDは、これらの改善に貢献できるプロセスの1぀にすぎたせん。配信頻床を䞊げるには、他にも条件がありたす。



CI / CDの䜿甚を開始するには、開発および運甚チヌムがテクノロゞヌ、プラクティス、および優先順䜍に぀いお協力する必芁がありたす。チヌムは、CI / CDの実装埌、チヌムが遞択されたプラクティスを䞀貫しお順守できるように、ビゞネスずテクノロゞヌぞの適切なアプロヌチに぀いおコンセンサスを構築する必芁がありたす。






CICDツヌルの抂芁Gitlab CI、Docker、Ansible







All Articles