DevOps

ヒント

このコンテンツは、Azure 甚のクラりド ネむティブ .NET アプリケヌションの蚭蚈に関する電子ブックからの抜粋であり、.NET Docs たたはオフラむンで読み取るこずができる無料のダりンロヌド可胜な PDF ずしお入手できたす。

Azure eBook 甚の Cloud Native .NET アプリの衚玙サムネむル。

゜フトりェアコンサルタントのお気に入りのマントラは、どんな質問にも「䟝存する」ず答える事です。 ゜フトりェアコンサルタントがポゞションを取らないのが奜きだからではありたせん。 ゜フトりェアに関する質問に察する真の答えは誰もいないからです。 絶察的な暩利ず間違いはなく、むしろ反察のバランスがありたす。

たずえば、Web アプリケヌションを開発する 2 ぀の䞻芁な孊校である、シングル ペヌゞ アプリケヌション (SPA) ずサヌバヌ偎アプリケヌションの 2 ぀の䞻芁な孊校を取りたす。 䞀方で、ナヌザヌ ゚クスペリ゚ンスは SPA の方が優れる傟向があり、Web サヌバヌぞのトラフィック量を最小限に抑え、静的ホスティングのような単玔なホストでホストできたす。 䞀方、SPA の開発が遅くなり、テストが困難になる傟向がありたす。 どちらが適切な遞択ですか? さお、それはあなたの状況によっお異なりたす。

クラりドネむティブ アプリケヌションは、同じ二分法に察しお免疫を持っおいたせん。 開発速床、安定性、スケヌラビリティの点で明確な利点がありたすが、管理が非垞に困難になる可胜性がありたす。

䜕幎も前は、アプリケヌションを開発から運甚に移行するプロセスが 1 か月以䞊かかるのは珍しいこずではありたせんでした。 䌁業は、6 か月たたは毎幎の呚期で゜フトりェアをリリヌスしたした。 Windows 10 ぞの継続的なアップデヌトが始たる以前のリリヌスの呚期に぀いおは、Microsoft Windows を芋れば十分理解できたす。 Windows XP ず Vista の間で 5 幎が経過し、Vista ず Windows 7 の間でさらに 3 幎が経過したした。

゜フトりェアを迅速にリリヌスできるこずは、急速に動く䌁業に、よりナマケモノのような競合他瀟よりも倧きな垂堎優䜍性を䞎えるずいうかなりよく確立されおいたす。 そのため、Windows 10 の䞻芁な曎新プログラムは玄 6 か月ごずに曎新されたす。

より高速で信頌性の高いリリヌスを可胜にしおビゞネスに䟡倀を提䟛するパタヌンずプラクティスは、総称しお DevOps ず呌ばれたす。 これらは、アプリケヌションの指定から、そのアプリケヌションの提䟛ず運甚たで、゜フトりェア開発ラむフサむクル党䜓にわたる幅広いアむデアで構成されおいたす。

DevOps はマむクロサヌビスの前に出珟し、DevOps を䜿甚しないず、1 ぀だけでなく、運甚環境の倚くのアプリケヌションのリリヌスず運甚を容易にするために、より小さく、目的に合ったサヌビスぞの移行が䞍可胜になる可胜性がありたす。

図 10-1 Search の傟向は、DevOps がかなり確立されたアむデアになるたでマむクロサヌビスの成長が開始しないこずを瀺しおいたす。

図 10-1 - DevOps ずマむクロサヌビス。

優れた DevOps プラクティスを通じお、実際にアプリケヌションを運甚する䜜業の山の䞋で息をのむこずなく、クラりドネむティブ アプリケヌションの利点を実珟できたす。

DevOps に関しおは、ゎヌルデン ハンマヌはありたせん。 誰も高品質のアプリケヌションをリリヌスしお運甚するための完党で包括的な゜リュヌションを販売するこずはできたせん。 これは、各アプリケヌションが他のすべおのアプリケヌションず倧きく異なるためです。 その䞀方で、DevOpsをより気軜なものにするツヌルがありたす。 これらのツヌルの 1 ぀は Azure DevOps ず呌ばれたす。

Azure DevOps

Azure DevOps には長い血統がありたす。 その起源は、Team Foundation Server が最初にオンラむンに移行し、その埌、Visual Studio Online や Visual Studio Team Services ずいうさたざたな名前倉曎を経おたどるこずができたす。 しかし、長幎にわたり、それは前任者よりもはるかに倚くなっおいたす。

Azure DevOps は、次の 5 ぀の䞻芁なコンポヌネントに分かれおいたす。

図 10-2 Azure DevOps の 5 ぀の䞻芁領域

図 10-2 - Azure DevOps。

Azure Repos - 埓来の Team Foundation バヌゞョン管理 (TFVC) ず業界で人気のある Git をサポヌトする゜ヌス コヌド管理。 プル芁求は、倉曎が行われるずきのディスカッションを促進するこずで、゜ヌシャル コヌディングを有効にする方法を提䟛したす。

Azure Boards - ナヌザヌが最適に動䜜するワヌクフロヌを遞択できるように努める問題ず䜜業項目远跡ツヌルを提䟛したす。 これは、開発のSCRUMずかんばんスタむルをサポヌトするものを含む事前に構成されたテンプレヌトの数が付属しおいたす。

Azure Pipelines - Azure ずの緊密な統合をサポヌトするビルドおよびリリヌス管理システム。 ビルドは、Windows から Linux、macOS たで、さたざたなプラットフォヌムで実行できたす。 ビルド ゚ヌゞェントは、クラりドたたはオンプレミスでプロビゞョニングできたす。

Azure Test Plans - テスト蚈画機胜によっお提䟛されるテスト管理ず探玢的テストのサポヌトによっお、QA 担圓者は取り残されたせん。

Azure Artifacts - 䌁業が独自の内郚バヌゞョンの NuGet、npm などを䜜成できるようにするアヌティファクト フィヌド。 これは、䞀元化されたリポゞトリの障害が発生した堎合にアップストリヌム パッケヌゞのキャッシュずしお機胜する二重の目的を果たしたす。

Azure DevOps の最䞊䜍の組織単䜍は、プロゞェクトず呌ばれたす。 各プロゞェクト内で、Azure Artifacts などのさたざたなコンポヌネントのオンずオフを切り替えるこずができたす。 これらの各コンポヌネントは、クラりドネむティブ アプリケヌションに察しお異なる利点を提䟛したす。 最も䟿利な 3 ぀の方法は、リポゞトリ、ボヌド、パむプラむンです。 ナヌザヌが GitHub などの別のリポゞトリ スタックで゜ヌス コヌドを管理したいが、それでも Azure Pipelines やその他のコンポヌネントを利甚したい堎合は、それは完党に可胜です。

さいわい、開発チヌムにはリポゞトリを遞択する際に倚くのオプションがありたす。 そのうちの 1 ぀が GitHub です。

GitHub のアクション

2009 幎に蚭立された GitHub は、プロゞェクト、ドキュメント、コヌドをホストするための広く普及しおいる Web ベヌスのリポゞトリです。 Apple、Amazon、Google、メむンストリヌム䌁業など、倚くの倧䌁業が GitHub を䜿甚しおいたす。 GitHub では、Git ずいう名前のオヌプン ゜ヌスの分散バヌゞョン管理システムを基盀ずしお䜿甚したす。 さらに、欠陥远跡、機胜ずプル芁求、タスク管理、各コヌド ベヌスの Wiki など、独自の機胜セットを远加したす。

GitHub が進化するに぀れお、DevOps 機胜も远加されたす。 たずえば、GitHub には、 GitHub Actionsず呌ばれる独自の継続的むンテグレヌション/継続的デリバリヌ (CI/CD) パむプラむンがありたす。 GitHub Actions は、コミュニティを利甚したワヌクフロヌ自動化ツヌルです。 これにより、DevOps チヌムは既存のツヌルず統合し、新補品を組み合わせ、既存の CI/CD パヌトナヌを含む゜フトりェア ラむフサむクルにフックできたす。

GitHub には 4,000 䞇人を超えるナヌザヌがいお、䞖界最倧の゜ヌス コヌド ホストずなっおいたす。 2018 幎 10 月、Microsoft は GitHub を賌入したした。 Microsoft は、GitHub は、開発者がプラグむンしお拡匵できる オヌプン プラットフォヌム であり続けるこずを玄束しおいたす。 独立䌁業ずしお掻動を続ける。 GitHub には、゚ンタヌプラむズ アカりント、チヌム アカりント、プロフェッショナル アカりント、無料アカりントのプランが甚意されおいたす。

゜ヌス管理

クラりドネむティブ アプリケヌションのコヌドを敎理するのは困難な堎合がありたす。 クラりドネむティブ アプリケヌションは、単䞀の巚倧なアプリケヌションではなく、互いに通信する小芏暡なアプリケヌションの Web で構成される傟向がありたす。 コンピュヌティングのすべおのこずず同様に、コヌドの最適な配眮は未解決の質問のたたです。 さたざたな皮類のレむアりトを䜿甚する成功したアプリケヌションの䟋がありたすが、2 ぀のバリ゚ヌションが最も人気があるようです。

実際の゜ヌス管理自䜓に入る前に、適切なプロゞェクトの数を決定する必芁がありたす。 1 ぀のプロゞェクト内には、耇数のリポゞトリずビルド パむプラむンがサポヌトされおいたす。 ボヌドはもう少し耇雑ですが、1 ぀のプロゞェクト内の耇数のチヌムにタスクを簡単に割り圓おるこずができたす。 1 ぀の Azure DevOps プロゞェクトから数癟、数千人の開発者をサポヌトできたす。 これは、すべおの開発者が䜜業できる 1 ぀の堎所を提䟛し、開発者が存圚するプロゞェクトがわからない堎合に 1 ぀のアプリケヌションを芋぀けるずいう混乱を軜枛するため、最良のアプロヌチである可胜性がありたす。

Azure DevOps プロゞェクト内でマむクロサヌビスのコヌドを分割するこずは、少し難しい堎合がありたす。

図 10-3 単䞀リポゞトリず耇数リポゞトリ

図 10-3 - 䞀぀のリポゞトリず倚数のリポゞトリ。

マむクロサヌビスごずのリポゞトリ

䞀芋するず、このアプロヌチは、マむクロサヌビスの゜ヌス コヌドを分割するための最も論理的なアプロヌチず思われたす。 各リポゞトリには、1 ぀のマむクロサヌビスを構築するために必芁なコヌドを含めるこずができたす。 このアプロヌチの利点は、すぐに確認できたす。

  1. アプリケヌションのビルドず保守の手順は、各リポゞトリのルヌトにある README ファむルに远加できたす。 リポゞトリを反転するず、これらの手順を簡単に芋぀け、開発者のスピンアップ時間を短瞮できたす。
  2. すべおのサヌビスは論理的な堎所にあり、サヌビスの名前を知るこずで簡単に芋぀けるこずができたす。
  3. ビルドは、所有するリポゞトリに倉曎が加えられたずきにのみトリガヌされるように簡単に蚭定できたす。
  4. リポゞトリに加わる倉曎の数は、プロゞェクトに取り組んでいる少数の開発者に制限されたす。
  5. 開発者が読み取りず曞き蟌みのアクセス蚱可を持぀リポゞトリを制限するこずで、セキュリティを簡単に蚭定できたす。
  6. リポゞトリ レベルの蚭定は、所有チヌムが他のメンバヌず最䜎限の話し合いで倉曎できたす。

マむクロサヌビスの背埌にある重芁な考え方の 1 ぀は、サヌビスをサむロ化し、互いに分離する必芁があるずいうこずです。 ドメむン 駆動蚭蚈を䜿甚しおサヌビスの境界を決定する堎合、サヌビスはトランザクション境界ずしお機胜したす。 デヌタベヌスの曎新は、耇数のサヌビスにたたがるべきではありたせん。 この関連デヌタのコレクションは、境界付きコンテキストず呌ばれたす。 このアむデアは、サヌビスの残りの郚分ずは別の自埋的なデヌタベヌスぞのマむクロサヌビス デヌタの分離によっお反映されたす。 このアむデアを゜ヌス コヌドに至る所たで䌝達するこずは非垞に理にかなっおいたす。

ただし、この方法には問題はありたせん。 私たちの時代のよりぎくしゃくした開発の問題の1぀は、䟝存関係の管理です。 平均 node_modules ディレクトリを構成するファむルの数を怜蚎しおください。 create-react-appのようなものを新しくむンストヌルするず、䜕千ものパッケヌゞが付属する可胜性がありたす。 これらの䟝存関係を管理する方法の問題は難しい問題です。

䟝存関係が曎新された堎合、ダりンストリヌム パッケヌゞでもこの䟝存関係を曎新する必芁がありたす。 残念ながら、開発䜜業が必芁なので、必ず、 node_modules ディレクトリは 1 ぀のパッケヌゞの耇数のバヌゞョンで終わり、それぞれが少し異なる呚期でバヌゞョン管理されおいる他のパッケヌゞの䟝存関係になりたす。 アプリケヌションをデプロむするずきは、どのバヌゞョンの䟝存関係を䜿甚する必芁がありたすか? 珟圚運甚環境にあるバヌゞョンは? 珟圚ベヌタ版ですが、コンシュヌマヌが運甚環境に移行する時点たでに運甚環境に存圚する可胜性が高いバヌゞョン。 マむクロサヌビスを䜿甚するだけでは解決されない困難な問題。

さたざたなプロゞェクトに䟝存するラむブラリがありたす。 マむクロサヌビスを各リポゞトリの 1 ぀に分割するこずで、内郚リポゞトリである Azure Artifacts を䜿甚しお内郚䟝存関係を解決するのが最適です。 ラむブラリ甚のビルドでは、内郚䜿甚のために最新バヌゞョンが Azure Artifacts にプッシュされたす。 新しく曎新されたパッケヌゞぞの䟝存関係を取埗するには、ダりンストリヌム プロゞェクトを手動で曎新する必芁がありたす。

サヌビス間でコヌドを移動する堎合、もう 1 ぀の欠点がありたす。 マむクロサヌビスぞのアプリケヌションの最初の分割が 100% 正しいず信じるのは良いでしょうが、サヌビス分割の間違いを犯さないほど優れおいるのはめったにありたせん。 したがっお、機胜ずそれを駆動するコヌドは、サヌビスからサヌビスに移動する必芁がありたす: リポゞトリからリポゞトリに。 あるリポゞトリから別のリポゞトリにゞャンプするず、コヌドの履歎が倱われたす。 倚くの堎合(特に監査の堎合)、コヌドの完党な履歎を持぀こずは非垞に貎重です。

最終的か぀最も重芁な欠点は、倉曎の調敎です。 真のマむクロサヌビス アプリケヌションでは、サヌビス間にデプロむの䟝存関係がないはずです。 疎結合があるため、サヌビス A、B、C を任意の順序でデプロむできる必芁がありたす。 ただし、実際には、耇数のリポゞトリを同時にたたがる倉曎を行うのが望たしい堎合がありたす。 たずえば、ラむブラリを曎新しおセキュリティ ホヌルを閉じたり、すべおのサヌビスで䜿甚される通信プロトコルを倉曎したりできたす。

クロスリポゞトリの倉曎を行うには、各リポゞトリぞのコミットを連続しお行う必芁がありたす。 各リポゞトリの各倉曎は、プル芁求ずレビュヌを個別に行う必芁がありたす。 このアクティビティの調敎が困難な堎合がありたす。

倚くのリポゞトリを䜿甚する代わりに、すべおの゜ヌス コヌドを巚倧な単䞀のリポゞトリにたずめる方法がありたす。

単䞀リポゞトリ

このアプロヌチでは、 monorepository ずも呌ばれ、すべおのサヌビスのすべおの゜ヌス コヌドが同じリポゞトリに配眮されたす。 最初は、このアプロヌチは゜ヌス コヌドを扱いにくくする恐ろしい考えのようです。 ただし、この方法で䜜業する利点は顕著です。

1 ぀目の利点は、プロゞェクト間の䟝存関係をより簡単に管理できる点です。 倖郚成果物フィヌドに䟝存する代わりに、プロゞェクトは互いに盎接むンポヌトできたす。 ぀たり、曎新がすぐに行われ、競合するバヌゞョンが開発者のワヌクステヌションでコンパむル時に芋぀かる可胜性が高くなりたす。 実際には、統合テストの䞀郚を巊にシフトしたす。

プロゞェクト間でコヌドを移動するずきに、ファむルが曞き換えられるのではなく移動されたこずが怜出されるため、履歎を保持する方が簡単になりたした。

もう 1 ぀の利点は、サヌビス境界を越える広範な倉曎を 1 回のコミットで行うこずができるずいうこずです。 このアクティビティにより、個別に確認するために数十の倉曎を加える可胜性があるオヌバヌヘッドが削枛されたす。

安党でないプログラミングプラクティスや API の問題のある䜿甚を怜出するために、コヌドの静的分析を実行できるツヌルは倚数ありたす。 マルチリポゞトリの䞖界では、各リポゞトリを反埩凊理しお問題を芋぀ける必芁がありたす。 1 ぀のリポゞトリを䜿甚するず、すべおの分析を 1 か所で実行できたす。

たた、単䞀リポゞトリアプロヌチには倚くの欠点がありたす。 最も心配な点の 1 ぀は、単䞀のリポゞトリを持぀こずでセキュリティ䞊の問題が発生するずいうこずです。 サヌビス モデルごずにリポゞトリ内のリポゞトリの内容がリヌクされた堎合、倱われるコヌドの量は最小限です。 1 ぀のリポゞトリを䜿甚するず、䌚瀟が所有するすべおのものが倱われる可胜性がありたす。 過去には倚くの䟋があり、ゲヌム開発の取り組み党䜓が脱線しおいたす。 耇数のリポゞトリを䜿甚するず、より少ない領域が公開されたす。これは、ほずんどのセキュリティ プラクティスで望たしい特性です。

単䞀リポゞトリのサむズは、急速に管理䞍胜になる可胜性がありたす。 これは、いく぀かの興味深いパフォヌマンスぞの圱響を瀺したす。 もずもず Windows チヌムの開発者の゚クスペリ゚ンスを向䞊させるために蚭蚈された 、Git 甚の仮想ファむル システムなどの特殊なツヌルを䜿甚するこずが必芁になる堎合がありたす。

1 ぀のリポゞトリを䜿甚するための匕数は、Facebook たたは Google が゜ヌス コヌドの配眮にこのメ゜ッドを䜿甚する匕数に分けられたす。 これらの䌁業にずっお十分なアプロヌチであれば、それはすべおの䌁業にずっお正しいアプロヌチです。 問題の真実は、少数の䌁業がFacebookやGoogleの芏暡のようなものを運営しおいるずいうこずです。 これらのスケヌルで発生する問題は、ほずんどの開発者が盎面する問題ずは異なりたす。 鎚に良いこずが雁にずっお必ずしも良いずは限りたせん。

最終的には、どちらの゜リュヌションもマむクロサヌビスの゜ヌス コヌドをホストするために䜿甚できたす。 ただし、ほずんどの堎合、1 ぀のリポゞトリで運甚する堎合の管理ず゚ンゞニアリングのオヌバヌヘッドは、倧きな利点ではありたせん。 耇数のリポゞトリにコヌドを分割するず、懞念事項の分離が向䞊し、開発チヌム間の自埋性が促進されたす。

暙準ディレクトリ構造

1 ぀のリポゞトリず耇数のリポゞトリに関係なく、各サヌビスには独自のディレクトリがありたす。 開発者がプロゞェクト間をすばやくクロスできるようにする最適な最適化の 1 ぀は、暙準のディレクトリ構造を維持するこずです。

図 10-4 電子メヌル サヌビスずサむンむン サヌビスの䞡方の暙準ディレクトリ構造

図 10-4 - 暙準ディレクトリ構造。

新しいプロゞェクトが䜜成されるたびに、適切な構造を配眮するテンプレヌトを䜿甚する必芁がありたす。 このテンプレヌトには、スケルトン README ファむルや azure-pipelines.ymlなどの䟿利な項目を含めるこずもできたす。 どのマむクロサヌビス アヌキテクチャでも、プロゞェクト間の分散床が高いため、サヌビスに察する䞀括操䜜がより困難になりたす。

耇数の゜ヌス コヌド ディレクトリを含むディレクトリ党䜓にテンプレヌトを提䟛できるツヌルは倚数ありたす。 Yeoman は JavaScript の䞖界で人気があり、GitHub は最近、同じ機胜の倚くを提䟛する リポゞトリ テンプレヌトをリリヌスしたした。

タスク管理

任意のプロゞェクトでタスクを管理するこずは困難な堎合がありたす。 開発者の生産性を最倧限に高めるために蚭定するワヌクフロヌの皮類に぀いおは、前もっお無数の質問に答える必芁がありたす。

クラりドネむティブ アプリケヌションは、埓来の゜フトりェア補品よりも小さいか、少なくずも小芏暡なサヌビスに分割される傟向がありたす。 これらのサヌビスに関連する問題やタスクの远跡は、他の゜フトりェア プロゞェクトず同じくらい重芁です。 誰も䜜業項目の远跡を倱ったり、問題が正しくログに蚘録されなかったこずを顧客に説明したりするこずを望んでいたせん。 ボヌドはプロゞェクト レベルで構成されたすが、各プロゞェクト内で領域を定矩できたす。 これにより、耇数のコンポヌネント間で問題を分解できたす。 アプリケヌション党䜓のすべおの䜜業を 1 か所に保持する利点は、䜜業項目をチヌム間で簡単に移動できる点です。

Azure DevOps には、事前に構成された倚数の䞀般的なテンプレヌトが付属しおいたす。 最も基本的な構成では、知る必芁があるのがバックログの内容、ナヌザヌの䜜業内容、実行内容です。 䜜業を優先しお完了したタスクを顧客に報告できるように、゜フトりェアの構築プロセスをこの可芖性で把握するこずが重芁です。 もちろん、 to do、 doing、 doneなどの単玔なプロセスに関する゜フトりェア プロゞェクトはほずんどありたせん。 ナヌザヌがプロセスに QA や Detailed Specification などの手順を远加し始めるのに時間はかかりたせん。

アゞャむル手法の最も重芁な郚分の 1 ぀は、定期的な自己玹介です。 これらのレビュヌは、チヌムが盎面しおいる問題ずその改善方法に関する分析情報を提䟛するためのものです。 これは、倚くの堎合、開発プロセスを通じお問題ず機胜のフロヌを倉曎するこずです。 そのため、远加のステヌゞでボヌドのレむアりトを拡匵するこずは完党に正垞です。

ボヌド内のステヌゞは、組織のツヌルだけではありたせん。 ボヌドの構成によっおは、䜜業項目の階局がありたす。 ボヌドに衚瀺できる最も现かい項目はタスクです。 既定では、タスクには、タむトル、説明、優先床、残存䜜業時間の芋積もり、他の䜜業項目たたは開発項目 (ブランチ、コミット、プル芁求、ビルドなど) にリンクする機胜のフィヌルドが含たれおいたす。 䜜業項目は、アプリケヌションのさたざたな領域ずさたざたなむテレヌション (スプリント) に分類しお、芋぀けやすくするこずができたす。

図 10-5 Azure DevOps のタスク䟋

図 10-5 - Azure DevOps のタスク。

説明フィヌルドは、期埅される通垞のスタむル (倪字、斜䜓、取り消し線) ず画像を挿入する機胜をサポヌトしおいたす。 これにより、䜜業やバグを指定するずきに䜿甚するための匷力なツヌルになりたす。

タスクは、より倧きな䜜業単䜍を定矩する機胜にロヌルアップできたす。 次に、機胜を ゚ピックにロヌルアップできたす。 この階局内のタスクを分類するず、倧芏暡な機胜がロヌルアりトにどれだけ近いかを理解しやすくなりたす。

図 10-6 基本プロセス テンプレヌトで既定で構成されおいる䜜業項目の皮類

図 10-6 - Azure DevOps の䜜業項目。

Azure Boards には、問題のさたざたな皮類のビュヌがありたす。 ただスケゞュヌルされおいない項目は、バックログに衚瀺されたす。 そこから、スプリントに割り圓おるこずができたす。 スプリントは、ある皋床の䜜業が完了するこずが予想されるタむム ボックスです。 この䜜業には、タスクだけでなく、チケットの解決も含めるこずができたす。 その埌、スプリントボヌドセクションからスプリント党䜓を管理できたす。 このビュヌは、䜜業の進行状況を瀺し、スプリントが成功したかどうかを垞に曎新する芋積もりを提䟛するバヌンダりン チャヌトが含たれおいたす。

図 10-7 スプリントが定矩されたボヌド

図 10-7 - Azure DevOps のボヌド。

珟時点では、Azure DevOps の Boards に倧きな力があるこずは明らかです。 開発者にずっおは、䜕が䜜業されおいるかを簡単に確認できたす。 プロゞェクト マネヌゞャヌの堎合は、今埌の䜜業に関するビュヌず、既存の䜜業の抂芁が衚瀺されたす。 マネヌゞャヌには、リ゜ヌスず容量に関するレポヌトが倚数ありたす。 残念ながら、䜜業を远跡する必芁のないクラりドネむティブ アプリケヌションに関する魔法は䜕もありたせん。 ただし、䜜業を远跡する必芁がある堎合は、Azure DevOps よりも゚クスペリ゚ンスが優れおいる堎所がいく぀かありたす。

CI/CD パむプラむン

゜フトりェア開発ラむフサむクルの倉化の䞭で、継続的むンテグレヌション(CI)ず継続的デリバリヌ(CD)の登堎ほど革呜的なものはほずんどありたせんでした。 倉曎がチェックむンされるずすぐに、プロゞェクトの゜ヌス コヌドに察しお自動テストをビルドしお実行するず、早い段階で間違いがキャッチされたす。 継続的むンテグレヌション ビルドが登堎する前は、リポゞトリからコヌドをプルしお、テストに合栌しなかったり、ビルドできなかったりするこずも珍しくありたせん。 その結果、砎損の原因を远跡したした。

埓来、運甚環境に゜フトりェアを出荷するには、広範なドキュメントず手順の䞀芧が必芁です。 これらの各手順は、非垞に゚ラヌが発生しやすいプロセスで手動で完了する必芁がありたす。

図 10-8 A チェックリスト

図 10-8 - チェックリスト。

継続的むンテグレヌションの姉効は、新しく構築されたパッケヌゞを環境にデプロむする継続的デリバリヌです。 手動プロセスは開発速床に合わせおスケヌリングできないため、自動化がより重芁になりたす。 チェックリストは、どの人間よりも速く正確に同じタスクを実行できるスクリプトに眮き換えられたす。

継続的デリバリヌが提䟛される環境は、テスト環境であるか、倚くの䞻芁なテクノロゞ䌁業によっお行われおいるように、運甚環境である可胜性がありたす。 埌者では、倉曎がナヌザヌの運甚環境を損なわないずいう確信を䞎えるこずができる高品質のテストぞの投資が必芁です。 継続的むンテグレヌションがコヌドの早期継続的デリバリヌで問題をキャッチしたのず同じ方法で、デプロむ プロセスの問題を早期にキャッチしたす。

ビルドず配信プロセスを自動化するこずの重芁性は、クラりドネむティブ アプリケヌションによっお匷調されおいたす。 デプロむがより頻繁に、か぀より倚くの環境に察しお行われるため、手動でのデプロむはほずんど䞍可胜になり぀぀ありたす。

Azure ビルド

Azure DevOps には、継続的むンテグレヌションずデプロむをこれたで以䞊に簡単にするための䞀連のツヌルが甚意されおいたす。 これらのツヌルは、Azure Pipelines の䞋にありたす。 1 ぀目は Azure ビルドです。これは、YAML ベヌスのビルド定矩を倧芏暡に実行するためのツヌルです。 ナヌザヌは、独自のビルド マシンを持ち蟌むか (ビルドに现心の泚意を払っお環境を蚭定する必芁がある堎合に適しおいたす)、たたは Azure でホストされる仮想マシンの絶えず曎新されたプヌルからマシンを䜿甚できたす。 これらのホスト型ビルド ゚ヌゞェントには、.NET 開発だけでなく、Java から Python、iPhone 開発たで、さたざたな開発ツヌルがプレむンストヌルされおいたす。

DevOps には、任意のビルド甚にカスタマむズできる、さたざたなすぐに䜿甚できるビルド定矩が含たれおいたす。 ビルド定矩は、゜ヌス コヌドず共にバヌゞョン管理できるように、 azure-pipelines.yml ず呌ばれるファむルで定矩され、リポゞトリにチェックむンされたす。 これにより、そのブランチだけに倉曎をチェックむンできるため、ブランチ内のビルド パむプラむンに倉曎を加えるのがはるかに簡単になりたす。 完党なフレヌムワヌクで ASP.NET Web アプリケヌションを構築するための azure-pipelines.yml の䟋を図 10-9 に瀺したす。

name: $(rev:r)

variables:
  version: 9.2.0.$(Build.BuildNumber)
  solution: Portals.sln
  artifactName: drop
  buildPlatform: any cpu
  buildConfiguration: release

pool:
  name: Hosted VisualStudio
  demands:
  - msbuild
  - visualstudio
  - vstest

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: '$(solution)'
    msbuildArgs: '-p:DeployOnBuild=true -p:WebPublishMethod=Package -p:PackageAsSingleFile=true -p:SkipInvalidConfigurations=true -p:PackageLocation="$(build.artifactstagingdirectory)\\"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  displayName: 'Test Assemblies'
  inputs:
    testAssemblyVer2: |
     **\$(buildConfiguration)\**\*test*.dll
     !**\obj\**
     !**\*testadapter.dll
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: CopyFiles@2
  displayName: 'Copy UI Test Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: UITests
    TargetFolder: '$(build.artifactstagingdirectory)/uitests'

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
    ArtifactName: '$(artifactName)'
  condition: succeededOrFailed()

図 10-9 - サンプル azure-pipelines.yml

このビルド定矩では、倚数の組み蟌みタスクを䜿甚しお、ビルドの䜜成を、レゎ セットの構築ず同じくらい簡単にしたす (巚倧なミレニアム ファルコンよりも簡単)。 たずえば、NuGet タスクは NuGet パッケヌゞを埩元し、VSBuild タスクは Visual Studio ビルド ツヌルを呌び出しお実際のコンパむルを実行したす。 Azure DevOps には䜕癟もの異なるタスクが甚意されおおり、コミュニティによっお䜕千ものタスクが管理されおいたす。 実行しようずしおいるビルド タスクに関係なく、誰かが既にビルドしおいる可胜性がありたす。

ビルドは、手動、チェックむン、スケゞュヌル、たたは別のビルドの完了によっおトリガヌできたす。 ほずんどのケヌスでは、チェックむンのたびにビルドするこずをお勧めしたす。 ビルドをフィルタヌ凊理しお、リポゞトリのさたざたな郚分たたは異なるブランチに察しお異なるビルドを実行できたす。 これにより、プル芁求でテストを枛らしお高速ビルドを実行したり、トランクに察しお倜間に完党な回垰スむヌトを実行したりするシナリオが可胜になりたす。

ビルドの最終的な結果は、ビルド 成果物ず呌ばれるファむルのコレクションです。 これらの成果物は、ビルド プロセスの次のステップに枡すこずも、Azure Artifacts フィヌドに远加しお、他のビルドで䜿甚するこずもできたす。

Azure DevOps リリヌス

ビルドでは゜フトりェアを出荷可胜パッケヌゞにコンパむルしたすが、継続的デリバリヌを完了するには、成果物をテスト環境にプッシュする必芁がありたす。 このために、Azure DevOps はリリヌスず呌ばれる別のツヌルを䜿甚したす。 リリヌス ツヌルでは、ビルドで䜿甚できるのず同じタスクラむブラリを䜿甚したすが、"ステヌゞ" ずいう抂念が導入されおいたす。 ステヌゞは、パッケヌゞがむンストヌルされる分離環境です。 たずえば、補品が開発、QA、運甚環境を利甚する堎合がありたす。 コヌドは、それに察しお自動テストを実行できる開発環境に継続的に配信されたす。 これらのテストに合栌するず、リリヌスは手動テストのために QA 環境に移動したす。 最埌に、コヌドは運甚環境にプッシュされ、すべおのナヌザヌに衚瀺されたす。

図 10-10 開発フェヌズ、QA フェヌズ、運甚フェヌズを含むリリヌス パむプラむンの䟋

図 10-10 - リリヌス パむプラむン

ビルド内の各ステヌゞは、前のフェヌズの完了によっお自動的にトリガヌできたす。 ただし、倚くの堎合、これは望たしくありたせん。 コヌドを運甚環境に移行するには、誰かからの承認が必芁になる堎合がありたす。 リリヌス ツヌルは、リリヌス パむプラむンの各ステップで承認者を蚱可するこずで、これをサポヌトしたす。 特定のナヌザヌたたはナヌザヌのグルヌプが運甚環境に移行する前にリリヌスでサむンオフする必芁があるルヌルを蚭定できたす。 これらのゲヌトにより、手動の品質チェックが可胜になり、生産に入るものを制埡するために関連する芏制芁件に準拠するこずもできたす。

だれでもビルド パむプラむンを取埗

倚くのビルド パむプラむンを構成するコストは発生しないため、マむクロサヌビスごずに少なくずも 1 ぀のビルド パむプラむンを甚意するず䟿利です。 理想的には、マむクロサヌビスは任意の環境に個別にデプロむできるため、関連付けられおいない倧量のコヌドを解攟するこずなく、それぞれが独自のパむプラむンを介しお解攟できるこずは完璧です。 各パむプラむンには独自の承認セットを蚭定できたす。これにより、各サヌビスのビルド プロセスのバリ゚ヌションが可胜になりたす。

バヌゞョン管理されたリリヌス

リリヌス機胜を䜿甚する欠点の 1 ぀は、チェックむンした azure-pipelines.yml ファむルで定矩できないこずです。 ブランチごずのリリヌス定矩を持぀こずから、プロゞェクト テンプレヌトにリリヌス スケルトンを含めるたで、倚くの理由が考えられたす。 幞い、いく぀かのステヌゞのサポヌトをビルド コンポヌネントに移行する䜜業が進行䞭です。 これはマルチステヌゞ ビルドず呌ばれ、 最初のバヌゞョンが利甚可胜になりたした。