Pythonプロジェクト用GitLab CIパイプライン

flake8 lint、pytestテスト、pipキャッシュ、JUnitレポートアーティファクトを含むPythonプロジェクト用の本番対応.gitlab-ci.yml。

Language Pipelines

詳細な説明

GitLabでのPython CI設定

GitLabのPython CIパイプラインは、pipキャッシュとマージリクエストでネイティブにレンダリングできるJUnit形式のテストレポートを活用できます。

パイプライン設定

stages:
  - lint
  - test

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

flake8:
  stage: lint
  image: python:3.12-slim
  script:
    - pip install flake8
    - flake8 . --max-line-length=120 --statistics
  cache:
    key: pip-cache
    paths:
      - .cache/pip/
    policy: pull-push

pytest:
  stage: test
  image: python:3.12-slim
  script:
    - pip install -r requirements.txt
    - pytest --junitxml=report.xml --cov=src --cov-report=html
  cache:
    key: pip-cache
    paths:
      - .cache/pip/
    policy: pull-push
  artifacts:
    paths:
      - report.xml
      - htmlcov/
    expire_in: 30 days
    reports:
      junit: report.xml

Pipキャッシュの設定

PIP_CACHE_DIRをプロジェクト相対パスに設定することが重要です。デフォルトでは、pipは~/.cache/pipにキャッシュしますが、これはプロジェクトディレクトリの外にあり、GitLab CIでキャッシュできません。

JUnitレポート

reports: junit: report.xmlディレクティブにより、GitLabがJUnit XMLを解析し、マージリクエストに直接テスト結果を表示します。

ユースケース

Django、Flask、FastAPI、またはpytestを使用するPythonプロジェクトに最適です。即座のlintフィードバックと、GitLabマージリクエストで表示される詳細なテストレポートを提供します。

試してみる — GitLab CI Config Generator

フルツールを開く