ReadmeGenie の CI/CD の実装

Susan Sarandon
Susan Sarandonオリジナル
2024-11-22 05:28:12938ブラウズ

Implementing CI/CD for ReadmeGenie

なぜ CI/CD なのか?

設定に入る前に、なぜ CI/CD が非常に重要なのかを簡単に説明しましょう。

  1. 自動テスト: テストを実行すると、コードが変更されるたびに安定していることが自動的に確認されます。
  2. 一貫性: CI/CD は、コードベース全体に標準 (lint、フォーマット) を適用します。
  3. 信頼性: 自動化されたチェックとテストにより、人的エラーが最小限に抑えられ、コードの信頼性が向上します。
  4. 迅速なフィードバック: 開発者はコードの品質に関するフィードバックを即座に受け取り、問題を早期に発見できます。

ReadmeGenie では、GitHub Actions を CI/CD ツールとして活用しました。 GitHub リポジトリとスムーズに統合され、YAML 構成ファイルによる柔軟性と自動化が提供されます。

ReadmeGenie の CI/CD パイプライン

当社の CI/CD パイプラインには、次の自動化されたステップが含まれています。

  1. リンティングとフォーマットのチェック: コードのスタイルと一貫性を確保するために、RuffBlack を実行します。
  2. 単体テスト: 単体テストを使用して、コードの変更によって既存の機能が損なわれないことを確認します。
  3. カバレッジ分析: Coverage.py を使用して、コミットが許可される前にコードがカバレッジしきい値を満たしていることを確認します。
  4. Pre-Commit Hooks: 変更をプッシュする前にローカル品質チェックを強制するためのフックを追加しました。

GitHub アクション ワークフローの概要

CI ワークフローは .github/workflows/python-app.yml で定義されています。ワークフローの各部分の動作の内訳は次のとおりです:

1. ワークフローのトリガー

ワークフローは、メイン ブランチへのすべてのプッシュおよびプル リクエストで実行されます。これにより、すべてのコード変更が運用環境にマージされる前に検証されることが保証されます。

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

2. Python 環境のセットアップ

Python 3.12.x を使用するように GitHub Actions を構成し、ローカル開発環境との一貫性を確保します。このステップでは、特定の Python バージョンをインストールし、依存関係のインストール用の環境を準備します。

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python 3.12.x
        uses: actions/setup-python@v3
        with:
          python-version: "3.12.x"

3. 依存関係のインストール

次のステップは、プロジェクトの依存関係をインストールすることです。ここでは、pip をアップグレードし、requirements.txt ファイルをインストールします。そこで指定された追加の依存関係がインストールされます。

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8 pytest
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

4. lint チェックとコード品質チェックの実行

Lint はワークフローの重要な部分であり、コードが指定された品質基準に準拠していることを確認します。構文エラー、未定義の名前、複雑さの問題にフラグを立てるオプションを指定して flake8 を実行します。

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

5. カバレッジ分析を使用したテストの実行

単体テストの場合、pytest を使用してすべてのテスト ケースを実行します。さらに、カバレッジを使用してコードのどの行がテストされるかを追跡し、テスト スイートが定義されたカバレッジしきい値の 75% を確実に満たしていることを確認します。

次のコマンドはテストを実行し、テスト カバレッジのギャップを強調表示するカバレッジ レポートを生成します。テストされていないコードは将来のバグの潜在的な原因となるため、これは品質保証にとって不可欠です。

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python 3.12.x
        uses: actions/setup-python@v3
        with:
          python-version: "3.12.x"

このカバレッジ チェックでは、コードベースの少なくとも 75% がテストでカバーされるように強制することで、高水準のコード品質を保証します。カバレッジがこのしきい値を下回る場合、コミットは許可されません。

Pre-Commitフックの統合

CI/CD に加えて、コミット前フックをセットアップして、変更がリポジトリにプッシュされる前にコードの品質をローカルで強制します。これらのフック:

  • リント防止には Ruff を実行し、フォーマットには Black を実行します。
  • カバレッジをローカルでテストを実行して、最小カバレッジしきい値を強制します。

ここでは、カバレッジ チェックを .pre-commit-config.yaml のコミット前フックとして追加する方法を示します。

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8 pytest
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

課題と学んだ教訓

CI/CD を設定するには、GitHub Actions 内でさまざまなツール (flake8、pytest、カバレッジ) がどのように相互作用するかを深く理解する必要がありました。私たちが直面したいくつかの課題と、私たちが実装した解決策を以下に示します:

異なるローカル構成とリモート構成の処理

特に API 統合と構成処理のテストにおいて、環境変数の競合に関する問題が発生しました。 @patch.dict やその他のモック手法を Unittest で使用することで、環境を効果的にシミュレートできるようになりました。

テスト範囲としきい値

最大の課題は、適切なテスト範囲を確保することでした。 GitHub Actions と pre-commit フックの両方で --fail-under=75 を指定してcoverage.pyを使用すると、この標準を強制するのに役立ちました。

今後の改善点

CI/CD パイプラインをより堅牢にするために、次のことを計画しています。

  1. デプロイメント ステージの追加: テストに合格した後、ステージング環境または運用環境へのデプロイメントを自動化します。
  2. コード品質バッジの自動化: README にカバレッジ、リント状態、テスト結果を表示する動的なバッジを追加します。
  3. カバレッジ要件の拡大: テストを改善し、より多くのエッジケースをカバーするにつれて、カバレッジのしきい値を増やします。

取り除く

このプロジェクトを通じて、堅牢なテストと CI/CD プラクティスを早い段階で確立することの重要性を認識しました。もう一度始めるとしたら、最初から包括的なテストを作成し、プロジェクトの進行に応じて段階的にテストを拡張および改善することに集中するでしょう。このアプローチにより、ブランチの欠落やテストされていない領域が防止され、すべての新しいコードが十分にカバーされたコードベースにスムーズに統合されるようになります。

以上がReadmeGenie の CI/CD の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。