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

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

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

始める前に

このページの説明は、Python の知識があることを前提としています。次の特長があります。

  • Cloud Build, Artifact Registry, and Cloud Storage API を有効にします。

    API を有効にする

  • このページで 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 にアップロードする:

    Cloud Build 構成ファイルの python_packages フィールドを使用してアーティファクトを Artifact Registry にアップロードすると、Cloud Build がスタンドアロン Python パッケージのサプライ チェーン レベル(SLSA)ビルドの場所情報を生成します。

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

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

    次の値を置き換えます。

    • PROJECT-ID は、Artifact Registry リポジトリを含む Google Cloud プロジェクトの ID です。
    • REPOSITORY はリポジトリの ID です。
    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
  6. 省略可: リージョン ビルドで来歴を有効にする

    リージョン ビルドを使用している場合は、ビルド構成ファイルの optionsrequestedVerifyOption フィールドを追加します。来歴メタデータの生成を有効にするには、値を VERIFIED に設定します。requestedVerifyOption: VERIFIED を追加しない場合、Cloud Build はグローバル ビルドでのみ来歴を生成します。

    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 でリポジトリの詳細を表示できます。

    ビルドの場所のメタデータを表示して、来歴を検証して、ソフトウェア サプライ チェーンを保護することもできます。

次のステップ