メインコンテンツまでスキップ

Databricks Asset Bundle と GitHub Actions を使用して CI/CD ワークフローを実行する

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

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

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

  • リポジトリのルートにあるバンドル構成ファイル (GitHub Actions YAML ファイルの設定によって明示的に宣言されます working-directory: . (バンドル構成ファイルが既にリポジトリのルートにある場合、この設定は省略できます)。 このバンドル構成ファイルは、 my-job という名前の Databricks ワークフローと qaという名前のターゲットを定義します。 「Databricks アセット バンドルの構成」を参照してください。
  • GitHubSP_TOKENDatabricksDatabricksこのバンドルがデプロイおよび実行されている Databricksワークスペースに関連付けられている サービスプリンシパル の アクセストークンを表す、 という名前の シークレット。暗号化されたシークレットを参照してください。
YAML
# 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 ファイルは、前のファイルと同じリポジトリに存在できます。 このファイルは、バンドル設定ファイル内で定義されている「prod」という名前の本番運用ターゲット内で、指定されたバンドルを検証、デプロイ、および実行します。 この例の GitHub Actions YAML ファイルは、以下に依存しています。

  • リポジトリのルートにあるバンドル構成ファイルで、GitHub Actions YAML ファイルの設定 working-directory: . によって明示的に宣言されます (バンドル構成ファイルが既にリポジトリのルートにある場合、この設定は省略できます)。 このバンドル構成ファイルは、 my-job という名前の Databricks ワークフローと prodという名前のターゲットを定義します。 「Databricks アセット バンドルの構成」を参照してください。
  • GitHubSP_TOKENDatabricksDatabricksこのバンドルがデプロイおよび実行されている Databricksワークスペースに関連付けられている サービスプリンシパル の アクセストークンを表す、 という名前の シークレット。暗号化されたシークレットを参照してください。
YAML
# 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

関連項目