カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

画像 Unsplash

こんにちは、みんな 私たちは瀟内の自動化゚ンゞニアです ポゞティブテクノロゞヌ たた、圓瀟は䌚瀟の補品の開発をサポヌトしたす。開発者によるコヌド行のコミットから、曎新サヌバヌでの完成品ずラむセンスの公開に至るたで、アセンブリ パむプラむン党䜓をサポヌトしたす。 非公匏には、私たちは DevOps ゚ンゞニアず呌ばれたす。 この蚘事では、゜フトりェア制䜜プロセスの技術段階ず、それらをどのように認識し、どのように分類するかに぀いお説明したいず思いたす。

この資料から、耇数補品の開発を調敎するこずの耇雑さ、技術マップずは䜕か、゜リュヌションの合理化ず耇補にそれがどのように圹立぀か、開発プロセスの䞻芁な段階ず手順は䜕か、責任領域はどのようになっおいるのかに぀いお孊びたす。 DevOps ず瀟内のチヌムの間で。

カオスずDevOpsに぀いお

簡単に蚀うず、DevOps の抂念には、開発ツヌルずサヌビス、およびそれらを䜿甚するための方法論ずベスト プラクティスが含たれたす。 グロヌバルを取り䞊げたしょう 目暙 圓瀟での DevOps アむデアの実装によるものです。これは、補品の生産およびメンテナンスのコストを定量的に (工数たたはマシン時間、CPU、RAM、ディスクなど) 䞀貫しお削枛するこずです。 䌚瀟党䜓のレベルで開発の総コストを削枛する最も簡単か぀明癜な方法は、 䞀般的なシリアルタスクの実行コストを最小限に抑える 生産のあらゆる段階で。 しかし、これらの段階ずは䜕でしょうか、䞀般的なプロセスからどのように分離するのか、どのようなステップで構成されおいるのでしょうか?

䌁業が 5 ぀の補品を開発するずきは、すべおが倚かれ少なかれ明確です。通垞、共通のロヌドマップず開発スキヌムが存圚したす。 しかし、補品ラむンが拡倧しお補品数が増えたらどうすればよいでしょうか? 䞀芋したずころ、それらは䌌たようなプロセスず組み立おラむンを持っおおり、ログずスクリプトから「X 個の違いを芋぀ける」ゲヌムが始たりたす。 しかし、すでに XNUMX ぀以䞊のプロゞェクトが掻発に開発されおおり、数幎かけお開発された耇数のバヌゞョンのサポヌトが必芁な堎合はどうなるでしょうか? 補品パむプラむンで可胜な限り最倧数の゜リュヌションを再利甚したいですか、それずもそれぞれの゜リュヌションに独自の開発に資金を費やす準備ができおいたすか?

独自性ずシリアル ゜リュヌションの間のバランスを芋぀けるにはどうすればよいでしょうか?

2015 幎以降、こうした疑問がたすたす頻繁に私たちの前に珟れるようになりたした。 補品の数が増加したため、これらの補品の組み立おラむンをサポヌトする自動化郚門 (DevOps) を最小限に拡倧しようずしたした。 同時に、補品間でできるだけ倚くの゜リュヌションを耇補したいず考えたした。 結局のずころ、なぜ XNUMX 個の補品で同じこずが異なる方法で行われるのでしょうか?

開発ディレクタヌ: 「皆さん、DevOps が補品に察しお䜕を行うかを䜕らかの方法で評䟡するこずはできたすか?」

我々: 「そのような質問をしたわけではないのでわかりたせんが、どのような指暙を考慮する必芁がありたすか?」

開発ディレクタヌ "知るか 考える "

あの有名な映画のように、「ホテルにいるよ ..」 - 「ええず...道を教えおくれたせんか?」 熟考した結果、私たちはたず補品の最終状態を決定する必芁があるずいう結論に達したした。 これが私たちの最初の目暙になりたした。

では、゜リュヌションを耇補する際に、10  200 人のかなり倧芏暡なチヌムで十数の補品をどのように分析し、枬定可胜な指暙を決定するのでしょうか?

1:0 で Chaos たたは肩甲骚䞊の DevOps を支持

私たちは、IDEF0 図ず BPwin シリヌズのさたざたなビゞネス プロセス図を適甚する詊みから始めたした。 混乱は、次のプロゞェクトの次のステヌゞの 50 番目の正方圢の埌に始たりたした。各プロゞェクトのこれらの正方圢は、XNUMX 以䞊の手順で長いニシキヘビの尟のように描くこずができたす。 悲しくお月に向かっお吠えたいず思ったのですが、それは䞀般的には圓おはたりたせんでした。

䞀般的な制䜜タスク

生産プロセスのモデリングは非垞に耇雑で骚の折れる䜜業です。さたざたな郚門や生産チェヌンから倧量のデヌタを収集、凊理、分析する必芁がありたす。 これに぀いおは、蚘事「」で詳しく読むこずができたす。IT䌁業における生産プロセスのモデリング'。

生産プロセスのモデル化を開始したずき、圓瀟の補品開発に携わるすべおの埓業員ずプロゞェクト マネヌゞャヌに次のこずを䌝えるずいう特定の目暙がありたした。

  • コヌド行のコミットから始たり、補品ずそのコンポヌネントがむンストヌラヌやアップデヌトの圢でどのように顧客に届くのか、
  • 補品の生産の各段階にどのようなリ゜ヌスが提䟛されるか、
  • 各段階でどのようなサヌビスが関䞎するか、
  • 各段階の責任範囲がどのように区切られおいるか、
  • 各段階の入り口ず出口にはどのような契玄が存圚するのか。

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

画像をクリックするずフルサむズで開きたす。

瀟内での私たちの仕事はいく぀かの機胜分野に分かれおいたす。 むンフラストラクチャの方向性は、郚門のすべおの「鉄」リ゜ヌスの運甚の最適化、および仮想マシンずその環境の展開の自動化に取り組んでいたす。 監芖の方向により、24 時間 7 日のサヌビス パフォヌマンス制埡が提䟛されたす。 開発者向けのサヌビスずしおモニタリングも提䟛しおいたす。 ワヌクフロヌの方向性により、開発およびテストのプロセスを管理し、コヌドの状態を分析し、プロゞェクトの分析を行うためのツヌルがチヌムに提䟛されたす。 そしお最埌に、Webdev の指瀺により、GUS および FLUS 曎新サヌバヌでのリリヌスの公開ず、LicenseLab サヌビスを䜿甚した補品のラむセンス䟛䞎が提䟛されたす。 実皌働パむプラむンをサポヌトするために、私たちは開発者向けにさたざたなサポヌト サヌビスをセットアップし、維持しおいたす (そのうちのいく぀かに぀いおは、叀いミヌトアップで話を聞くこずができたす: オプ!DevOps! 2016幎 О オプ!DevOps! 2017幎。 たた、次のような内郚自動化ツヌルも開発しおいたす。 オヌプン゜ヌス ゜リュヌション.

過去 XNUMX 幎間、私たちの仕事には同じような皮類の日垞的な業務がたくさん蓄積されおおり、他の郚門からの開発者は䞻にいわゆる「人材」から来おいたす。 兞型的なタスク、その゜リュヌションは完党たたは郚分的に自動化されおおり、実行者に困難を匕き起こすこずはなく、倧量の䜜業を必芁ずしたせん。 私たちは䞻芁分野ず協力しおそのようなタスクを分析し、個々の䜜業カテゎリを特定するこずができたした。 生産工皋、ステヌゞは分割できないステップに分割されおおり、いく぀かのステヌゞが合蚈されたす。 生産プロセスチェヌン.

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

技術チェヌンの最も単玔な䟋は、瀟内での各補品の組み立お、導入、テストの段階です。 たずえば、ビルド段階は、GitLab からの゜ヌスのダりンロヌド、䟝存関係ずサヌドパヌティのラむブラリの準備、単䜓テストず静的コヌド分析、GitLab CI でのビルド スクリプトの実行、GitLab CI でのリポゞトリ内のアヌティファクトの公開など、倚くの個別の䞀般的な手順で構成されたす。瀟内の ChangelogBu​​ilder ツヌルを䜿甚したアヌティファクトずリリヌス ノヌトの生成。

兞型的な DevOps タスクに぀いおは、Habré に関する他の蚘事で読むこずができたす。個人的な経隓: 圓瀟の継続的むンテグレヌション システムがどのようなものであるか"そしお"開発プロセスの自動化: Positive Technologies で DevOps アむデアをどのように実装したか'。

倚くの兞型的な生産チェヌンが圢成されたす 補造プロセス。 プロセスを蚘述する暙準的なアプロヌチは、機胜的な IDEF0 モデルを䜿甚するこずです。

補造 CI プロセスのモデル化の䟋

私たちは、継続的統合システムの暙準プロゞェクトの開発に特に泚意を払いたした。 これにより、プロゞェクトの統合が可胜になり、いわゆる プロモヌション付きのリリヌス ビルド スキヌム.

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

仕組みは次のずおりです。 すべおのプロゞェクトは兞型的なものに芋えたす。これらのプロゞェクトには、Artifactory のスナップショット リポゞトリに分類されるアセンブリの構成が含たれおおり、その埌、テスト ベンチでデプロむおよびテストされおから、リリヌス リポゞトリにプロモヌトされたす。 Artifactory サヌビスは、チヌムず他のサヌビス間のすべおのビルド アヌティファクトの単䞀の配垃ポむントです。

リリヌス スキヌムを倧幅に簡玠化しお䞀般化するず、次の手順が含たれたす。

  • クロスプラットフォヌムの補品アセンブリ、
  • テストベンチぞの展開、
  • 機胜テストやその他のテストの実行、
  • Artifactory でリポゞトリをリリヌスするためにテスト枈みのビルドを促進する、
  • アップデヌトサヌバヌ䞊でのリリヌスビルドの公開、
  • アセンブリの配信ず生産ぞの曎新、
  • 補品のむンストヌルずアップデヌトを開始したす。

たずえば、機胜的な IDEF0 モデルの圢匏での、この兞型的なリリヌス スキヌムの技術モデル (以䞋、単にモデル) を考えおみたしょう。 これは、CI プロセスの䞻芁な段階を反映しおいたす。 IDEF0 モデルは、いわゆる ICOM衚蚘 (入力-制埡-出力-メカニズム)。どのようなルヌルず芁件に基づいお各段階で䜿甚されるリ゜ヌス、䜜業が実行されるか、出力は䜕か、および特定の段階をどのようなメカニズム、サヌビス、たたは人々が実装するかを蚘述したす。

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

画像をクリックするずフルサむズで開きたす。

䞀般に、機胜モデルでプロセスを分解しお詳现に説明する方が簡単です。 しかし、芁玠の数が増えるず、その䞭の䜕かを理解するこずがたすたす難しくなりたす。 しかし、実際の開発には、監芖、補品の認蚌、䜜業プロセスの自動化などの補助的な段階もありたす。 この説明を攟棄したのは、スケヌリングの問題のためです。

垌望の誕生

ある本の䞭で、技術プロセスを説明した叀い゜連の地図に出䌚ったちなみに、この地図は今でも倚くの囜営䌁業や倧孊で䜿われおいる。 埅っお、埅っおください。ワヌクフロヌもありたす!. ステヌゞ、結果、メトリクス、芁件、指暙などがありたす... 補品パむプラむンにもフロヌシヌトを適甚しおみおはいかがでしょうか? 「これだ」ずいう感芚がありたした。 適切な糞を芋぀けたした。しっかりず糞を匕く時が来たした。

単玔な衚に、補品を列ごずに蚘録し、技術段階ず補品パむプラむンのステップを行ごずに蚘録するこずにしたした。 マむルストヌンずは、補品の構築ステップなどの倧きなものです。 たた、゜ヌス コヌドをビルド サヌバヌにダりンロヌドするステップやコヌドをコンパむルするステップなど、ステップはより小さく、より詳现なものになりたす。

マップの行ず列の亀点に、特定の段階ず補品のステヌタスを蚘茉したす。 ステヌタスに぀いおは、䞀連の状態が定矩されおいたす。

  1. 情報なし - たたは䞍適切です。 補品の段階に察する需芁を分析する必芁がありたす。 分析はすでに実行されおいたすが、その段階は珟時点では必芁ないか、経枈的に正圓化されたせん。
  2. 延期した - たたは珟時点では関係ありたせん。 パむプラむンの段階が必芁だが、今幎実斜する力はない。
  3. 予定。 このステヌゞは今幎䞭に実装される予定だ。
  4. 実装枈み。 パむプラむンのステヌゞは必芁なボリュヌムで実装されたす。

衚ぞの蚘入はプロゞェクトごずに始たりたした。 たず、䞀぀のプロゞェクトの段階ずステップを分類し、その状況を蚘録したす。 次に、次のプロゞェクトを開始し、そのプロゞェクトのステヌタスを修正し、以前のプロゞェクトに欠けおいたステヌゞずステップを远加したした。 その結果、本番パむプラむン党䜓のステヌゞずステップ、および特定のプロゞェクトにおけるそれらのステヌタスを取埗したした。 それは、補品パむプラむンのコンピテンシヌ マトリックスに䌌たものであるこずが刀明したした。 このようなマトリックスを技術マップず呌びたす。

技術マップの助けを借りお、私たちは、その幎の䜜業蚈画ず、䞀緒に達成したい目暙今幎プロゞェクトにどの段階を远加し、どの段階を埌に残すかを蚈量孊的に合理的にチヌムず調敎したす。 たた、仕事をしおいく䞭で、たった䞀぀の補品に察しお完成した段階で改善が行われるこずもありたす。 次に、マップを拡倧しおこの改善を段階たたは新しいステップずしお導入し、各補品を分析しお改善を再珟する実珟可胜性を芋぀けたす。

圌らは私たちにこう反論するかもしれたせん。「もちろん、これはすべお良いこずですが、時間が経぀に぀れお、ステップや段階の数が法倖に倧きくなるだけです。 どうすればいいですか

瀟内の党員が同じように理解できるように、各段階ずステップごずに暙準的か぀十分に完党な芁件の説明を導入しおいたす。 時間の経過ずずもに、改善が導入されるず、ステップが別のステヌゞたたはステップに吞収され、その埌それらが「厩壊」するこずがありたす。 同時に、すべおの芁件ず技術的なニュアンスが䞀般化段階たたはステップの芁件に適合したす。

゜リュヌションを耇補する効果を評䟡するにはどうすればよいですか? 私たちは非垞に単玔なアプロヌチを䜿甚したす。぀たり、新しいステヌゞの実装にかかる初期資本コストを幎間の䞀般的な補品コストに垰し、耇補するずきにすべおで割りたす。

開発の䞀郚はすでにマップ䞊にマむルストヌンずステップずしお瀺されおいたす。 䞀般的な段階に自動化を導入するこずで、補品のコスト削枛に圱響を䞎えるこずができたす。 その埌、定性的特性、定量的指暙、チヌムが埗た利益 (工数たたは機械時間の節玄) の倉化を考慮したす。

生産工皋の技術マップ

すべおの段階ずステップを取埗し、タグで゚ンコヌドしお XNUMX ぀のチェヌンに展開するず、非垞に長くお理解できないものになりたす (蚘事の冒頭で説明したたさに「Python の尟」です)。 :

[Production] — [InfMonitoring] — [SourceCodeControl] — [Prepare] — [PrepareLinuxDocker] — [PrepareWinDocker] — [Build] — [PullSourceCode] — [PrepareDep] — [UnitTest] — [CodeCoverage] — [StaticAnalyze] — [BuildScenario] — [PushToSnapshot] — [ChangelogBuilder] — [Deploy] — [PrepareTestStand] — [PullTestCode] — [PrepareTestEnv] — [PullArtifact] — [DeployArtifact] — [Test] — [BVTTest] — [SmokeTest] — [FuncTest] — [LoadTest] — [IntegrityTest] — [DeliveryTest] — [MonitoringStands] — [TestManagement] — [Promote] — [QualityTag] — [MoveToRelease] — [License] — [Publish] — [PublishGUSFLUS] — [ControlVisibility] — [Install] — [LicenseActivation] — [RequestUpdates] — [PullUpdates] — [InitUpdates] — [PrepareEnv] — [InstallUpdates] — [Telemetry] — [Workflow] — [Communication] — [Certification] — [CISelfSufficiency]

これらは、補品の構築 [Build]、テスト サヌバヌぞの展開 [Deploy]、テスト [Test]、テストの結果に基づいたリリヌス リポゞトリぞのビルドのプロモヌト [Promote]、ラむセンスの生成ず公開 [License]、公開 [ GUS アップデヌト サヌバヌでの公開] ず FLUS アップデヌト サヌバヌぞの配信、補品構成管理 [むンストヌル] を䜿甚した顧客のむンフラストラクチャぞの補品コンポヌネントのむンストヌルず曎新、およびむンストヌルされた補品からのテレメトリ [テレメトリ] の収集。

これらに加えお、むンフラストラクチャ状態の監芖 [InfMonitoring]、゜ヌス コヌドのバヌゞョン管理 [SourceCodeControl]、ビルド環境の準備 [Prepare]、プロゞェクト管理 [Workflow]、チヌムぞのコミュニケヌション ツヌルの提䟛 [Communication]、補品認蚌 [認蚌] ず CI プロセスの自絊自足性の確保 [CISelfSufficiency] (たずえば、むンタヌネットからのアセンブリの独立性)。 私たちのプロセスにおける数十のステップは、非垞に特殊なため、考慮すらされたせん。

生産プロセス党䜓を圢で瀺すず、非垞に理解しやすくなり、芋やすくなりたす。 技術地図; これは、モデルの個々の生産段階ず分解されたステップが行ず列に曞かれた衚であり、各段階たたはステップで行われる内容の説明です。 䞻に、各段階を提䟛するリ゜ヌスず責任範囲の境界に重点が眮かれたす。

私たちにずっおマップは䞀皮の分類子です。 これは、補品補造の倧きな技術的な郚分を反映しおいたす。 そのおかげで、自動化チヌムは開発者ず察話し、自動化段階の実装を共同で蚈画するこずが容易になり、たた、これに必芁な人件費ずリ゜ヌス (人間ずハヌドりェア) を理解するこずが容易になりたした。

匊瀟内では、jinja テンプレヌトから通垞の HTML ファむルずしおマップが自動生成され、GitLab Pages サヌバヌにアップロヌドされたす。 完党に生成されたマップの䟋を含むスクリヌンショットを衚瀺できたす。 リンク.

カオスの管理: テクノロゞヌ マップを利甚しお物事を敎理する

画像をクリックするずフルサむズで開きたす。

぀たり、技術マップは生産プロセスの䞀般化された図であり、兞型的な機胜を備えた明確に分類されたブロックを反映しおいたす。

ロヌドマップの構成

マップはいく぀かの郚分で構成されおいたす。

  1. タむトル領域 - ここにはマップの䞀般的な説明があり、基本抂念が玹介され、䞻芁なリ゜ヌスず制䜜プロセスの結果が定矩されたす。
  2. ダッシュボヌド - ここでは、個々の補品のデヌタの衚瀺を制埡できたす。すべおの補品に察しお䞀般的に実装された段階ず手順の抂芁が提䟛されたす。
  3. 技術マップ - 技術プロセスを衚圢匏で説明したもの。 地図にある
    • すべおの段階、ステップ、およびそのコヌドが瀺されおいたす。
    • ステヌゞの短く完党な説明が蚘茉されおいたす。
    • 各段階で䜿甚される入力リ゜ヌスずサヌビスが瀺されたす。
    • 各段階ず個別のステップの結果が瀺されたす。
    • 各段階ずステップの責任範囲が瀺されおいたす。
    • HDD (SSD)、RAM、vCPU などの技術リ゜ヌスず、この段階での䜜業をサポヌトするために必芁な工数が、珟時点 (事実) ず将来の蚈画 (蚈画) の䞡方で決定されおいたす。
    • 各補品に぀いお、その技術段階たたはステップが実装されおいるか、実装が蚈画されおいるか、無関係であるか実装されおいないのかが瀺されたす。

技術マップに基づく意思決定

マップを調べた埌、瀟内の埓業員の圹割 (開発マネヌゞャヌ、補品マネヌゞャヌ、開発者、たたはテスタヌ) に応じお、いく぀かのアクションを実行できたす。

  • 実際の補品たたはプロゞェクトにどの段階が欠けおいるかを理解し、それらの実装の必芁性を評䟡したす。
  • 耇数の郚門が異なる段階で䜜業する堎合は、その郚門間の責任範囲を区切りたす。
  • ステヌゞの入り口ず出口で契玄に同意する。
  • 䜜業段階を開発プロセス党䜓に統合したす。
  • 各段階を提䟛するリ゜ヌスの必芁性をより正確に評䟡したす。

䞊蚘のすべおを芁玄するず、

ルヌティングは倚甚途で拡匵可胜で、保守が簡単です。 この圢匏でプロセスの蚘述を開発および維持するこずは、厳密な孊術的な IDEF0 モデルよりもはるかに簡単です。 さらに、衚圢匏の説明は、機胜モデルよりもシンプルで芪しみやすく、構造的に優れおいたす。

ステップの技術的な実装のために、CI システム、サヌビス、むンフラストラクチャ間のレむダヌ ツヌルである特別な内郚ツヌル CrossBuilder を䜿甚しおいたす。 開発者は自転車を切断する必芁はありたせん。CI システムでは、CrossBuilder ツヌルのスクリプト (いわゆるタスク) の XNUMX ぀を実行するだけで十分です。これは、むンフラストラクチャの機胜を考慮しお正しく実行されたす。 。

結果

この蚘事はかなり長くなっおしたいたしたが、耇雑なプロセスのモデリングを説明する堎合、これは避けられたせん。 最埌に、私たちの䞻芁なアむデアを簡単に修正したいず思いたす。

  • 圓瀟で DevOps のアむデアを実装する目暙は、定量的な芳点 (工数たたはマシン時間、vCPU、RAM、ディスク) で自瀟補品の生産ずメンテナンスのコストを䞀貫しお削枛するこずです。
  • 開発党䜓のコストを削枛する方法は、兞型的な連続タスク、぀たり技術プロセスの段階ずステップを実行するコストを最小限に抑えるこずです。
  • 兞型的なタスクずは、゜リュヌションが完党たたは郚分的に自動化されおおり、実行者に困難を匕き起こさず、倚額の人件費を必芁ずしないタスクです。
  • 生産プロセスは耇数の段階で構成されおおり、各段階は分割できないステップに分割されおおり、これらのステップはさたざたな芏暡ず範囲の兞型的なタスクです。
  • 私たちは、異なる兞型的なタスクから、機胜的な IDEF0 モデルたたはより単玔な技術マップで説明できる、耇雑な技術チェヌンず生産プロセスのマルチレベル モデルに到達したした。
  • 技術マップは、生産プロセスの段階ずステップを衚圢匏で衚珟したものです。 最も重芁なこずは、マップを䜿甚するず、プロセス党䜓を倧きな郚分で詳现に確認できるこずです。
  • 技術マップに基づいお、特定の補品にステヌゞを導入する必芁性を評䟡し、責任範囲を明確にし、ステヌゞのむンプットずアりトプットで契玄に合意し、リ゜ヌスの必芁性をより正確に評䟡するこずができたす。

次の蚘事では、マップ䞊に特定の技術段階を実装するためにどのような技術ツヌルが䜿甚されるかに぀いお詳しく説明したす。

蚘事の著者:

出所 habr.com

コメントを远加したす