ホームページ >バックエンド開発 >Python チュートリアル >ReadmeGenie の CI/CD の実装
設定に入る前に、なぜ CI/CD が非常に重要なのかを簡単に説明しましょう。
ReadmeGenie では、GitHub Actions を CI/CD ツールとして活用しました。 GitHub リポジトリとスムーズに統合され、YAML 構成ファイルによる柔軟性と自動化が提供されます。
当社の CI/CD パイプラインには、次の自動化されたステップが含まれています。
CI ワークフローは .github/workflows/python-app.yml で定義されています。ワークフローの各部分の動作の内訳は次のとおりです:
ワークフローは、メイン ブランチへのすべてのプッシュおよびプル リクエストで実行されます。これにより、すべてのコード変更が運用環境にマージされる前に検証されることが保証されます。
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
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"
次のステップは、プロジェクトの依存関係をインストールすることです。ここでは、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
Lint はワークフローの重要な部分であり、コードが指定された品質基準に準拠していることを確認します。構文エラー、未定義の名前、複雑さの問題にフラグを立てるオプションを指定して flake8 を実行します。
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
単体テストの場合、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% がテストでカバーされるように強制することで、高水準のコード品質を保証します。カバレッジがこのしきい値を下回る場合、コミットは許可されません。
CI/CD に加えて、コミット前フックをセットアップして、変更がリポジトリにプッシュされる前にコードの品質をローカルで強制します。これらのフック:
ここでは、カバレッジ チェックを .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 パイプラインをより堅牢にするために、次のことを計画しています。
このプロジェクトを通じて、堅牢なテストと CI/CD プラクティスを早い段階で確立することの重要性を認識しました。もう一度始めるとしたら、最初から包括的なテストを作成し、プロジェクトの進行に応じて段階的にテストを拡張および改善することに集中するでしょう。このアプローチにより、ブランチの欠落やテストされていない領域が防止され、すべての新しいコードが十分にカバーされたコードベースにスムーズに統合されるようになります。
以上がReadmeGenie の CI/CD の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。