Gitlabには、ビルドステータスとカバレッジ率に関するバッジを生成する機能があります。
Pylintの結果を表示するカスタムバッジを作成することはできますか?または、この結果をREADME.mdに表示しますか?
私はすでにPylintのCIジョブを持っています
メインのバッジサービスと非常に視覚的に類似したバッジを生成するpythonバッジ生成パッケージを作成しました。柔軟性が高く、インポートしてpython =コード、またはコマンドラインから実行します。
これをGitLabCIで使用して、ピリントとカバレッジのスコアを表示します。
Shields.ioを使用してこれを行う方法は他にもあります( その他の回答 from kubouch を参照)が、このアプローチは、外部インターネットアクセスがない可能性がある状況で使用できます。ファイアウォールまたはプロキシがインターネットアクセスをブロックしている企業/企業の設定など。
私のCIパイプラインには、pylintを実行するステップがあり、sed
を使用して出力テキストからスコアを抽出しました。次に、anybadge
(詳細は以下)を使用してピリントスコアバッジを生成し、それをpublic/pylint.svg
として保存します。
pylint:
stage: test
script:
- pylint --rcfile=.pylintrc --output-format=text <LIST-OF-FILES-TO-RUN-PYLINT-AGAINST> | tee pylint.txt
- score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt)
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
Pylintがゼロ以外のrcを生成する場合、GitLabはコマンドエラーとしてそれを認識し、ジョブは失敗します。つまり、バッジは生成されず、欠落している画像はバッジが使用されている場所を示します。
注:pylintは、終了コードを使用してlintチェックのステータスを通知するため、ゼロ以外の戻りコードを生成することがよくあります。 pylint-exit のようなものを使用して、CIパイプラインでpylintリターンコードを処理することをお勧めします。
生成されたバッジファイルをアーティファクトとしてCIジョブに登録するには、これを.gitlab-ci.yml
に含めます。
pylint:
...
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
artifacts:
paths:
- public/pylint.svg
パブリックディレクトリ内のすべてをGitLabページにデプロイするページ公開ステップを含めます。
pages:
stage: deploy
artifacts:
paths:
- public
only:
- master
プロジェクトのマスターパイプラインが実行されると、pylint.svg
ファイルがGitLabPagesに公開され、プロジェクトREADME.md
の画像を参照して、最新のピリントバッジが表示されます。
プロジェクトにhttps://gitlab.comを使用している場合、svgアーティファクトのURLは通常何かになりますこのように(NAMESPACEをユーザー名に置き換えるか、プロジェクトがグループの下にある場合はグループ名に置き換えます 詳細はこちら ):
https://NAMESPACE.gitlab.io/pyling.svg
README.mdには、次の画像を含めることができます。
![pylint](https://NAMESPACE.gitlab.io/pyling.svg)
画像をリンクにしたい場合は、次を使用できます。
[![pylint](https://NAMESPACE.gitlab.io/pyling.svg)](LINKTARGET)
セットアップについてさらに情報が必要な場合はお知らせください。
Anybadge Pythonパッケージに関する詳細情報は次のとおりです。
バッジのラベルと値を設定したり、しきい値に基づいて色を設定したりできます。ピリント、カバレッジ、パイプラインの成功のための事前に作成された設定がありますが、好きなバッジを作成できます。
より詳細なドキュメントを含むgithubプロジェクトへのリンクは次のとおりです。 https://github.com/jongracecox/anybadge
pip install anybadge
でインストールします
例pythonコード:
import anybadge
# Define thresholds: <2=red, <4=orange <8=yellow <10=green
thresholds = {2: 'red',
4: 'orange',
6: 'yellow',
10: 'green'}
badge = anybadge.Badge('pylint', 2.22, thresholds=thresholds)
badge.write_badge('pylint.svg')
コマンドラインの使用例:
anybadge --label pylint --value 2.22 --file pylint.svg 2=red 4=orange 8=yellow 10=green
最新のアーティファクトに直接アクセスする が可能になり、回避策が簡素化されます。
pylint
の代わりに専用のpublic
アーティファクトを使用し、不要なdeploy
ステップを削除します(または、すでに使用されている場合は編集します)。pylint:
stage: test
before_script:
- pip install pylint pylint-exit anybadge
script:
- mkdir ./pylint
- pylint --output-format=text . | tee ./pylint/pylint.log || pylint-exit $?
- PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)
- anybadge --label=Pylint --file=pylint/pylint.svg --value=$PYLINT_SCORE 2=red 4=orange 8=yellow 10=green
- echo "Pylint score is $PYLINT_SCORE"
artifacts:
paths:
- ./pylint/
ここでは、Pylintログファイルをフォルダーアーティファクトにコピーします。これにより、パイプラインログを見なくてもアクセスできるようになります。
バッジ画像はhttps://gitlab.example.com/john-doe/foo/-/jobs/artifacts/master/raw/pylint/pylint.svg?job=pylint
で利用可能になり、Pylintログはhttps://gitlab.example.com/john-doe/foo/-/jobs/artifacts/master/raw/pylint/pylint.log?job=pylint
で利用可能になります。
GitLabは、プロジェクトヘッダーに表示されるプロジェクトまたはグループにバッジを含めることができるようになりました。
Settings
/General
/Badges
に移動し、上記のようにリンクと画像リンクを設定して新しいバッジを作成します。
README、gitlabページ、バッジ、ドロップボックスを使用したくない場合は、 https://img.shields.io/badge/lint%20score-$score-blue.svg toバッジ(単なるURL)を「作成」し、gitlabAPIを介してバッジ画像のURLを変更します。
リアルタイムのジョブごとのバッジの回避策を開発しました。これはPylint固有ではありませんが、アプローチは一般的であり、必要なものに簡単に変更できます。
この例のリポジトリ (ブランチbadges
)は、CIジョブごとにカスタムバッジを作成します。完全なウォークスルーもあるので、ここにコピーして貼り付けません。
中心的なアイデアは次のとおりです(実行中のCIジョブ内にいると仮定します)。
Dropboxは、HTTPリクエストを介したAPIの呼び出しをサポートしています( this を参照)。したがって、上記のすべては、例えばを使用して行うことができます。 curlまたはPythonリクエスト-基本ツール。Dropboxアクセストークンを シークレット変数 として渡し、ファイルを同じ名前で保存して、古いバッジを上書きする必要があります。
次に、必要な場所にDropboxバッジを直接リンクできます。それにはいくつかのトリックがあるので、それを使用したい場合は、私のサンプルリポジトリを確認してください。私にとって、それは非常にうまく機能し、速いようです。
この方法の利点は、GitLabページをいじる必要がないことです。 Pagesで公開する代わりに、Dropboxに配置します。これは、HTTPリクエストによって呼び出される単純なファイル転送です。それ以上はありません。