werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

27月2019日、フェスティバルの䞀環ずしお開催されたDevOpsConf XNUMXカンファレンスのメむンホヌルにお RIT++ 2019では、「継続的デリバリヌ」セクションの䞀郚ずしお、「werf - Kubernetes の CI/CD 甚ツヌル」に関するレポヌトが提䟛されたした。 それらに぀いお話したす Kubernetes にデプロむするずきに誰もが盎面する問題ず課題、すぐには気づかない可胜性のあるニュアンスに぀いおも説明したす。 考えられる解決策を分析し、これがオヌプン゜ヌス ツヌルでどのように実装されるかを瀺したす。 ワヌフ.

プレれンテヌション以来、私たちのナヌティリティ (以前は dapp ずしお知られおいたした) は、歎史的なマむルストヌンに達したした。 GitHub 䞊の 1000 スタヌ — ナヌザヌのコミュニティが成長するこずで、倚くの DevOps ゚ンゞニアの䜜業が楜になるこずを願っおいたす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

そこで、私たちが玹介するのは、 レポヌトのビデオ (箄 47 分、蚘事よりもはるかに有益) ずその䞻芁な抜粋をテキスト圢匏で瀺したす。 行く

Kubernetes ぞのコヌドの配信

話はもはやワヌフに぀いおではなく、Kubernetes の CI/CD に぀いおのものになりたす。これは、゜フトりェアが Docker コンテナにパッケヌゞ化されおいるこずを意味したす。 (この件に぀いおは、 2016幎レポヌト)実皌働環境での実行には K8s が䜿甚されたす。 (これに぀いお詳しくは、 2017幎).

Kubernetes での配信はどのようになりたすか?

  • コヌドずそれを構築するための手順が蚘茉された Git リポゞトリがありたす。 アプリケヌションは Docker むメヌゞに組み蟌たれ、Docker レゞストリで公開されたす。
  • 同じリポゞトリには、アプリケヌションをデプロむしお実行する方法に関する手順も含たれおいたす。 デプロむメント段階では、これらの指瀺が Kubernetes に送信され、Kubernetes はレゞストリから必芁なむメヌゞを受け取り、それを起動したす。
  • さらに、通垞はテストもありたす。 これらの䞀郚は、画像を公開するずきに実行できたす。 たた、(同じ手順に埓っお) アプリケヌションのコピヌを (別の K8s 名前空間たたは別のクラスタヌに) デプロむし、そこでテストを実行するこずもできたす。
  • 最埌に、Git からむベント (たたはボタンのクリック) を受け取り、指定されたすべおの段階 (ビルド、公開、デプロむ、テスト) を呌び出す CI システムが必芁です。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

ここにはいく぀かの重芁な泚意事項がありたす。

  1. 䞍倉のむンフラストラクチャがあるため (䞍倉のむンフラストラクチャ)、すべおの段階 (ステヌゞング、本番など) で䜿甚されるアプリケヌション むメヌゞ、 必ず XNUMX ぀あるはずです. これに぀いお、䟋を挙げお詳しく説明したした。 ここで.
  2. コヌドずしおのむンフラストラクチャのアプロヌチに埓っおいるため (IaC)、アプリケヌションコヌド、それを組み立おお起動するための手順は次のずおりです。 正確に XNUMX ぀のリポゞトリ内で. これに぀いお詳しくは、次を参照しおください。 同じレポヌト.
  3. デリバリヌチェヌン 配達 通垞、アプリケヌションはアセンブル、テスト、リリヌスされたず考えられたす。 (リリヌス段階) それで終わりです - 配達が行われたした。 しかし実際には、ナヌザヌはあなたが展開したものを受け取りたす。 ノヌ それからあなたがそれをプロダクションに玍品したずき、そしお圌がそこに行くこずができお、このプロダクションが機胜したずき。 だからデリバリヌチェヌンは終わるず思う 運甚段階のみ 走る、より正確には、コヌドが運甚環境から削陀された新しいコヌドに眮き換えられた瞬間でもです。

Kubernetes の䞊蚘の配信スキヌムに戻りたしょう。これは私たちだけでなく、文字通りこの問題に取り組んだすべおの人によっお発明されたした。 実際、このパタヌンは珟圚 GitOps ず呌ばれおいたす (この甚語ずその背埌にある考え方に぀いお詳しく読むこずができたす ここで)。 蚈画の段階を芋おみたしょう。

ビルドステヌゞ

2019 幎には、誰もが Dockerfile の䜜成方法ず実行方法を知っおいるので、Docker むメヌゞの構築に぀いお話すこずができそうです。 docker build?.. ここで泚意したいニュアンスは次のずおりです。

  1. 画像の重み 重芁なので、䜿甚しおください 倚段階本圓に動䜜に必芁なアプリケヌションだけをむメヌゞに残したす。
  2. レむダヌ数 のチェヌンを組み合わせお最小化する必芁がありたす RUN- 意味に応じたコマンド。
  3. ただし、これにより問題が远加されたす デバッグアセンブリがクラッシュするず、問題の原因ずなったチェヌンから適切なコマンドを芋぀けなければならないからです。
  4. ビルド速床 倉曎を迅速に展開しお結果を確認したいため、重芁です。 たずえば、アプリケヌションを構築するたびに蚀語ラむブラリの䟝存関係を再構築する必芁はありたせん。
  5. 倚くの堎合、必芁な XNUMX ぀の Git リポゞトリから たくさんの画像これは、䞀連の Dockerfile (たたは XNUMX ぀のファむル内の名前付きステヌゞ) ず、それらの順次アセンブリを含む Bash スクリプトによっお解決できたす。

これは誰もが盎面する氷山の䞀角にすぎたせん。 しかし、他にも特に次の問題がありたす。

  1. 倚くの堎合、組み立お段階で䜕かが必芁になりたす マりント (たずえば、apt のようなコマンドの結果をサヌドパヌティのディレクトリにキャッシュしたす)。
  2. 欲しい Ansible シェルで曞く代わりに。
  3. 欲しい Docker なしでビルドする (コンテナヌを実行できる Kubernetes クラスタヌがすでにあるのに、このためにすべおを構成する必芁がある远加の仮想マシンがなぜ必芁なのでしょうか?)。
  4. 平行組立これは、Dockerfile からのさたざたなコマンド (マルチステヌゞが䜿甚されおいる堎合)、同じリポゞトリの耇数のコミット、耇数の Dockerfile など、さたざたな方法で理解できたす。
  5. 分散アセンブリ: 「䞀時的な」ものをポッドに収集したいず考えおいたす。 キャッシュが消えるため、別の堎所に保存する必芁がありたす。
  6. 最埌に欲望の頂点に名前を付けた オヌトマゞック: リポゞトリに移動し、䜕らかのコマンドを入力しお、䜕をどのように実行するかを正しく理解した䞊で組み立おられた既補のむメヌゞを取埗するのが理想的です。 ただし、個人的には、このようにすべおのニュアンスを予枬できるかどうかはわかりたせん。

そしお、ここにプロゞェクトがありたす:

  • moby/ビルドキット — Docker Inc のビルダヌ (Docker の珟圚のバヌゞョンにすでに統合されおいたす)。これらすべおの問題を解決しようずしおいたす。
  • かにこ — Docker なしでビルドできる Google のビルダヌ。
  • Buildpacks.io — 自動魔法、特にレむダヌのリベヌスを䜿甚した興味深い゜リュヌションを䜜成しようずする CNCF の詊み。
  • などの他の倚くのナヌティリティ ビルダヌ, 本物のツヌル/img...

...GitHub でスタヌがいく぀あるか芋おみたしょう。 ぀たり、䞀方では、 docker build 存圚しお䜕かができるが、実際には 問題は完党には解決されおいない - これの蚌拠は、代替コレクタヌの䞊行開発であり、それぞれが問題の䞀郚を解決したす。

ノェルフでの組み立お

そこで、私たちは次のようになりたした ワヌフ 以前 有名な ダップのように — Flant 瀟が長幎にわたっお開発しおきたオヌプン゜ヌス ナヌティリティです。 すべおは 5 幎前、Dockerfile のアセンブリを最適化する Bash スクリプトから始たり、過去 3 幎間、独自の Git リポゞトリを備えた XNUMX ぀のプロゞェクトの枠組み内で本栌的な開発が行われおきたした。 (最初は Ruby で、次に 曞き盎された Goに倉曎され、同時に名前が倉曎されたした)。 wef ではどのようなアセンブリの問題が解決されたすか?

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

青色の網掛けの問題はすでに実装されおおり、䞊列ビルドは同じホスト内で行われ、黄色で匷調衚瀺された問題は倏の終わりたでに完了する予定です。

レゞストリぞの公開の段階 (公開)

私たちはダむダルしたした docker push... - レゞストリにむメヌゞをアップロヌドする際に䜕が難しいでしょうか? そしお、「画像にはどのようなタグを付けるべきでしょうか?」ずいう疑問が生じたす。 それは私たちが持っおいる理由から起こりたす ギットフロヌ (たたは他の Git 戊略) ず Kubernetes を統合しおおり、業界は Kubernetes での出来事が Git での出来事に確実に埓うよう努めおいたす。 結局のずころ、Git が唯䞀の真実の情報源です。

䜕がそんなに難しいのですか 再珟性を確保する: 本質的に䞍倉である Git のコミットから 䞍倉を Docker むメヌゞに倉換したす。これは同じにしおおく必芁がありたす。

それは私たちにずっおも重芁です 起源を特定するなぜなら、Kubernetes で実行されおいるアプリケヌションがどのコミットから構築されたのかを理解したいからです (その埌、差分や同様のこずが可胜になりたす)。

タグ付け戊略

XNUMX぀目はシンプルです gitタグ。 ずいうタグが付けられた画像を含むレゞストリがありたす。 1.0。 Kubernetes にはステヌゞずプロダクションがあり、このむメヌゞがアップロヌドされたす。 Git ではコミットを行い、ある時点でタグを付けたす。 2.0。 リポゞトリからの指瀺に埓っお収集し、タグ付きでレゞストリに配眮したす 2.0。 それをステヌゞに展開し、すべおが順調であれば本番環境に展開したす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

このアプロヌチの問題は、最初にタグを配眮し、それからテストしおロヌルアりトするこずだずいうこずです。 なぜ たず、これは単玔に非論理的です。私たちはただテストすらしおいないバヌゞョンの゜フトりェアを発行しおいるのです (チェックするにはタグを付ける必芁があるため、他の方法でテストするこずはできたせん)。 次に、このパスは Gitflow ず互換性がありたせん。

番目のオプション - gitコミット+タグ。 master ブランチにはタグがありたす 1.0; レゞストリ内のそれ - 運甚環境にデプロむされたむメヌゞ。 さらに、Kubernetes クラスタヌにはプレビュヌおよびステヌゞングの茪郭がありたす。 次に、Gitflow に埓いたす: 開発甚のメむン ブランチ (develop) 新しい機胜を䜜成し、その結果、識別子を䜿甚したコミットが行われたす。 #c1。 私たちはそれを収集し、この識別子を䜿甚しおレゞストリに公開したす (#c1。 同じ識別子を䜿甚しおプレビュヌにロヌルアりトしたす。 コミットでも同じこずを行いたす #c2 О #c3.

十分な機胜があるこずに気付いたずき、すべおを安定化し始めたす。 Git でブランチを䜜成する release_1.1 (ベヌスに #c3 の develop。 このリリヌスを収集する必芁はありたせん。なぜなら... これは前のステップで行われたした。 したがっお、単玔にステヌゞングにロヌルアりトできたす。 バグを修正したす #c4 そしお同様にステヌゞングにロヌルアりトしたす。 同時に開発も進んでいたす develop、倉曎は定期的に取埗されたす。 release_1.1。 ある時点で、コミットがコンパむルされおステヌゞングにアップロヌドされたす。これで満足です (#c25).

次に、リリヌス ブランチを (早送りで) マヌゞしたす (release_1.1) マスタヌで。 このコミットに新しいバヌゞョンのタグを付けたす (1.1。 ただし、このむメヌゞはすでにレゞストリに収集されおいるため、再床収集されないように、既存のむメヌゞに XNUMX 番目のタグを远加するだけです (レゞストリにタグが远加されたした) #c25 О 1.1。 その埌、本番環境に展開したす。

ステヌゞングにアップロヌドされる画像が XNUMX ぀だけであるずいう欠点がありたす (#c25、本番環境では少し異なりたす1.1)、しかし、これらは「物理的に」レゞストリからの同じむメヌゞであるこずがわかっおいたす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

本圓の欠点は、マヌゞ コミットがサポヌトされおいないため、早送りする必芁があるこずです。

さらに進んでトリックを行うこずもできたす...単玔な Dockerfile の䟋を芋おみたしょう。

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

次の原則に埓っお、そこからファむルを構築したしょう。

  • 䜿甚された画像の識別子から SHA256 (ruby:2.3 О nginx:alpine)、それらの内容のチェックサムです。
  • すべおのチヌム (RUN, CMD 等々。;
  • 远加されたファむルからの SHA256。

...そのようなファむルからチェックサム (やはり SHA256) を取埗したす。 これ サむン Docker むメヌゞのコンテンツを定矩するすべおのもの。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

図に戻っおみたしょう コミットの代わりにそのような眲名を䜿甚したす、぀たり画像に眲名を付けたす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

これで、たずえば、リリヌスからマスタヌぞの倉曎をマヌゞする必芁がある堎合、実際のマヌゞ コミットを実行できたす。識別子は異なりたすが、眲名は同じになりたす。 同じ識別子を䜿甚しお、むメヌゞを実皌働環境にロヌルアりトしたす。

欠点は、どのような皮類のコミットが本番環境にプッシュされたかを刀断できないこずです。チェックサムは䞀方向にしか機胜したせん。 この問題は、メタデヌタを含む远加レむダヌによっお解決されたす。詳しくは埌ほど説明したす。

werf でのタグ付け

werf ではさらに進んで、XNUMX ぀のマシンに保存されないキャッシュを䜿甚しお分散ビルドを実行する準備をしおいたす... そこで、XNUMX 皮類の Docker むメヌゞをビルドしおいたす。 ステヌゞ О 画像.

werf Git リポゞトリには、ビルドのさたざたな段階を説明するビルド固有の手順が保存されたす (むンストヌル前, install, セットアップ前, 。 最初のステップのチェックサムずしお定矩された眲名を持぀最初のステヌゞのむメヌゞを収集したす。 次に、゜ヌス コヌドを远加し、新しいステヌゞ むメヌゞのチェックサムを蚈算したす。これらの操䜜がすべおのステヌゞに察しお繰り返され、その結果ずしおステヌゞ むメヌゞのセットが埗られたす。 次に、最終画像を䜜成したす。これには、その起源に関するメタデヌタも含たれたす。 そしお、この画像にさたざたな方法でタグ付けしたす (詳现は埌述)。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

この埌、アプリケヌション コヌドのみが倉曎された新しいコミットが衚瀺されたずしたす。 䜕が起こるか コヌド倉曎の堎合はパッチを䜜成し、新たなステヌゞむメヌゞを甚意したす。 その眲名は、叀いステヌゞ むメヌゞず新しいパッチのチェックサムずしお決定されたす。 このむメヌゞから新しい最終むメヌゞが圢成されたす。 他のステヌゞの倉曎でも同様の動䜜が発生したす。

したがっお、ステヌゞ むメヌゞは分散保存できるキャッシュであり、そこからすでに䜜成されたむメヌゞは Docker レゞストリにアップロヌドされたす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

レゞストリのクリヌニング

タグを削陀した埌にハングしたたたになったレむダヌを削陀するこずに぀いお話しおいるのではありたせん。これは Docker レゞストリ自䜓の暙準機胜です。 ここで話しおいるのは、倧量の Docker タグが蓄積され、その䞀郚が䞍芁になったこずは理解しおいるものの、それらがスペヌスを占有する (および/たたはその費甚を支払う) ずいう状況に぀いお話しおいたす。

枅掃戊略は䜕ですか?

  1. 䜕もしないこずもできたす 掃陀しないでください。 堎合によっおは、膚倧なタグのも぀れを解くよりも、少しお金を払っお䜙分なスペヌスを確保する方がはるかに簡単な堎合がありたす。 しかし、これはある時点たでしか機胜したせん。
  2. フルリセット。 すべおのむメヌゞを削陀し、CI システム内の珟圚のむメヌゞのみを再構築するず、問題が発生する可胜性がありたす。 実皌働環境でコンテナヌが再起動されるず、ただ誰もテストされおいない新しいむメヌゞがロヌドされたす。 これにより、䞍倉のむンフラストラクチャずいう抂念は無効になりたす。
  3. 青緑。 XNUMX ぀のレゞストリがオヌバヌフロヌし始めたので、むメヌゞを別のレゞストリにアップロヌドしたす。 前の方法ず同じ問題: オヌバヌフロヌし始めたレゞストリをどの時点でクリアできるか?
  4. 時間によっお。 1 か月以䞊前の画像をすべお削陀したすか? でも、䞀ヶ月も曎新されおいないサヌビスは必ず存圚したす 。
  5. 手動で すでに削陀できるものを刀断したす。

本圓に実行可胜なオプションは XNUMX ぀ありたす。XNUMX ぀はクリヌニングしない、たたは Blue-Green + 手動の組み合わせです。 埌者の堎合は、次のようなこずに぀いお話しおいたす。レゞストリをクリヌンアップする時期が来たず理解したら、新しいレゞストリを䜜成し、たずえば XNUMX か月かけお新しいむメヌゞをすべおそれに远加したす。 そしお XNUMX か月埌、Kubernetes 内のどのポッドがただ叀いレゞストリを䜿甚しおいるかを確認し、それらも新しいレゞストリに転送したす。

私たちは䜕に来たのか ワヌフ? 私たちは以䞋を収集したす:

  1. Git ヘッド: すべおのタグ、すべおのブランチ - 画像内の Git でタグ付けされおいるすべおが必芁であるず仮定したす (そうでない堎合は、Git 自䜓で削陀する必芁がありたす)。
  2. 珟圚 Kubernetes にポンプアりトされおいるすべおのポッド。
  3. 叀い ReplicaSet (最近リリヌスされたもの) のほか、Helm リリヌスをスキャンしおそこから最新のむメヌゞを遞択するこずも蚈画しおいたす。

...そしおこのセットからホワむトリスト、぀たり削陀しない画像のリストを䜜成したす。 他のものはすべお削陀し、その埌、孀立したステヌゞ画像を芋぀けお削陀したす。

デプロむステヌゞ

信頌できる宣蚀性

デプロむメントで泚目したい最初の点は、宣蚀的に宣蚀された、曎新されたリ゜ヌス構成のロヌルアりトです。 Kubernetes リ゜ヌスを説明する元の YAML ドキュメントは、クラスタヌ内で実際に実行されおいる結果ずは垞に倧きく異なりたす。 Kubernetes によっお構成が远加されるため、次のようになりたす。

  1. 識別子;
  2. サヌビス情報。
  3. 倚くのデフォルト倀。
  4. 珟圚のステヌタスのセクション。
  5. アドミッション Webhook の䞀郚ずしお行われた倉曎。
  6. さたざたなコントロヌラヌ (およびスケゞュヌラヌ) の䜜業の結果。

したがっお、新しいリ゜ヌス構成が衚瀺されるず (新補品)、珟圚の「ラむブ」構成をそのたた取埗しお䞊曞きするこずはできたせん (ラむブ。 これを行うには、比范する必芁がありたす 新補品 最埌に適甚された構成 (最埌に適甚されたそしお転がっおください ラむブ パッチを受け取りたした。

このアプロヌチはず呌ばれたす 2方向のマヌゞ。 たずえば Helm で䜿甚されたす。

もありたす 3方向のマヌゞ、次の点が異なりたす。

  • 比范する 最埌に適甚された О 新補品、䜕が削陀されたかを調べたす。
  • 比范する 新補品 О ラむブ、䜕が远加たたは倉曎されたかを確認したす。
  • 合蚈されたパッチが適甚される ラむブ.

私たちは Helm を䜿甚しお 1000 以䞊のアプリケヌションをデプロむしおいるため、実際には双方向のマヌゞを䜿甚しおいたす。 ただし、Helm が正垞に動䜜するのに圹立぀パッチで解決された倚くの問題がありたす。

実際の展開状況

CI システムは次のむベントに基づいお Kubernetes の新しい構成を生成した埌、それを送信しお䜿甚したす。 適甚する クラスタヌに - Helm たたは kubectl apply。 次に、すでに説明した N りェむ マヌゞが発生し、これに察しお Kubernetes API が CI システムずそのナヌザヌに承認の応答を返したす。

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

ただし、倧きな問題がありたす。 アプリケヌションの成功は展開の成功を意味するものではありたせん。 Kubernetes がどのような倉曎を適甚する必芁があるかを理解し、それを適甚したずしおも、結果がどうなるかはただわかりたせん。 たずえば、フロント゚ンドでのポッドの曎新ず再起動は成功する可胜性がありたすが、バック゚ンドでは成功しないため、実行䞭のアプリケヌション むメヌゞの異なるバヌゞョンが取埗されたす。

すべおを正しく実行するには、このスキヌムには远加のリンクが必芁です。これは、Kubernetes API からステヌタス情報を受信し、実際の状態をさらに分析するためにそれを送信する特別なトラッカヌです。 Go でオヌプン゜ヌス ラむブラリを䜜成したした - キュヌブドッグ 発衚を参照 ここで)、この問題を解決し、werf に組み蟌たれおいたす。

werf レベルでのこのトラッカヌの動䜜は、Deployment たたは StatefulSet に配眮されたアノテヌションを䜿甚しお構成されたす。 䞻な泚釈 - fail-mode - 次の意味を理解したす。

  • IgnoreAndContinueDeployProcess — このコンポヌネントのロヌルアりトに関する問題を無芖しお、展開を続行したす。
  • FailWholeDeployProcessImmediately — このコンポヌネントで゚ラヌが発生するず、展開プロセスが停止したす。
  • HopeUntilEndOfDeployProcess — このコンポヌネントが展開の終了たでに機胜するこずを願っおいたす。

たずえば、リ゜ヌスずアノテヌション倀のこの組み合わせは、 fail-mode:

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

初めおデプロむするずきは、デヌタベヌス (MongoDB) の準備がただ敎っおいない可胜性があり、デプロむは倱敗したす。 ただし、開始の瞬間を埅぀こずができ、デプロむメントは匕き続き行われたす。

werf には kubedog のアノテヌションがさらに XNUMX ぀ありたす。

  • failures-allowed-per-replica — 各レプリカで蚱可される転倒の数。
  • show-logs-until — werf がロヌルアりトされたすべおのポッドからのログを (stdout に) 衚瀺するたでの時間を制埡したす。 デフォルトは PodIsReady (トラフィックがポッドに到達し始めたずきにおそらく望たしくないメッセヌゞを無芖するため)、倀も有効です。 ControllerIsReady О EndOfDeploy.

導入に他に䜕が必芁ですか?

すでに説明した XNUMX ぀の点に加えお、次のこずを芁望したす。

  • 芋るために ログ - すべおを連続しおではなく、必芁なものだけを遞択したす。
  • 远跡 進捗ゞョブが数分間「サむレント」にハングする堎合、そこで䜕が起こっおいるのかを理解するこずが重芁であるためです。
  • ОЌеть 自動ロヌルバック 䜕か問題が発生した堎合に備えお (したがっお、展開の実際のステヌタスを知るこずが重芁です)。 ロヌルアりトはアトミックである必芁がありたす。぀たり、最埌たで実行されるか、すべおが前の状態に戻りたす。

結果

私たち䌁業にずっお、配信のさたざたな段階 (ビルド、公開、デプロむ) で説明されおいるすべおのニュアンスを実装するには、CI システムずナヌティリティで十分です。 ワヌフ.

結論の代わりに:

werf - Kubernetes の CI / CD 甚ツヌル (抂芁ずビデオレポヌト)

werf の助けにより、私たちは DevOps ゚ンゞニアの倚くの問題を解決する䞊で倧きな進歩を遂げおきたした。より広範なコミュニティが少なくずもこのナヌティリティを実際に詊しおみおくれたら嬉しいです。 䞀緒に行動するず良い結果を達成しやすくなりたす。

ビデオずスラむド

パフォヌマンスのビデオ (箄 47 分):

報告曞のプレれンテヌション:

PS

Kubernetes に関するその他のレポヌトはブログにありたす。

出所 habr.com

コメントを远加したす