GITLAB CIとBUFを使用して自動的に壊れている変化とlint protobufを見つける方法
9325 ワード
プロトコルバッファーまたはprotobufsは言語不可知論者です
データのシリアル化機構
Protobufスキーマはプロトコルバッファ言語を使用して指定されますIDL 業界のs.
プロトタイプはRPC サービス間通信サービスそれらの使用はパブリックフェースインターフェースのためにも成長しています、そして、最近、それらはツールのようなツールで採用されましたApache Kafka .
Used correctly , 彼らは前後の互換性のあるメッセージの生成と消費の両方を有効にします.古い消費者/クライアント(古いProtobuf Schemaを使用すること)が新しい生産者/サーバーからのメッセージを消費することができることを意味してください、そして、逆も同様です.私にとって、これはProtobufsの提供における最も説得力のある点です.
変化検出の中断
トラリスシス ギタブアクション サークルCI コードスタイルチェック
データのシリアル化機構
Protobufスキーマはプロトコルバッファ言語を使用して指定されますIDL 業界のs.
プロトタイプはRPC サービス間通信サービスそれらの使用はパブリックフェースインターフェースのためにも成長しています、そして、最近、それらはツールのようなツールで採用されましたApache Kafka .
Used correctly , 彼らは前後の互換性のあるメッセージの生成と消費の両方を有効にします.古い消費者/クライアント(古いProtobuf Schemaを使用すること)が新しい生産者/サーバーからのメッセージを消費することができることを意味してください、そして、逆も同様です.私にとって、これはProtobufsの提供における最も説得力のある点です.
変化検出の中断
Protobufsで後方/転送互換性を維持するために、スキーマへのすべての変更は完全にコード化されなければならなくて、コンプライアンスのためにテストされなければなりません.人間は誤りを犯す傾向がある.したがって、いくつかのツールは、プロセスを支援するために浮上している、特にBuf .
We’re working quickly to build a modern Protobuf ecosystem. Our first tool is the Buf CLI, built to help you create consistent Protobuf APIs that preserve compatibility and comply with design best practices. The tool is currently available on an open-source basis.
現在の作業コピーが以前のリビジョンと互換性があるかどうかを確認するには、呼び出すことができます.
buf check --against 'reference-to-a-previous-revision'
どこreference-to-a-previous-revision
Gitリポジトリリファレンスかimage built bufによって.
特定のブランチをチェックするには、
buf check --against '.git#branch=master'
特定のコードリビジョンを参照する他のすべての方法についてはexcellent docs .
適切な互換性制約の確保
全てのシステムがprotobufsを等しくしているわけではなく、JSON
下の行は、他のバイナリメッセージだけに依存します.BUFは、プロジェクトの適切な互換性レベルを定義することで柔軟です.
BUFのドキュメントは素晴らしいoverview サポートされている規則.
GITLAB CIを用いた破壊変化の検出
マージ要求ベースのフローを使用する場合は、通常、ターゲットブランチに対する互換性違反の変更のためのすべてのマージ要求をチェックするのに十分です.
解決はすべての状況をカバーしません、特に変更がマージ要求を使用せずに導入されるとき、すべてのケースを支持することはbufイメージを構築して、保存することを必要とするでしょう.
静的なバイナリの他に、bufもDockerイメージを提供します.それを使用してワークフローを簡素化します.
すべてのマージ要求をチェックするには、次のスニペットをリポジトリに紹介します.gitlab-ci.yml
:
stages:
- ensure backwards compatibility
validate merge request:
stage: ensure backwards compatibility
image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- buf breaking --against "${CI_REPOSITORY_URL}#branch=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}"
CI_REPOSITORY_URL
に提供するURLに展開しますgit clone
. これは、トークンを含んでいるので、アクセス管理は無関係です.
他のCI解を用いた破壊変化の検出
Buf's repository のための典型的なワークフロー定義を含みます:
We’re working quickly to build a modern Protobuf ecosystem. Our first tool is the Buf CLI, built to help you create consistent Protobuf APIs that preserve compatibility and comply with design best practices. The tool is currently available on an open-source basis.
buf check --against 'reference-to-a-previous-revision'
buf check --against '.git#branch=master'
stages:
- ensure backwards compatibility
validate merge request:
stage: ensure backwards compatibility
image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- buf breaking --against "${CI_REPOSITORY_URL}#branch=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}"
コードスタイルチェック
は、ファイル間のコードの一貫性を確保するのに役立ちます.Protobufで、それは異なりません.
bufとの接続は楽であり、実行することで行うことができますbuf lint
.
エラーや警告が発生した場合buf
, 彼らを無遠慮に修正しようとしないでください.スキーマが生産環境で使用されている場合は、中断します.代わりに、小さく、インクリメンタルな変更を行い、非互換性をチェックします.いずれかが発生すると、することができますmake an exclusion そして、将来のインターフェイスのバージョンであなたのミスを修正します.
GITLAB CIを使用して自動的にリント
すべてのブランチですべてのコミットをチェックするには、次のように.gitlab-ci.yml
.
stages:
- lint
lint:
stage: lint
image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
script:
- buf lint
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
LINTステージに接続された規則は、マージ要求のために実行されている複数のパイプラインを防止します.
断線変化検出とリンギングの結合
簡単に上記の例を1つでまとめることができます.gitlab-ci.yml
:
image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
stages:
- lint
- ensure backwards compatibility
lint:
stage: lint
script:
- buf lint
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
validate merge request:
stage: ensure backwards compatibility
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- buf breaking --against "${CI_REPOSITORY_URL}#branch=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}"
私は下にサンプルリポジトリを作成しているhttps://gitlab.com/mionskowski/protobuf-ci . 移動するMerge Requests の両方を見て失敗したパイプラインを参照してください.
Reference
この問題について(GITLAB CIとBUFを使用して自動的に壊れている変化とlint protobufを見つける方法), 我々は、より多くの情報をここで見つけました
https://dev.to/maciekmm/how-to-detect-breaking-changes-and-lint-protobuf-automatically-using-gitlab-ci-and-buf-33k2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
stages:
- lint
lint:
stage: lint
image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
script:
- buf lint
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
簡単に上記の例を1つでまとめることができます
.gitlab-ci.yml
:image:
name: bufbuild/buf:0.41.0
entrypoint: [""]
stages:
- lint
- ensure backwards compatibility
lint:
stage: lint
script:
- buf lint
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
validate merge request:
stage: ensure backwards compatibility
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- buf breaking --against "${CI_REPOSITORY_URL}#branch=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}"
私は下にサンプルリポジトリを作成しているhttps://gitlab.com/mionskowski/protobuf-ci . 移動するMerge Requests の両方を見て失敗したパイプラインを参照してください.Reference
この問題について(GITLAB CIとBUFを使用して自動的に壊れている変化とlint protobufを見つける方法), 我々は、より多くの情報をここで見つけました https://dev.to/maciekmm/how-to-detect-breaking-changes-and-lint-protobuf-automatically-using-gitlab-ci-and-buf-33k2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol