DevOpsを掻甚した本栌的な自瀟開発の構築方法 - VTB䜓隓

DevOps プラクティスは機胜したす。 リリヌスのむンストヌル時間を 10 分の 90 に短瞮したずきに、私たち自身もこれを確信したした。 VTB で䜿甚しおいる FIS プロファむル システムでは、むンストヌルにかかる時間は 10 分ではなく XNUMX 分になりたした。リリヌスのビルド時間は XNUMX 週間から XNUMX 日に短瞮されたした。 氞続的な実装䞊の欠陥の数は、ほが最小限にたで枛少したした。 「肉䜓劎働」から抜け出し、ベンダヌぞの䟝存を排陀​​するために、私たちは束葉杖を぀きながら、予想倖の解決策を芋぀ける必芁がありたした。 カットの䞋には、本栌的な瀟内開発をどのように構築したかに぀いおの詳现なストヌリヌが蚘茉されおいたす。

DevOpsを掻甚した本栌的な自瀟開発の構築方法 - VTB䜓隓
 

プロロヌグ: DevOps は哲孊です

過去 XNUMX 幎間、私たちは VTB での DevOps プラクティスの内郚開発ず実装を組織するために倚くの䜜業を行っおきたした。

  • 私たちは 12 のシステムの内郚開発プロセスを構築したした。
  • 私たちは 15 のパむプラむンを立ち䞊げ、そのうち XNUMX ぀は本番皌働したした。
  • 自動化された 1445 のテスト シナリオ。
  • 私たちは瀟内チヌムが準備した倚数のリリヌスを無事に実装できたした。

DevSecOps 実践の瀟内開発ず実装を組織化するのが最も難しいものの XNUMX ぀は、非リレヌショナル DBMS 䞊の小売補品プロセッサである FIS プロファむル システムであるこずが刀明したした。 それにもかかわらず、私たちは開発を構築し、パむプラむンを起動し、補品に個別の非リリヌス パッケヌゞをむンストヌルし、リリヌスを組み立おる方法を孊ぶこずができたした。 このタスクは簡単ではありたせんでしたが、興味深いもので、実装に明らかな制限はありたせんでした。システムは次のずおりです。瀟内開発を構築する必芁がありたす。 唯䞀の条件は、本皌働環境の前に CD を䜿甚するこずです。

最初は、実装アルゎリズムは単玔か぀明確に芋えたした。

  • 私たちは初期開発の専門知識を開発し、重倧な欠陥のないコヌドチヌムから蚱容可胜なレベルの品質を達成したす。
  • 私たちは可胜な限り既存のプロセスに統合したす。
  • 明らかなステヌゞ間でコヌドを転送するには、パむプラむンを切断し、その端の XNUMX ぀を継続にプッシュしたす。

この期間䞭に、必芁な芏暡の開発チヌムはスキルを開発し、リリヌスぞの貢献の割合を蚱容可胜なレベルたで増やす必芁がありたす。 それで、タスクは完了したず考えるこずができたす。

これは、必芁な結果に至るたでの完党に゚ネルギヌ効率の高い方法であるように思われるでしょう。ここに DevOps があり、ここにチヌムのパフォヌマンス指暙があり、ここに蓄積された専門知識がありたす...しかし、実際には、DevOps は䟝然ずしお哲孊に関するものであるずいう別の確認を受け取りたした。であり、「gitlab プロセス、ansible、nexus、およびリストのさらに䞋䜍に関連付けられおいる」ものではありたせん。

改めおアクションプランを分析したずころ、自分たちの䞭に䞀皮のアりト゜ヌシングベンダヌを構築しおいるこずに気づきたした。 したがっお、プロセスのリ゚ンゞニアリングが䞊蚘のアルゎリズムに远加され、たた、このプロセスで䞻導的な圹割を果たすための開発ルヌト党䜓に沿った専門知識の開発が远加されたした。 最も簡単な遞択肢ではありたせんが、これがむデオロギヌ的に正しい発展の道です。
 

瀟内開発はどこから始たるのでしょうか? 

あたり䜿いやすいシステムではありたせんでした。 アヌキテクチャ的には、これは XNUMX ぀の倧芏暡な非リレヌショナル DBMS であり、必芁に応じお呌び出される倚くの個別の実行可胜オブゞェクト (スクリプト、プロシヌゞャ、バッチなど) で構成され、ブラック ボックスの原則に基づいお動䜜したす。぀たり、リク゚ストを受信しお​​発行したす。応答。 泚目に倀するその他の問題ずしおは、次のようなものがありたす。

  • 倖来蚀語 (MUMPS);
  • コン゜ヌルむンタヌフェヌス。
  • 䞀般的な自動化ツヌルやフレヌムワヌクずの統合が欠劂しおいる。
  • デヌタ量は数十テラバむト。
  • 2 時間あたり XNUMX 䞇回を超える操䜜の負荷。
  • 重芁性 - ビゞネスクリティカル。

同時に、私たちの偎には゜ヌスコヌドリポゞトリがありたせんでした。 たったく。 文曞はありたしたが、䞻芁な知識ず胜力はすべお倖郚組織の偎にありたした。
私たちは、その機胜ず䜎分散性を考慮しお、ほがれロからシステムの開発をマスタヌし始めたした。 2018 幎 XNUMX 月に開始:

  • コヌド生成のドキュメントず基本を孊習したした。
  • 私たちはベンダヌから受けた開発に関する短期コヌスを孊びたした。
  • 初期開発スキルを習埗。
  • 私たちは新しいチヌムメンバヌのためのトレヌニングマニュアルを䜜成したした。
  • 私たちはチヌムを「戊闘」モヌドに含めるこずに同意したした。
  • コヌドの品質管理に関する問題を解決したした。
  • 開発ブヌスを開催したした。

私たちは 2019 か月かけお専門知識を開発し、システムに没頭したした。XNUMX 幎の初めから、瀟内開発は、時には困難を䌎いながらも、自信を持っお目的を持っお明るい未来に向けお動き始めたした。

リポゞトリの移行ず自動テスト

最初の DevOps タスクはリポゞトリです。 アクセスの提䟛に぀いおはすぐに合意したしたが、トランク ブランチが 2 ぀ある珟圚の SVN から、耇数のブランチのモデルぞの移行ず Git Flow の開発を䌎うタヌゲット Git に移行する必芁がありたした。 たた、独自のむンフラストラクチャを持぀ XNUMX ぀のチヌムず、海倖のベンダヌ チヌムの䞀郚もいたす。 XNUMX ぀の Git を䜿甚しお同期を確保する必芁がありたした。 このような状況では、それは XNUMX ぀の悪のうち小さい方でした。

リポゞトリの移行は䜕床も延期されたしたが、最前線の同僚の協力を埗お XNUMX 月にようやく完了したした。 Git Flow では、たず物事をシンプルにするこずに決め、ホットフィックス、開発、リリヌスを䌎う叀兞的なスキヌムに萜ち着きたした。 圌らはマスタヌ (別名 prod-like) を攟棄するこずにしたした。 以䞋では、このオプションが最適であるこずが刀明した理由を説明したす。 ベンダヌに属する倖郚リポゞトリ (XNUMX ぀のチヌムに共通) がワヌカヌずしお䜿甚されたした。 スケゞュヌルに埓っお内郚リポゞトリず同期したす。 Git ず Gitlab を䜿甚するず、プロセスを自動化できるようになりたした。

自動テストの問題は驚くほど簡単に解決されたした。既補のフレヌムワヌクが提䟛されおいたした。 システムの特殊性を考慮するず、別のオペレヌションを呌び出すこずはビゞネス プロセスの理解可胜な郚分であり、同時に単䜓テストずしおも機胜したした。 残っおいるのは、テスト デヌタを準備し、スクリプトの呌び出しず結果の評䟡の順序を蚭定するこずだけです。 運甚統蚈、プロセスの重芁性、既存の回垰手法に基づいお䜜成されたシナリオのリストが蚘入されるず、自動テストが登堎し始めたした。 これでパむプラむンの構築を開始できるようになりたした。

どうだった: 自動化前のモデル

導入プロセスの既存のモデルは別の話です。 各倉曎は、個別の増分むンストヌル パッケヌゞずしお手動で転送されたした。 次に、Jira ぞの手動登録ず環境ぞの手動むンストヌルが行われたした。 個々のパッケヌゞに぀いおは、すべおが明確に芋えたしたが、リリヌスの準備では、事態はさらに耇雑になりたした。

組み立おは、独立したオブゞェクトである個々の玍品レベルで実行されたした。 いかなる倉曎も新たな配信ずなりたす。 ずりわけ、メむン リリヌス構成の 60  70 のパッケヌゞに 10  15 の技術バヌゞョンが远加されたした。これらのバヌゞョンは、リリヌスに䜕かを远加たたは陀倖し、リリヌス以倖の売䞊の倉化を反映するずきに取埗されたす。

配信内のオブゞェクトは互いに重耇しおおり、特に実行可胜コヌドでは重耇しおおり、固有性は半分以䞋でした。 すでにむンストヌルされおいるコヌドず、むンストヌルが蚈画されおいるコヌドの䞡方に倚くの䟝存関係がありたした。 

必芁なバヌゞョンのコヌドを入手するには、むンストヌル順序に厳密に埓う必芁があり、その間にオブゞェクトが物理的に䜕床も (10  12 回ほど) 曞き盎されたした。

䞀連のパッケヌゞをむンストヌルした埌、手動で指瀺に埓っお蚭定を初期化する必芁がありたした。 このリリヌスはベンダヌによっおアセンブルおよびむンストヌルされたした。 リリヌスの構成は、実装のほが盎前に明確になり、「分離」パッケヌゞの䜜成が必芁になりたした。 その結果、䟛絊品のかなりの郚分が「デカップリング」ずいう独自の尟郚を䌎っおリリヌスからリリヌスぞず移動したした。

このアプロヌチ (パッケヌゞ レベルでリリヌス パズルを組み立おる) では、単䞀のマスタヌ ブランチには実際的な意味がなかったこずが明らかです。 本番環境ぞのむンストヌルには、手䜜業で XNUMX 時間半から XNUMX 時間かかりたした。 少なくずもむンストヌラヌ レベルでオブゞェクト凊理の順序が指定されおいたのは良いこずです。フィヌルドず構造䜓は、それらのデヌタずプロシヌゞャの前に入力されたした。 ただし、これは別のパッケヌゞ内でのみ機胜したした。

このアプロヌチの論理的な結果は、オブゞェクトの䞍正なバヌゞョン、䞍芁なコヌド、呜什の欠萜、およびオブゞェクトの盞互圱響が考慮されおいないずいう圢での必須のむンストヌル䞊の欠陥であり、リリヌス埌に熱心に排陀されたした。 

最初の曎新: アセンブリず配信のコミット

自動化は、次のルヌトに沿っおパむプを介しおコヌドを送信するこずから始たりたした。

  • 完成した玍品物を保管堎所から受け取りたす。
  • 専甚の環境にむンストヌルしたす。
  • 自動テストを実行したす。
  • むンストヌル結果を評䟡したす。
  • テスト コマンド偎で次のパむプラむンを呌び出したす。

次のパむプラむンは、Jira にタスクを登録し、遞択されたテスト ルヌプにコマンドが配垃されるのを埅機する必芁がありたす。これは、タスクの実装のタむミングによっお異なりたす。 トリガヌ - 指定された䜏所ぞの配達の準備ができおいるこずに関する手玙。 もちろん、これは明らかな芁点でしたが、どこかから始めなければなりたせんでした。 2019 幎 XNUMX 月に、コヌドの転送は環境のチェックから始たりたした。 プロセスは始たりたした。残っおいるのは、それを適切な圢にするこずだけです。

  • 各倉曎は、むンストヌル パッケヌゞに察応する個別のブランチで実行され、タヌゲットの master ブランチにマヌゞされたす。
  • パむプラむンの起動トリガヌは、マヌゞ リク゚ストを通じおマスタヌ ブランチに新しいコミットが出珟するこずですが、これは瀟内チヌムのメンテナによっお閉じられたす。
  • リポゞトリは XNUMX 分ごずに同期されたす。
  • ベンダヌから受け取ったアセンブラを䜿甚しお、むンストヌル パッケヌゞのアセンブリが開始されたす。

この埌、コヌドをチェックしお転送し、パむプを起動しおこちら偎で組み立おる既存の手順がすでにありたした。

このオプションは XNUMX 月に開始されたした。 移行の難しさにより、ベンダヌず珟堎の間で倚少の䞍満が生じたしたが、翌 XNUMX か月間かけおすべおの荒削りな点を取り陀き、チヌム間でプロセスを確立するこずができたした。 これで、コミットず配信によるアセンブリが可胜になりたした。
40 月には、パむプラむンを䜿甚しお本番環境ぞの個別のパッケヌゞの最初のむンストヌルをなんずか完了したした。XNUMX 月以降、䟋倖なく、個別の非リリヌス パッケヌゞのすべおのむンストヌルは CD ツヌルを通じお実行されたした。 さらに、ベンダヌよりも小芏暡なチヌムで、リリヌス構成の XNUMX% で瀟内タスクのシェアを達成するこずができたした。これは明らかな成功です。 最も重芁な䜜業は、リリヌスを組み立おおむンストヌルするこずです。

最終的な解決策: 环積むンストヌル パッケヌゞ 

私たちは、ベンダヌの指瀺をスクリプト化するのはたあたあの自動化であるこずを十分に理解しおおり、プロセス自䜓を再考する必芁がありたした。 解決策は明癜で、必芁なバヌゞョンのすべおのオブゞェクトを含む环積䟛絊をリリヌス ブランチから収集するこずでした。

私たちは抂念実蚌から始めたした。過去の実装の内容に埓っおリリヌス パッケヌゞを手䜜業で組み立お、環境にむンストヌルしたした。 すべおがうたくいき、コンセプトは実珟可胜であるこずがわかりたした。 次に、初期化蚭定をスクリプト化しおコミットに含めるずいう問題を解決したした。 茪郭曎新の䞀環ずしお、新しいパッケヌゞを準備し、テスト環境でテストしたした。 実装チヌムからはさたざたなコメントがありたしたが、むンストヌルは成功したした。 しかし重芁なこずは、XNUMX 月のリリヌスでアセンブリずずもに実皌働を開始する蚱可が䞎えられたずいうこずです。

残り XNUMX か月匷ずいう状況で、厳遞された物資は明らかに時間がなくなっおいるこずを瀺唆しおいたした。 圌らはリリヌス ブランチからビルドを䜜成するこずにしたしたが、なぜ分離する必芁があるのでしょうか? Prod のようなものはなく、既存のブランチは圹に立ちたせん。䞍芁なコヌドがたくさんありたす。 緊急にプロッドのようなものを削枛する必芁がありたすが、これは XNUMX 件を超えるコミットです。 手䜜業で組み立おるずいう遞択肢はたったくありたせん。 補品のむンストヌル ログを実行し、ブランチぞのコミットを収集するスクリプトを䜜成したした。 XNUMX 回目は正しく動䜜し、「ファむルで終了」するずブランチの準備が敎いたした。 

私たちはむンストヌル パッケヌゞ甚に独自のビルダヌを䜜成し、XNUMX 週間で完成させたした。 次に、むンストヌラヌはオヌプン゜ヌスであるため、システムのコア機胜からむンストヌラヌを倉曎する必芁がありたした。 䞀連のチェックず修正を経お、結果は成功したず芋なされたす。 その間に、リリヌスの構成が圢になり、正しくむンストヌルするにはテスト回路を補品版ず調敎する必芁があり、そのために別のスクリプトが䜜成されたした。

圓然のこずながら、最初のむンストヌルに぀いおは倚くのコメントがありたしたが、党䜓的にはコヌドは機胜したした。 そしお、XNUMX 回目のむンストヌル埌、すべおがうたくいくようになりたした。 オブゞェクトの構成管理ずバヌゞョン管理は手動モヌドで個別に監芖されたしたが、この段階ではこれは非垞に正圓でした。

さらなる課題は、倚数の未リリヌスを考慮する必芁があるこずでした。 しかし、Prod のようなブランチずリベヌスを䜿甚するず、タスクが透明になりたした。

初めおでも、迅速か぀゚ラヌなしで

私たちは楜芳的な姿勢でリリヌスに取り組み、さたざたなサヌキットで十数件のむンストヌルを成功させたした。 しかし、文字通り締め切りの XNUMX 日前に、ベンダヌが受け入れられた方法でリリヌスのむンストヌルを準備する䜜業を完了しおいないこずが刀明したした。 䜕らかの理由でビルドが機胜しない堎合、リリヌスは䞭断されたす。 さらに、私たちの努力を通じお、これは特に䞍快なこずです。 我々には退华する術がなかった。 したがっお、私たちは代替オプションを怜蚎し、アクションプランを䜜成し、蚭眮を開始したした。

驚くべきこずに、800 を超えるオブゞェクトで構成されるリリヌス党䜓が、初めお、わずか 10 分で正しく開始されたした。 XNUMX 時間かけおログをチェックしお゚ラヌを探したしたが、䜕も芋぀かりたせんでした。

翌日はリリヌスチャットがずっず沈黙しおいたした。実装の問題、䞍正なバヌゞョン、たたは「䞍適切な」コヌドはありたせんでした。 それはどこか気たずいものでさえありたした。 その埌、いく぀かのコメントが出おきたしたが、他のシステムや以前の経隓ず比范するず、その数ず優先床は著しく䜎かったです。

环積的な効果によるさらなる効果は、組み立おずテストの品質の向䞊でした。 完党リリヌスを耇数回むンストヌルしたため、ビルドの欠陥ず展開゚ラヌがタむムリヌに特定されたした。 フルリリヌス構成でのテストにより、増分むンストヌル䞭には珟れなかったオブゞェクトの盞互圱響における欠陥をさらに特定するこずが可胜になりたした。 特にリリヌスに察する 57% の貢献を考えるず、これは間違いなく成功でした。

結果ず結論

XNUMX 幎も経たないうちに、私たちは次のこずを達成するこずができたした。

  • ゚キゟチックなシステムを䜿甚しお本栌的な瀟内開発を構築したす。
  • 重芁なベンダヌぞの䟝存を排陀​​したす。
  • 非垞に䞍芪切なレガシヌのために CI/CD を起動したす。
  • 実装プロセスを新しい技術レベルに匕き䞊げたす。
  • 導入時間を倧幅に短瞮したす。
  • 実装゚ラヌの数が倧幅に枛少したす。
  • 自分を開発の第䞀人者であるず自信を持っお宣蚀しおください。

もちろん、説明されおいる内容の倚くは党くのくだらないように芋えたすが、これらはシステムの機胜ずそこに存圚するプロセスの制限です。 珟時点では、この倉曎は IS プロファむルの補品ずサヌビス (マスタヌ アカりント、プラスチック カヌド、普通預金口座、゚スクロヌ、珟金ロヌン) に圱響を䞎えおいたすが、このアプロヌチは DevOps プラクティスの実装タスクが蚭定されおいるあらゆる IS に適甚できる可胜性がありたす。 环積モデルは、倚くの配信からの埌続の実装 (非リリヌスのものを含む) に察しお安党に耇補できたす。

出所 habr.com

コメントを远加したす