werf でのモノリポゞトリずマルチリポゞトリのサポヌトず、Docker レゞストリはそれず䜕の関係がありたすか

werf でのモノリポゞトリずマルチリポゞトリのサポヌトず、Docker レゞストリはそれず䜕の関係がありたすか

モノリポゞトリの話題は䜕床も議論されおおり、通垞、非垞に掻発な論争を匕き起こしおいたす。 䜜成するこずで ワヌフ Git から Docker むメヌゞぞのアプリケヌション コヌドの構築 (その埌、Kubernetes ぞの配信) のプロセスを改善するために蚭蚈されたオヌプン ゜ヌス ツヌルであるため、どの遞択が最適であるかに぀いおはあたり考えおいたせん。 私たちにずっお、さたざたな意芋の支持者に必芁なものをすべお提䟛するこずが第䞀ですもちろん、垞識に反しない堎合に限りたす。

werf の最近のモノリポゞトリのサポヌトは、この良い䟋です。 しかしその前に、このサポヌトが䞀般的に werf の䜿甚にどのように関連しおいるのか、そしお Docker レゞストリがそれずどのような関係があるのか​​を理解したしょう。

問題

そんな状況を想像しおみたしょう。 同瀟には独立したプロゞェクトに取り組んでいる倚くの開発チヌムがありたす。 ほずんどのアプリケヌションは Kubernetes 䞊で実行されるため、コンテナ化されたす。 コンテナやむメヌゞを保存するにはレゞストリレゞストリが必芁です。 このようなレゞストリずしお、同瀟は単䞀のアカりントで Docker Hub を䜿甚しおいたす。 COMPANY。 ほずんどの゜ヌス コヌド ストレヌゞ システムず同様に、 Docker Hub ではネストされたリポゞトリ階局が蚱可されたせん、 そのような COMPANY/PROJECT/IMAGE。 その堎合 プロゞェクトごずに個別のアカりントを䜜成せずに、この制限付きで非モノリシック アプリケヌションをレゞストリに保存するにはどうすればよいでしょうか?

werf でのモノリポゞトリずマルチリポゞトリのサポヌトず、Docker レゞストリはそれず䜕の関係がありたすか

おそらく、ここで説明されおいる状況は盎接知っおいる人もいるでしょうが、䞀般的なアプリケヌション ストレヌゞの敎理の問題を考えおみたしょう。 䞊蚘の䟋ず Docker Hub を参照する必芁はありたせん。

゜リュヌション

アプリケヌションの堎合 モノリシック、XNUMX ぀のむメヌゞで提䟛される堎合、質問はなく、単にむメヌゞをプロゞェクトのコンテナヌ レゞストリに保存したす。

アプリケヌションが耇数のコンポヌネントずしお衚瀺される堎合、 マむクロサヌビス、その堎合は、特定のアプロヌチが必芁です。 XNUMX ぀のむメヌゞで構成される兞型的な Web アプリケヌションの䟋: frontend О backend - 可胜なオプションは次のずおりです。

  1. むメヌゞを別のネストされたリポゞトリに保存したす。

    werf でのモノリポゞトリずマルチリポゞトリのサポヌトず、Docker レゞストリはそれず䜕の関係がありたすか

  2. すべおを XNUMX ぀のリポゞトリに保存し、タグ内のむメヌゞ名を次のように考慮したす。

    werf でのモノリポゞトリずマルチリポゞトリのサポヌトず、Docker レゞストリはそれず䜕の関係がありたすか

NB: 実際には、別のリポゞトリに保存するずいう別のオプションもありたす。 PROJECT-frontend О PROJECT-backend、ただし、サポヌト、組織、ナヌザヌ間の暩利の分配が耇雑であるため、考慮したせん。

ワヌフサポヌト

圓初、werf はネストされたリポゞトリに限定しおいたしたが、幞いなこずに、ほずんどのレゞストリがこの機胜をサポヌトしおいたす。 バヌゞョンから開始 v1.0.4-alpha.3、レゞストリに関する䜜業を远加したした。 ネストはサポヌトされおいたせん、Docker Hub もその XNUMX ぀です。 その時点から、ナヌザヌはアプリケヌション むメヌゞを保存する方法を遞択できたす。

オプションで実装可胜 --images-repo-mode=multirepo|monorepo デフォルト multirepo、぀たりネストされたリポゞトリ内のストレヌゞ。 これは、むメヌゞをレゞストリに保存するパタヌンを定矩したす。 基本的なコマンドを䜿甚するずきに目的のモヌドを遞択するだけで十分で、その他はすべお倉曎されたせん。

ほずんどのワヌフオプションを蚭定できるため 環境倉数, CI / CD システムでは、ストレヌゞ モヌドは通垞、プロゞェクト党䜓に察しおグロヌバルに簡単に蚭定できたす。 䟋えば、 GitLabの堎合 プロゞェクト蚭定に環境倉数を远加するだけです。 蚭定 -> CI / CD -> 倉数: WERF_IMAGES_REPO_MODE: multirepo|monorepo.

むメヌゞの公開ずアプリケヌションのロヌルアりトに぀いお話す堎合は、これらのプロセスに぀いおは、関連するドキュメントの蚘事で詳しく読むこずができたす。 公開プロセス О 導入プロセス) の堎合、モヌドのみが画像を操䜜できるテンプレヌトを決定したす。

悪魔の詳现

新しいストレヌゞ方法を远加する堎合の違いず䞻な困難は、レゞストリのクリヌンアップのプロセスにありたす。 (werf でサポヌトされおいるパヌゞ機胜に぀いおは、を参照しおください。 掗浄工皋).

クリヌニングの際、werf は、Kubernetes クラスタヌで䜿甚されるむメヌゞず、ナヌザヌが構成したポリシヌを考慮したす。 ポリシヌは、タグを戊略に分割するこずに基づいおいたす。 珟圚サポヌトされおいる戊略:

  1. タグ、ブランチ、コミットなどの Git プリミティブによっおリンクされた 3 ぀の戊略。
  2. 任意のカスタムタグの 1 ぀の戊略。

画像を公開するずきにタグ戊略に関する情報を最終画像のラベルに保存したす。 意味自䜓はいわゆる メタタグ - 䞀郚のポリシヌを適甚するために必芁です。 たずえば、Git リポゞトリからブランチたたはタグを削陀する堎合、関連するブランチたたはタグを削陀するのが論理的です。 未䜿甚 レゞストリからのむメヌゞ。これは圓瀟のポリシヌの䞀郚でカバヌされおいたす。

XNUMX ぀のリポゞトリに保存される堎合 (monorepo)、むメヌゞ タグには、メタ タグに加えお、むメヌゞの名前も保存できたす。 PROJECT:frontend-META-TAG。 これらを分離するために、特定の区切り蚘号は導入せず、公開時に最終画像のラベルに必芁な倀を远加するだけで枈みたした。

NB: werf ゜ヌス コヌドに蚘述されおいるすべおの内容を確認するこずに興味がある堎合は、次の点から開始できたす。 PR 1684.

この蚘事では、タグ付け戊略、ラベルぞのデヌタの保存、出版プロセス党䜓など、私たちのアプロヌチの問題点ず正圓化にはこれ以䞊泚意を払いたせん。これらすべおは、Dmitry Stolyarov による最近のレポヌトで詳现に説明されおいたす。werf は Kubernetes の CI/CD 甚ツヌルです'。

芁玄する

ネストされおいないレゞストリのサポヌトの欠劂は、私たちや私たちが知っおいる werf ナヌザヌにずっお障害芁因ではありたせんでした。結局のずころ、い぀でも別のむメヌゞ レゞストリを䜜成する (たたは Google Cloud の条件付きコンテナ レゞストリに切り替える) こずができたす。ただし、より広範な DevOps コミュニティでツヌルをより䟿利にするためには、このような制限を取り陀くのが論理的であるず考えられたした。 これを実装する際、コンテナ レゞストリのクリヌンアップ メカニズムを再構築するずいう䞻な困難に盎面したした。 すべおの準備が敎ったので、誰かにずっおは簡単になったこずを実感できおうれしいです。私たち (プロゞェクトの䞻な開発者ずしお) は、この機胜をさらにサポヌトするのに目立った困難はありたせん。

他のむノベヌションに぀いおも間もなくお知らせしたすので、ぜひお立ち寄りください。 ワヌフ!

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす