Python アプリケーションのビルドとテスト

このページでは、Python アプリケーションのビルドとテスト、アーティファクトの Artifact Registry へのアップロード、来歴情報の生成、テストログの Cloud Storage への保存を行うように Cloud Build を構成する方法について説明します。

Cloud Build を使用すると、一般公開されているコンテナ イメージを使用してタスクを実行できます。一般公開の Docker Hub の python イメージには、pythonpip ツールがプリインストールされています。これらのツールを使用して依存関係のインストール、ビルド、単体テストを行うように Cloud Build を構成できます。

始める前に

このページの説明は、Python の知識があることを前提としています。さらに、以下のことに留意してください。

  • Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Enable the APIs

  • このページで gcloud コマンドを実行するには、Google Cloud CLI をインストールします。
  • Python プロジェクトを用意します。
  • Artifact Registry に Python リポジトリを配置します。リポジトリがない場合は、新しいリポジトリを作成します。
  • テストログを Cloud Storage に保存する場合は、Cloud Storage にバケットを作成します。

必要な IAM 権限

これらのロールを付与する方法については、IAM ページを使用してロールを付与するをご覧ください。

Python ビルドの構成

このセクションでは、Python アプリのビルド構成ファイルの例を紹介します。これには要件のインストール、単体テストの追加、テスト合格後、アプリをビルド、デプロイするためのビルドステップが含まれます。

  1. プロジェクトのルート ディレクトリに、cloudbuild.yaml という名前で Cloud Build 構成ファイルを作成します。

  2. インストール要件: Docker Hub の python イメージには、pip がプリインストールされています。pip から依存関係をインストールするには、次のフィールドを含むビルドステップを追加します。

    • name: このタスクの Docker Hub から取得した Python イメージを使用するには、このフィールドの値を python または python:<tag> に設定します。他の Python イメージに使用できるタグのリストについては、Python イメージの Docker Hub リファレンスをご覧ください。
    • entrypoint: このフィールドを設定すると、name で参照されるイメージのデフォルトのエントリポイントがオーバーライドされます。このフィールドの値を pip に設定して、ビルドステップのエントリポイントとして pip を呼び出し、pip コマンドを実行します。
    • args: ビルドステップの args フィールドは引数のリストを受け取り、name フィールドによって参照されるイメージに渡します。引数を渡して、このフィールドで pip install コマンドを実行します。 pip install コマンドの --user フラグを使用すると、このビルドステップにインストールされているモジュールに、後続のビルドステップでアクセスできます。

    次のビルドステップでは、要件をインストールするための引数を追加します。

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. 単体テストを追加する: pytest などのテスト フレームワークを使用してアプリケーションで単体テストを定義している場合は、ビルドステップで次のフィールドを追加してテストを実行するように Cloud Build を構成できます。

    • name: タスクの Docker Hub から取得した Python イメージを使用するには、このフィールドの値を python に設定します。
    • entrypoint: python コマンドを実行するために、このフィールドの値を python に設定します。
    • args: python pytest コマンドを実行するための引数を追加します。

    次のビルドステップでは、pytest ログ出力を JUNIT XML ファイルに保存します。このファイルの名前は、$SHORT_SHAビルドに関連付けられた commit ID の短縮バージョンを使用して作成されます。以降のビルドステップでは、このファイルのログを Cloud Storage に保存します。

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. ビルド: ビルド構成ファイルで、ビルダーと args を定義してアプリケーションをビルドします。

    • name: タスクの Docker Hub から取得した Python イメージを使用するには、このフィールドの値を python に設定します。
    • entrypoint: python コマンドを実行するために、このフィールドの値を python に設定します。
    • args: ビルドの実行に必要な引数を追加します。

    次のビルドステップでビルドが開始されます。

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. Artifact Registry にアップロードする:

    構成ファイルに pythonPackages フィールドを追加し、Artifact Registry の Python リポジトリを指定します。

        artifacts:
           pythonPackages:
           - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY'
              paths: ['dist/*']
    

    次の値を置き換えます。

  6. 省略可: 来歴の生成を有効にする

    Cloud Build は、検証可能なソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)ビルドの来歴メタデータを生成し、継続的インテグレーション パイプラインの保護をサポートします。

    来歴の生成を有効にするには、構成ファイルの options セクションに requestedVerifyOption: VERIFIED を追加します。

  7. テストログを Cloud Storage に保存する: 既存のバケットのロケーションとテストログのパスを指定して、テストログを Cloud Storage に保存するように Cloud Build を構成できます。次のビルドステップでは、JUNIT XML ファイルに保存したテストログを Cloud Storage バケットに保存します。

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. 手動またはビルドトリガーを使用してビルドを開始します。

    ビルドが完了すると、Artifact Registry でリポジトリの詳細を表示できます。

    また、ビルドの来歴メタデータを表示したり、来歴を検証したりすることもできます。

次のステップ