Compartir vía


Acciones de GitHub

Importante

Esta característica está en versión preliminar pública.

Las acciones de GitHub desencadenan ejecuciones de flujos de CI/CD desde los repositorios de GitHub y permiten automatizar la canalización de CI/CD de compilación, prueba e implementación.

En este artículo se proporciona información sobre las acciones de GitHub desarrolladas por Databricks y ejemplos para casos de uso comunes. Para obtener información sobre otras características de CI/CD y procedimientos recomendados sobre Databricks, consulte CI/CD en Azure Databricks y Procedimientos recomendados y flujos de trabajo de CI/CD recomendados en Databricks.

Acciones de GitHub en Databricks

Databricks ha desarrollado las siguientes acciones de GitHub para los flujos de trabajo de CI/CD en GitHub. Agregue archivos YAML de Acciones de GitHub al directorio del .github/workflows repositorio.

Nota:

En este artículo se tratan acciones de GitHub, desarrolladas por un tercero. Para ponerse en contacto con el proveedor, consulte compatibilidad con acciones de GitHub.

Acción de GitHub Descripción
databricks/setup-cli Acción compuesta que configura la CLI de Databricks en un flujo de trabajo de Acciones de GitHub.

Ejecución de un flujo de trabajo de CI/CD que actualiza una carpeta git de producción

En el siguiente ejemplo, el archivo YAML de Acciones de GitHub actualiza una carpeta git del área de trabajo cuando se actualiza una rama remota. Para obtener información sobre el enfoque de carpeta git de producción para CI/CD, consulte Otras herramientas para el control de código fuente.

En este ejemplo se usa la federación de identidades de carga de trabajo para Acciones de GitHub para mejorar la seguridad y requiere que primero siga los pasos descritos en Habilitación de la federación de identidades de carga de trabajo para Acciones de GitHub para crear una directiva de federación.

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

Ejecutar un flujo de trabajo de CI/CD con un paquete que ejecuta una actualización de canalización

En el siguiente ejemplo, el archivo YAML de Acciones de GitHub desencadena una implementación de prueba que valida, implementa y ejecuta el trabajo especificado en la agrupación dentro de un destino de preproducción denominado "dev", tal como se define dentro de un archivo de configuración de agrupación.

En este ejemplo se requiere que haya:

  • Un archivo de configuración de agrupación en la raíz del repositorio, que se declara explícitamente a través del valor working-directory: . del archivo YAML de Acciones de GitHub. Este archivo de configuración de agrupación debe definir un flujo de trabajo de Azure Databricks denominado my-job y un destino denominado dev. Consulte Configuración de conjuntos de recursos de Databricks.
  • Un secreto de GitHub denominado SP_TOKEN, que representa el token de acceso de Azure Databricks para un principal del servicio de Azure Databricks asociado al área de trabajo de Azure Databricks donde se implementará y ejecutará este paquete. Consulte Secretos cifrados.
# 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

También puede querer iniciar implementaciones de producción. El siguiente archivo YAML de Acciones de GitHub puede existir en el mismo repositorio que el archivo anterior. Este archivo valida, implementa y ejecuta la agrupación especificada dentro de un destino de producción denominado "prod", tal como se define en un archivo de configuración de agrupación.

# 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

Ejecuta un flujo de trabajo de CI/CD que compila un JAR e implementa un paquete

Si tiene un ecosistema basado en Java, la Acción de GitHub debe compilar y cargar un JAR antes de implementar el paquete. En el siguiente ejemplo, el archivo YAML de Acciones de GitHub desencadena una implementación que compila y carga un archivo JAR en un volumen y, a continuación, valida e implementa la agrupación en un destino de producción denominado "prod", tal como se define en el archivo de configuración de agrupación. Compila un ARCHIVO JAR basado en Java, pero los pasos de compilación de un proyecto basado en Scala son similares.

En este ejemplo se requiere que haya:

  • Un archivo de configuración de agrupación en la raíz del repositorio, que se declara explícitamente a través de la configuración del archivo YAML de Acciones de GitHub working-directory: .
  • Variable DATABRICKS_TOKEN de entorno que representa el token de acceso de Azure Databricks asociado al área de trabajo de Azure Databricks a la que se va a implementar y ejecutar esta agrupación.
  • Variable DATABRICKS_HOST de entorno que representa el área de trabajo host de 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

Recursos adicionales