web-dev-qa-db-ja.com

各ジョブにバッジを使用するGitlab CI

次のようなプロジェクトに複数のジョブを設定したとしましょう:

build_win32:
  script: ...

build_ios:
  script: ...

unit_tests:
  script: ...

server_tests:
  script: ...

client_tests:
  script: ...

私が達成したいのは、README.mdで各ジョブごとにバッジを構成し、具体的にどの部分がうまくいかなかったかを即座にフィードバックできるようにすることです。

バッジの設定には Gitlab Documentation がありますが、これにはbuildおよびcoverage statusのみのバッジの設定方法を示すという制限があります。

Gitlab CIにそのようなビルドイン機能があるかどうか疑問に思っています。サードパーティのプラグインも使用できます。任意の助けをいただければ幸いです。

13
Matt

パイプラインステップでバッジを作成し、バッジファイルをパイプラインアーティファクトとして登録し、それらをGitLabページに公開することで、必要なものを実現できます。そこからREADME.mdのバッジを参照できます

あなたが尋ねたことをする方法

1.バッジを生成する

各CIステップで、バッジファイルを生成し、public/<badge-file>.svgの下に保存する必要があります。

http://shields.io を使用してバッジファイルを生成できます。私は自分でPythonバッジジェネレーターを作成しました。これはここにあります: https://github.com/jongracecox/anybadge

2.パイプラインアーティファクトとしてバッジを登録する

生成された各バッジファイルを.gitlab-ci.ymlの各ジョブに含めることにより、CIジョブのアーティファクトとして登録します。

build_win32:
  script: ...
    - <generate public/build_win32.svg>
  artifacts:
    paths:
      - public/build_win32.svg

build_ios:
  script: ...
    - <generate public/build_ios.svg>
  artifacts:
    paths:
      - public/build_ios.svg

unit_tests:
  script: ...
    - <generate public/unit_tests.svg>
  artifacts:
    paths:
      - public/unit_tests.svg

server_tests:
  script: ...
    - <generate public/server_tests.svg>
  artifacts:
    paths:
      - public/server_tests.svg

client_tests:
  script: ...
    - <generate public/client_tests.svg>
  artifacts:
    paths:
      - public/client_tests.svg

3.バッジをGitLab Pagesに公開する

新しいpages発行ステップを含めます。これは パブリックディレクトリ内のすべてをGitLabページにデプロイする

pages:
  stage: deploy
  artifacts:
    paths:
    - public
  only:
  - master

上記を変更する必要はありません。このジョブを実行すると、public内のすべてのファイルがGitLabページWebサーバー経由で利用可能になります。これは多くの場合http://NAMESPACE.GITLABPAGESSERVER/projectです

GitLabページの詳細については、こちらをご覧ください: https://docs.gitlab.com/ce/user/project/pages/index.html

4. README.mdにバッジを含める

プロジェクトでマスターパイプラインが実行されると、バッジファイルがGitLab Pagesに公開され、プロジェクトREADME.mdから参照できるようになります。

なぜこれmightが意味をなさない

なぜあなたがこの質問をするのか理解していますが、なぜそうしないのかを説明したいと思います。

GitLabパイプラインは、プロジェクトへのすべてのプッシュ-すべてのブランチで実行されます。通常、masterブランチ(またはリリース)ブランチからREADMEファイル)のバッジのみを生成するため、 ページのステップのみを制限しますmaster@group/project で実行します。

また、パイプラインは通常、ジョブがエラーになったときに停止するように設定されることを考慮してください。これは、マスターパイプラインジョブが失敗した場合、そのパイプラインのバッジが生成されないため、どのジョブが失敗したかを判断するのに役立たないことを意味します。

すぐにフィードバックを受け取るのに最適な場所はパイプラインビューです。通常、https://gitlabserver/namespace/project/badges/branch/build.svgのようなパイプラインへのリンクを使用して、readmeにパイプライン成功バッジを追加できます

説明したアプローチを引き続き使用する場合は、各パイプラインステージを 失敗を許可 に設定することをお勧めします。これにより、ジョブの失敗にもかかわらず、パイプライン全体を実行でき、バッジは引き続き生成され、Pagesに公開されます。

14
JGC

JGCの手順に従うことができますが、Gitlabページのパブリックディレクトリにバッジを展開する代わりに、最新のビルドアーティファクトに直接リンクできます。

たとえば、次のURLは、anybadgeで作成され、アーティファクトとしてアップロードされたパイリントバッジにリンクしています。

https://gitlabserver/namespace/project/-/jobs/artifacts/master/raw/public/pylint.svg?job = test

7
jcgiret

一時的なブランチを使用して、異なるci-jobs間のバッジを保存することを好みます。

GitLabで一時的なブランチを使用してジョブごとにバッジを使用する方法を示す詳細なプロジェクトの例を見つけることができます: https://gitlab.version.fz-juelich.de/vis/jusense-cicd

そしてそのドキュメント: https://gitlab.version.fz-juelich.de/vis/jusense-cicd/wikis/Continuous-Integration-and-Delivery

しかし、あなたが好む戦略が何であれ、カスタムバッジはこれまでGitLabで適切にサポートされていません。詳細については、この問題を確認してください:GitLabで問題を作成しました: https://gitlab.com/gitlab-org/gitlab-ce/issues/506

3
j.goebbert

リアルタイムのジョブごとのバッジに対する回避策を開発しました。それは簡単に他のものに変更できます。

リポジトリの例: ci-test/badges 。完全なチュートリアルもあるため、ここではコピーアンドペーストしません。

核となるアイデアは次のとおりです(現在、実行中のCIジョブ内にいると仮定します)。

  • Webからファイルにバッジを取得します。
  • バッジファイルをリンク先のリアルタイムストレージ(Dropboxなど)にアップロードします。

Dropboxは、HTTPリクエストを介したAPIの呼び出しをサポートしています( this を参照)。したがって、上記のすべては、例えばcurlまたはPythonリクエスト-基本ツール。Dropboxアクセストークンを secret変数 として渡し、古いバッジを上書きするために同じ名前でファイルを保存する必要があります。

その後、Dropboxバッジを必要な場所に直接リンクできます。それにはいくつかのトリックがありますので、使用したい場合は私の例のレポを確認してください。私にとっては非常にうまく機能し、高速のようです。

この方法の利点は、GitLab Pagesをいじる必要がないことです。 Pagesで公開する代わりに、Dropboxに置きます。これは、HTTP要求によって呼び出される単純なファイル転送です。それ以上。

3
kubouch