GitHub Actions
Aperçu
Cette fonctionnalité est en aperçu public.
GitHub Actions déclenchent les exécutions de vos flux CI/CD à partir de vos repositories GitHub et vous permettent d'automatiser votre pipeline CI/CD de build, de test et de déploiement.
Cette page fournit des informations concernant les GitHub Actions développées par Databricks et des exemples pour des cas d'utilisation courants. Pour plus d'informations sur les autres fonctionnalités et les meilleures pratiques CI/CD sur Databricks, consultez les éléments suivants :
- CI/CD sur Databricks
- Workflows CI/CD sur Databricks
- Bonnes pratiques de développement sur Databricks
Databricks GitHub Actions
Databricks a développé les GitHub Actions suivants pour vos workflows CI/CD sur GitHub. Ajoutez les fichiers YAML de GitHub Actions au répertoire .github/workflows de votre dépôt.
Cet article couvre GitHub Actions, qui est développé par un tiers. Pour contacter le fournisseur, voir GitHub Actions Support.
GitHub Actions | Description |
|---|---|
Une action composite qui configure le CLI Databricks dans un workflow GitHub Actions. |
Exécuter un workflow CI/CD qui met à jour un dossier Git
L'exemple de fichier YAML GitHub Actions suivant met à jour un dossier Git de workspace lorsqu'une branch distante est mise à jour. Pour plus d'informations sur l'approche de dossier Git pour le CI/CD, consultez Autres outils de contrôle de code source.
Exigences
Cet exemple utilise la fédération d'identité de charge de travail pour GitHub Actions pour une sécurité améliorée, et nécessite que vous ayez ajouté un Service Principal dans votre compte avec une politique de fédération GitHub Actions. Consultez Activer la fédération d'identité de charge de travail pour GitHub Actions.
Le sujet de la politique de fédération (l'identité du jeton fédéré) doit correspondre exactement au sujet de jeton attendu. Pour cet exemple, le type et le nom de l'entité sont Environment et Prod . L'objet construit doit être sous la forme repo:my-github-org-or-user/my-repo:environment:Prod.
Après avoir créé un Service Principal avec une politique de fédération, définissez la variable d'environnement DATABRICKS_HOST sur votre Workspace hôte Databricks et la variable d'environnement DATABRICKS_CLIENT_ID sur l'UUID du Service Principal. La variable d'environnement DATABRICKS_AUTH_TYPE est définie dans l'action. Pour plus d'informations sur les variables d'environnement Databricks, consultez Variables d'environnement et champs pour l'authentification unifiée.
Créer l'Action
Maintenant, ajoutez un fichier .github/workflows/sync_git_folder.yml à votre repository avec le YAML suivant :
name: Sync Git Folder
concurrency: prod_environment
on:
push:
branches:
# Set your base branch name here
- git-folder-cicd-example
permissions:
# These permissions are required for workload identity federation.
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
name: 'Update git folder'
environment: Prod
env:
DATABRICKS_AUTH_TYPE: github-oidc
DATABRICKS_HOST: ${{ vars.DATABRICKS_HOST }}
DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }} # This is the service principal UUID.
steps:
- uses: actions/checkout@v3
- uses: databricks/setup-cli@main
- name: Update git folder
# Set your workspace path and branch name here
run: databricks repos update /Workspace/<git-folder-path> --branch git-folder-cicd-example
Exécuter un workflow CI/CD avec un bundle qui exécute une mise à jour de pipeline
Le fichier YAML GitHub Actions d'exemple suivant Trigger un déploiement de test qui valide, déploie et exécute le job spécifié dans le bundle au sein d'une cible de pré-production nommée dev telle que définie dans un fichier de configuration de bundle.
Exigences
Cet exemple requiert qu'il y ait :
-
Une variable d'environnement définie par l'utilisateur
DATABRICKS_BUNDLE_ENV. -
Un fichier de configuration de bundle à la racine du repository, qui est explicitement déclaré via le paramètre
working-directory: .du fichier YAML de GitHub Actions. Ce fichier de configuration de bundle doit définir un workflow Databricks nommésample_jobet une cible nomméedev. Par exemple :YAML# This is a bundle definition for pipeline_update.
bundle:
name: pipeline_update
include:
- resources/*.yml
variables:
catalog:
description: The catalog to use
schema:
description: The schema to use
resources:
jobs:
sample_job:
name: sample_job
parameters:
- name: catalog
default: ${var.catalog}
- name: schema
default: ${var.schema}
tasks:
- task_key: refresh_pipeline
pipeline_task:
pipeline_id: ${resources.pipelines.sample_pipeline.id}
environments:
- environment_key: default
spec:
environment_version: '4'
pipelines:
sample_pipeline:
name: sample_pipeline
catalog: ${var.catalog}
schema: ${var.schema}
serverless: true
root_path: '../src/sample_pipeline'
libraries:
- glob:
include: ../src/sample_pipeline/transformations/**
environment:
dependencies:
- --editable ${workspace.file_path}
targets:
dev:
mode: development
default: true
workspace:
host: <dev-workspace-url>
variables:
catalog: my_catalog
schema: ${workspace.current_user.short_name}
prod:
mode: production
workspace:
host: <production-workspace-url>
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
variables:
catalog: my_catalog
schema: prod
permissions:
- user_name: someone@example.com
level: CAN_MANAGEPour plus d'informations sur la configuration des bundles, consultez la configuration des Declarative Automation Bundles.
-
Un secret GitHub nommé
SP_TOKEN, représentant le jeton d'accès Databricks pour un Service Principal Databricks qui est associé à l'espace de travail Databricks sur lequel ce bundle est déployé et exécuté. Pour créer un jeton :- Créer un Service Principal Databricks. Consultez Ajouter des services principaux à votre compte.
- Générez un secret pour le service principal. Consultez Étape 1 : Créer un secret OAuth. Copiez les valeurs de l'ID client et du secret.
- Générez manuellement un jeton d'accès Databricks (compte ou workspace) à l'aide des valeurs de secret et d'ID client copiées. Voir Générer un jeton d'accès au niveau du compte.
- Copiez la valeur
access_tokende la réponse JSON. Ajoutez un secret GitHub nomméSP_TOKENaux Actions de votre repository et utilisez le jeton d'accès Databricks comme valeur secrète. Consultez Secrets chiffrés.
La variable d'environnement d'authentification unifiée
DATABRICKS_TOKENest définie dans l'action sur leSP_TOKENque vous avez configuré.
Créer l'Action
Maintenant, ajoutez un fichier .github/workflows/pipeline_update.yml à votre repository avec le YAML suivant :
# This workflow validates, deploys, and runs the specified bundle
# within a pre-production target named "dev".
name: 'Dev 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 "dev" target as defined
# in the bundle's settings file.
- run: databricks bundle deploy
working-directory: .
env:
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
DATABRICKS_BUNDLE_ENV: dev
# 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 "sample_job" as defined in the
# bundle that was just deployed.
- run: databricks bundle run sample_job --refresh-all
working-directory: .
env:
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
DATABRICKS_BUNDLE_ENV: dev
Vous pourriez également souhaiter Trigger des déploiements en production. Le fichier YAML GitHub Actions suivant peut exister dans le même repository que le fichier précédent. Ce fichier valide, déploie et exécute le bundle spécifié au sein d'une cible de production nommée « prod », telle que définie dans un fichier de configuration de bundle.
# 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 "sample_job" as defined in the
# bundle that was just deployed.
- run: databricks bundle run sample_job --refresh-all
working-directory: .
env:
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }}
DATABRICKS_BUNDLE_ENV: prod
Exécutez un workflow CI/CD qui crée un JAR et déploie un bundle.
Si vous disposez d'un écosystème basé sur Java, votre GitHub Action doit créer et upload un JAR avant de déployer le bundle. L'exemple de fichier YAML GitHub Actions suivant déclenche un déploiement qui crée et upload un JAR vers un volume, puis valide et déploie le bundle vers une cible de production nommée "prod", telle que définie dans le fichier de configuration du bundle. Il compile un JAR basé sur Java, mais les étapes de compilation pour un projet basé sur Scala sont similaires.
Exigences
Cet exemple requiert qu'il y ait :
- Un fichier de configuration de bundle à la racine du repository, qui est explicitement déclaré via le paramètre du fichier YAML de GitHub Actions
working-directory: . - Une variable d'environnement
DATABRICKS_TOKENqui représente le jeton d'accès Databricks associé au workspace Databricks où ce bundle est déployé et exécuté. - Une variable d'environnement
DATABRICKS_HOSTqui représente le workspace hôte Databricks.
Créer l'Action
Maintenant, ajoutez un fichier .github/workflows/build_jar.yml à votre repository avec le YAML suivant :
name: Build JAR and deploy with bundles
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build-test-upload:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17' # Specify the Java version used by your project
distribution: 'temurin' # Use a reliable JDK distribution
- name: Cache Maven dependencies
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Build and test JAR with Maven
run: mvn clean verify # Use verify to ensure tests are run
- name: Databricks CLI Setup
uses: databricks/setup-cli@v0.9.0 # Pin to a specific version
- name: Upload JAR to a volume
env:
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }} # Add host for clarity
run: |
databricks fs cp target/my-app-1.0.jar dbfs:/Volumes/artifacts/my-app-${{ github.sha }}.jar --overwrite
validate:
needs: build-test-upload
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Databricks CLI Setup
uses: databricks/setup-cli@v0.9.0
- name: Validate bundle
env:
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
run: databricks bundle validate
deploy:
needs: validate
if: github.event_name == 'push' && github.ref == 'refs/heads/main' # Only deploy on push to main
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Databricks CLI Setup
uses: databricks/setup-cli@v0.9.0
- name: Deploy bundle
env:
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
run: databricks bundle deploy --target prod