次のようなプロジェクトに複数のジョブを設定したとしましょう:
build_win32:
script: ...
build_ios:
script: ...
unit_tests:
script: ...
server_tests:
script: ...
client_tests:
script: ...
私が達成したいのは、README.mdで各ジョブごとにバッジを構成し、具体的にどの部分がうまくいかなかったかを即座にフィードバックできるようにすることです。
バッジの設定には Gitlab Documentation がありますが、これにはbuild
およびcoverage status
のみのバッジの設定方法を示すという制限があります。
Gitlab CIにそのようなビルドイン機能があるかどうか疑問に思っています。サードパーティのプラグインも使用できます。任意の助けをいただければ幸いです。
パイプラインステップでバッジを作成し、バッジファイルをパイプラインアーティファクトとして登録し、それらをGitLabページに公開することで、必要なものを実現できます。そこからREADME.md
のバッジを参照できます
各CIステップで、バッジファイルを生成し、public/<badge-file>.svg
の下に保存する必要があります。
http://shields.io を使用してバッジファイルを生成できます。私は自分でPythonバッジジェネレーターを作成しました。これはここにあります: https://github.com/jongracecox/anybadge
生成された各バッジファイルを.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
新しい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
プロジェクトでマスターパイプラインが実行されると、バッジファイルがGitLab Pagesに公開され、プロジェクトREADME.md
から参照できるようになります。
なぜあなたがこの質問をするのか理解していますが、なぜそうしないのかを説明したいと思います。
GitLabパイプラインは、プロジェクトへのすべてのプッシュ-すべてのブランチで実行されます。通常、master
ブランチ(またはリリース)ブランチからREADMEファイル)のバッジのみを生成するため、 ページのステップのみを制限しますmaster@group/project
で実行します。
また、パイプラインは通常、ジョブがエラーになったときに停止するように設定されることを考慮してください。これは、マスターパイプラインジョブが失敗した場合、そのパイプラインのバッジが生成されないため、どのジョブが失敗したかを判断するのに役立たないことを意味します。
すぐにフィードバックを受け取るのに最適な場所はパイプラインビューです。通常、https://gitlabserver/namespace/project/badges/branch/build.svg
のようなパイプラインへのリンクを使用して、readmeにパイプライン成功バッジを追加できます
説明したアプローチを引き続き使用する場合は、各パイプラインステージを 失敗を許可 に設定することをお勧めします。これにより、ジョブの失敗にもかかわらず、パイプライン全体を実行でき、バッジは引き続き生成され、Pagesに公開されます。
JGCの手順に従うことができますが、Gitlabページのパブリックディレクトリにバッジを展開する代わりに、最新のビルドアーティファクトに直接リンクできます。
たとえば、次のURLは、anybadgeで作成され、アーティファクトとしてアップロードされたパイリントバッジにリンクしています。
https://gitlabserver/namespace/project/-/jobs/artifacts/master/raw/public/pylint.svg?job = test
一時的なブランチを使用して、異なる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
リアルタイムのジョブごとのバッジに対する回避策を開発しました。それは簡単に他のものに変更できます。
リポジトリの例: ci-test/badges 。完全なチュートリアルもあるため、ここではコピーアンドペーストしません。
核となるアイデアは次のとおりです(現在、実行中のCIジョブ内にいると仮定します)。
Dropboxは、HTTPリクエストを介したAPIの呼び出しをサポートしています( this を参照)。したがって、上記のすべては、例えばcurlまたはPythonリクエスト-基本ツール。Dropboxアクセストークンを secret変数 として渡し、古いバッジを上書きするために同じ名前でファイルを保存する必要があります。
その後、Dropboxバッジを必要な場所に直接リンクできます。それにはいくつかのトリックがありますので、使用したい場合は私の例のレポを確認してください。私にとっては非常にうまく機能し、高速のようです。
この方法の利点は、GitLab Pagesをいじる必要がないことです。 Pagesで公開する代わりに、Dropboxに置きます。これは、HTTP要求によって呼び出される単純なファイル転送です。それ以上。