Databricks アセット バンドルとGitHub Actions を使用して CI/CD ワークフローを実行する

この記事では、GitHub ActionsDatabricks アセット バンドルを使用して GitHub で CI/CD (継続的インテグレーション/継続的デプロイ) ワークフローを実行する方法について説明します。「Databricks アセット バンドルとは」を参照してください。

GitHub Actions を Databricks CLI bundleコマンドとともに使用して、GitHub リポジトリ内から CI/CD ワークフローを自動化、カスタマイズ、実行できます。

次のような GitHub Actions YAML ファイルを repoの .github/workflows ディレクトリに追加できます。 次の GitHub Actions YAML ファイルの例では、バンドル構成ファイル内で定義されているように、"qa" という名前の事前本番運用ターゲット内のバンドル内の指定されたジョブを検証、デプロイ、および実行します。 この YAML ファイルの GitHub Actions 例は、次のものに依存しています。

  • GitHub Actions YAML ファイルの設定 working-directory: . で明示的に宣言された、リポジトリのルートにあるバンドル設定ファイル (バンドル設定ファイルがすでにリポジトリのルートにある場合は、この設定を省略できます)。 このバンドル構成ファイルは、 my-job という名前の Databricks ワークフローと qaという名前のターゲットを定義します。 Databricks アセット バンドルの構成に関するページを参照してください。

  • という名前の シークレット。このバンドルがデプロイおよび実行される ワークスペース に関連付けられている サービス プリンシパルの GitHubSP_TOKENDatabricksアクセスDatabricks トークンを表します。Databricks「 暗号化されたシークレット」を参照してください。

# This workflow validates, deploys, and runs the specified bundle
# within a pre-production target named "qa".
name: "QA deployment"

# Ensure that only a single job or workflow using the same concurrency group
# runs at a time.
concurrency: 1

# Trigger this workflow whenever a pull request is opened against the repo's
# main branch or an existing pull request's head branch is updated.
on:
  pull_request:
    types:
      - opened
      - synchronize
    branches:
      - main

jobs:
  # Used by the "pipeline_update" job to deploy the bundle.
  # Bundle validation is automatically performed as part of this deployment.
  # If validation fails, this workflow fails.
  deploy:
    name: "Deploy bundle"
    runs-on: ubuntu-latest

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Download the Databricks CLI.
      # See https://github.com/databricks/setup-cli
      - uses: databricks/setup-cli@main

      # Deploy the bundle to the "qa" target as defined
      # in the bundle's settings file.
      - run: databricks bundle deploy
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: qa

  # Validate, deploy, and then run the bundle.
  pipeline_update:
    name: "Run pipeline update"
    runs-on: ubuntu-latest

    # Run the "deploy" job first.
    needs:
      - deploy

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Use the downloaded Databricks CLI.
      - uses: databricks/setup-cli@main

      # Run the Databricks workflow named "my-job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run my-job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: qa

次の GitHub Actions YAML ファイルは、前のファイルと同じ repo に存在できます。 このファイルは、バンドル構成ファイル内で定義されているように、"prod" という名前の本番運用ターゲット内で指定されたバンドルを検証、デプロイ、および実行します。 この YAML ファイルの GitHub Actions 例は、次のものに依存しています。

  • GitHub Actions YAML ファイルの設定 working-directory: . で明示的に宣言された、リポジトリのルートにあるバンドル設定ファイル (バンドル設定ファイルがすでにリポジトリのルートにある場合は、この設定を省略できます)。 このバンドル構成ファイルは、 my-job という名前の Databricks ワークフローと prodという名前のターゲットを定義します。 Databricks アセット バンドルの構成に関するページを参照してください。

  • という名前の シークレット。このバンドルがデプロイおよび実行される ワークスペース に関連付けられている サービス プリンシパルの GitHubSP_TOKENDatabricksアクセスDatabricks トークンを表します。Databricks「 暗号化されたシークレット」を参照してください。

# This workflow validates, deploys, and runs the specified bundle
# within a production target named "prod".
name: "Production deployment"

# Ensure that only a single job or workflow using the same concurrency group
# runs at a time.
concurrency: 1

# Trigger this workflow whenever a pull request is pushed to the repo's
# main branch.
on:
  push:
    branches:
      - main

jobs:
  deploy:
    name: "Deploy bundle"
    runs-on: ubuntu-latest

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Download the Databricks CLI.
      # See https://github.com/databricks/setup-cli
      - uses: databricks/setup-cli@main

      # Deploy the bundle to the "prod" target as defined
      # in the bundle's settings file.
      - run: databricks bundle deploy
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: prod

  # Validate, deploy, and then run the bundle.
  pipeline_update:
    name: "Run pipeline update"
    runs-on: ubuntu-latest

    # Run the "deploy" job first.
    needs:
      - deploy

    steps:
      # Check out this repo, so that this workflow can access it.
      - uses: actions/checkout@v3

      # Use the downloaded Databricks CLI.
      - uses: databricks/setup-cli@main

      # Run the Databricks workflow named "my-job" as defined in the
      # bundle that was just deployed.
      - run: databricks bundle run my-job --refresh-all
        working-directory: .
        env:
          DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
          DATABRICKS_BUNDLE_ENV: prod