Partager via


GitHub Actions (actions de GitHub)

Important

Cette fonctionnalité est disponible en préversion publique.

GitHub Actions déclenche des exécutions de vos flux CI/CD à partir de vos référentiels GitHub et vous permet d’automatiser votre pipeline de génération, de test et de déploiement CI/CD.

Cet article fournit des informations sur GitHub Actions développées par Databricks et des exemples pour les cas d’usage courants. Pour plus d’informations sur les autres fonctionnalités CI/CD et les meilleures pratiques sur Databricks, consultez CI/CD sur Azure Databricks et meilleures pratiques et les flux de travail CI/CD recommandés sur Databricks.

Databricks GitHub Actions

Databricks a développé les actions GitHub suivantes pour vos flux de travail CI/CD sur GitHub. Ajoutez des fichiers YAML GitHub Actions au répertoire de .github/workflows votre dépôt.

Remarque

Cet article traite de GitHub Actions, qui est développé par un tiers. Pour contacter le fournisseur, consultez le support GitHub Actions.

GitHub Actions Descriptif
databricks/setup-cli Action composite qui configure l’interface CLI Databricks dans un workflow GitHub Actions.

Exécuter un flux de travail CI/CD qui met à jour un dossier Git de production

L’exemple suivant de fichier YAML GitHub Actions met à jour un dossier Git d’espace de travail lorsqu’une branche distante est mise à jour. Pour plus d’informations sur l’approche de dossier Git de production pour CI/CD, consultez Autres outils pour le contrôle de code source.

Cet exemple utilise la fédération des identités de charge de travail pour GitHub Actions pour une sécurité renforcée et nécessite d’abord suivre les étapes décrites dans Activer la fédération des identités de charge de travail pour GitHub Actions afin de créer une stratégie de fédération.

name: Sync Git Folder

concurrency: prod_environment

on:
  push:
    branches:
      # Set your base branch name here
      - git-folder-cicd-example

permissions:
  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 }}

    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 flux de travail CI/CD avec un bundle qui exécute une mise à jour de pipeline

L’exemple suivant de fichier YAML GitHub Actions déclenche un déploiement de test qui valide, déploie et exécute le travail spécifié dans le bundle au sein d’une cible de préproduction nommée « dev » comme défini dans un fichier de configuration groupé.

Cet exemple exige qu’il existe les éléments suivants :

  • Un fichier de configuration de bundle à la racine du référentiel, qui est explicitement déclaré dans le paramètre du fichier YAML de GitHub Actions. Ce fichier de configuration de bundle doit définir un flux de travail Azure Databricks nommé working-directory: . et une cible nommée my-job. Consultez Configuration du pack de ressources Databricks.
  • Secret GitHub nommé SP_TOKEN, représentant le jeton d’accès Azure Databricks pour un principal de service Azure Databricks associé à l’espace de travail Azure Databricks sur lequel ce bundle est déployé et exécuté. Voir Secrets chiffrés.
# 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 "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: dev

Vous pouvez également déclencher des déploiements de production. Le fichier YAML GitHub Actions suivant peut exister dans le même dépôt que le fichier précédent. Ce fichier valide, déploie et exécute le bundle spécifié dans une cible de production nommée « prod » comme défini dans un fichier de configuration groupé.

# 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

Exécuter un flux de travail CI/CD qui génère un fichier JAR et déploie un bundle

Si vous disposez d’un écosystème Java, votre action GitHub doit générer et charger un fichier JAR avant de déployer l’offre groupée. L’exemple suivant de fichier YAML GitHub Actions déclenche un déploiement qui génère et charge un fichier JAR sur un volume, puis valide et déploie le bundle sur une cible de production nommée « prod » comme défini dans le fichier de configuration du bundle. Il compile un fichier JAR java, mais les étapes de compilation d’un projet Scala sont similaires.

Cet exemple exige qu’il existe les éléments suivants :

  • Fichier de configuration du pack à la racine du dépôt, qui est explicitement déclaré via le paramètre working-directory: . du fichier YAML de GitHub Actions
  • Variable d’environnement DATABRICKS_TOKEN qui représente le jeton d’accès Azure Databricks associé à l’espace de travail Azure Databricks sur lequel ce bundle est déployé et exécuté.
  • Variable d’environnement DATABRICKS_HOST qui représente l’espace de travail hôte Azure Databricks.
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

Ressources supplémentaires