web-dev-qa-db-ja.com

gitlabのPylintバッジ

Gitlabには、ビルドステータスとカバレッジ率に関するバッジを生成する機能があります。
Pylintの結果を表示するカスタムバッジを作成することはできますか?または、この結果をREADME.mdに表示しますか?
私はすでにPylintのCIジョブを持っています

10
Djent

メインのバッジサービスと非常に視覚的に類似したバッジを生成するpythonバッジ生成パッケージを作成しました。柔軟性が高く、インポートしてpython =コード、またはコマンドラインから実行します。

これをGitLabCIで使用して、ピリントとカバレッジのスコアを表示します。

Shields.ioを使用してこれを行う方法は他にもあります( その他の回答 from kubouch を参照)が、このアプローチは、外部インターネットアクセスがない可能性がある状況で使用できます。ファイアウォールまたはプロキシがインターネットアクセスをブロックしている企業/企業の設定など。

GitLabCIセットアップ

1.バッジを生成します

私の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リターンコードを処理することをお勧めします。

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

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

pylint:
    ...
    - echo "Pylint score was $score"
    - anybadge --value=$score --file=public/pylint.svg pylint
  artifacts:
    paths:
      - public/pylint.svg

3.バッジをGitLabページに公開します

パブリックディレクトリ内のすべてをGitLabページにデプロイするページ公開ステップを含めます。

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

4.README.mdにバッジを含めます

プロジェクトのマスターパイプラインが実行されると、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パッケージ

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

2019年更新

GitLabページの使用は不要になりました

最新のアーティファクトに直接アクセスする が可能になり、回避策が簡素化されます。

  1. 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で利用可能になります。

2. READMEの画像の代わりに、GitLabの組み込みバッジを使用できます

GitLabは、プロジェクトヘッダーに表示されるプロジェクトまたはグループにバッジを含めることができるようになりました。

Settings/General/Badgesに移動し、上記のようにリンクと画像リンクを設定して新しいバッジを作成します。

screenshot of gitlab badges settings

28
JGC

README、gitlabページ、バッジ、ドロップボックスを使用したくない場合は、 https://img.shields.io/badge/lint%20score-$score-blue.svg toバッジ(単なるURL)を「作成」し、gitlabAPIを介してバッジ画像のURLを変更します。

enter image description here

私の.gitlab-ci.ymlの詳細と糸くずの段階

2
Manuel

リアルタイムのジョブごとのバッジの回避策を開発しました。これはPylint固有ではありませんが、アプローチは一般的であり、必要なものに簡単に変更できます。

この例のリポジトリ (ブランチbadges)は、CIジョブごとにカスタムバッジを作成します。完全なウォークスルーもあるので、ここにコピーして貼り付けません。

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

  • バッジを作成します(たとえば、 shields.io からファイルに取得します)。
  • バッジファイルを、リンク可能なリアルタイムストレージ(Dropboxなど)にアップロードします。

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

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

この方法の利点は、GitLabページをいじる必要がないことです。 Pagesで公開する代わりに、Dropboxに配置します。これは、HTTPリクエストによって呼び出される単純なファイル転送です。それ以上はありません。

1
kubouch