2022年3月7日

Continuous Delivery

Continuous Integration

HarnessのGitブランチング

Gitブランチングは、設定変更を簡単に行う方法を提供し、CI/CDパイプラインの開発、テスト、保守にかかる時間を短縮します。その方法をご覧ください。

03.-Design_Blog-header-16-tablet.webp

バージョン管理システムは、ファイルのバージョンを追跡し、またブランチング、修正、テスト、そして承認とCIチェックを経てメインブランチにマージすることによって単独で変更を行うという概念をもたらしました。

image-10-1920w.png

Git Experienceは、パイプラインやコネクターなどのHarnessエンティティに対しても同様のパラダイムでブランチを作成することができます。メインブランチからフォークアウトして、他の人が壊さないように変更を加え、分離してテストし、他のコード変更と同じようにmasterブランチにマージすることができるのです。

image8-1536x1028-1920w.webp

必要条件 

Gitブランチングには、以下のような要件がありました。

  1. エンティティタイプごとに独立したセクションを持つ、リッチなユーザーエクスペリエンス。
  2. エンティティのページネーションと高度なフィルタリングをサポート。
  3. エンティティのレンダリングにかかるレイテンシーの低さ。
  4. Gitエクスペリエンスを無効にしても同じエクスペリエンスを提供。

課題と解決策

この要件に合わせるために、次のような課題がありました。

  • Gitはファイルシステムベースのストレージです。誰かがフィルターを提供するたびにGitからデータを取得するには、Git内の全てのファイルをスキャンして、UI要求に応えるためにそれらをパースする必要があるでしょう。これでは、長い待ち時間が発生してしまいます。
  • Gitの状態をHarnessで維持するとしても、GitからHarnessへの変更を揃えるのは大変なことです。
  • ユーザーは設定変更なしでブランチを作成し続けることができますが、それらをHarnessに常駐させたくない場合もあります。

キャッシュとしてのMongoDB

最適化するために、Mongoをキャッシュとして使い、全てのエンティティをパースしてデータベースに保存しています。これにより、Gitから取得するときに直面するパフォーマンスのボトルネックを克服することができます。

Git Webhooks

全てのGitプロバイダーはGitのさまざまなイベントに対するWebhookを持っているので、それを使ってMongoを更新します。Gitエクスペリエンスを有効にすると、Gitに Webhookを自動登録します。この結果、HarnessはGitのさまざまな種類のイベントを受け取ることになります。

イベントを受信すると、キューに入れ、非同期でシステムを更新します。例えば、branch-createイベントを受け取ると、UIに表示されるブランチリストを更新します。同様に、branch-deleteイベントを受け取ると、Harness Mongoのキャッシュからそのブランチを削除します。さらに、pushイベントを受け取ると、コミット内の全ファイルの内容を取得し、Harnessのエンティティを更新します。

ブランチとリポジトリーのフィルターを最適化するために、他のデータとともにエンティティに保存します。

ブランチショートリスティング

Gitで新しいブランチを作成しても、常に設定が変更されるとは限りません。ユーザーが特定のブランチを同期させたいときのために、オンデマンド同期を提供しています。同期を開始すると、そのブランチの全てのエンティティを取り出し、パースして、Mongoに保存します。

ユーザーエクスペリエンス


Harness UIからエンティティの追加/修正を行いたいユーザーのために、Gitプロバイダーと同様のユーザーエクスペリエンスを提供しました。

Gitの操作に必要な認証情報

ユーザーがHarnessに行ったコミットやHarnessから行ったコミットを特定するために、ユーザープロファイルという概念を使用しています。ユーザープロファイルの下にはソースコードマネージャーがあり、ユーザーはGitに変更を加えるために個人用のアクセストークンを提供する必要があります。SCMは、プロジェクトやパイプライン、コネクターなどに変更を加える人を監査するのに便利です。また、リポジトリーに設定されたブランチングルールを守るのにも役立ちます。

ブランチフォークとPRの作成

Harness UIからGitにプッシュする際、PRを作成するだけでなく、新しいブランチや既存のブランチにプッシュする機能を提供しました。これにより、ユーザーはブランチをフォークし、マージする前にレビューを受けることができます。さらに、この機能により、設定変更のレビュー中に他の人がメインブランチからPipelinesの作業を継続することができます。

エンティティ一覧

マルチリポジトリーシナリオでユーザーがシームレスに体験できるように、デフォルトのブランチエンティティをリストアップし、ユーザーはリポブランチでフィルタリングしてエンティティを取得することができます。さらに、複数のブランチがある場合、ユーザーは任意のブランチでフィルタリングして、全てのエンティティを見ることができ、高度なフィルタリングも適用できます。

ブランチをまたぐエンティティの切り替え

ブランチをシームレスに切り替えて比較できるように、各エンティティの詳細画面でユーザーがブランチを切り替えられるようにしました。

まとめ

Git SyncとGitブランチングは、最新のDevOpsソリューションに多くの可能性を約束します。これらは、設定変更を簡単に行う方法を提供し、開発者がCI/CDパイプラインの開発、テスト、保守にかかる時間を全体的に短縮するのに役立ちます。特にブランチングでは、本番環境にプッシュする前にブランチ内の全ての設定変更を分離してテストすることができます。さらに、誤った設定変更のために誰かをブロックすることもなくなります。

私たちのブログ記事をもっと読んでみませんか。HarnessでGitOpsをどのように行っているかをご覧ください。また、姉妹記事のGit Sync Experienceを見逃した方は、今すぐ是非。

この記事は、Abhinav Singh、Akash Nagarajan、Rama Tummala、Deepak Patankarの協力により執筆されました。 


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ