GitHub Actions ile Databricks Uygulamaları için CI/CD

Bu sayfada, GitHub Actions ve Declarative Automation Bundles kullanarak bir Databricks uygulamasının GitHub dağıtımını otomatikleştirme işlemi açıklanır. İş yükü kimlik federasyonunu, iş akışı YAML'yi ve uygulamanın her dağıtımdan sonra en son kodu kullanıma açtığını onaylayan bir sistem durumu denetimini kapsar.

Azure Databricks işleri ve işlem hatlarına yönelik genel GitHub Actions yönergeleri için bkz. GitHub Actions. İş yükü kimliği federasyonu kurulumu için bkz. GitHub Actions için iş yükü kimliği federasyonunu etkinleştirme.

Note

Uygulamanızı bir dala yapılan her gönderimde otomatik olarak yeniden dağıtmak için otomatik Git dağıtımlarını (Beta) kullanın. Bkz . Otomatik Git dağıtımlarını etkinleştirme.

Requirements

1. Adım. İş yükü kimlik federasyonunu yapılandırın

İş yükü kimliği federasyonu, GitHub Actions çalıştırıcısının deponuzda kimlik bilgilerini depolamak yerine kısa süreli bir OIDC belirteci kullanarak Azure Databricks kimlik doğrulaması yapmasını sağlar.

  1. Hizmet sorumlusunda bir GitHub Actions federasyon ilkesi oluşturmak için GitHub Actions için iş yükü kimliği federasyonunu etkinleştirme bölümündeki adımları izleyin. Hizmet sorumlusu uygulama kimliğini (UUID) ve çalışma alanı URL'nizi kaydedin. her ikisini de iş akışında değişken olarak kullanmanız gerekir.
  2. Hizmet sorumlusu CAN MANAGE için uygulama üzerinde izin verin veya uygulama henüz yoksa uygulama oluşturmak için çalışma alanı izni verin. Bkz . Databricks uygulaması için izinleri yapılandırma.

Adım 2. GitHub deposunu yapılandırma

GitHub deponuzda, çalışma alanı bağlantı değişkenlerini depolamak için bir dağıtım ortamı oluşturun. Ortam kullanmak, dağıtımlar çalıştırilmeden önce el ile onay gerektirmenizi de sağlar.

  1. Ayarlar>Ortamları'nda adlı prod bir ortam (veya iş akışınızın başvuracağı herhangi bir ad) oluşturun.
  2. Ortam değişkenleri için aşağıdakileri ekleyin:
Variable Value
DATABRICKS_HOST Çalışma alanı URL'niz, örneğin https://my-workspace.cloud.databricks.com
DATABRICKS_CLIENT_ID 1. Adımdaki hizmet sorumlusu uygulama kimliği

Her iki değer de kimlik bilgisi değildir. Hizmet asıl sorumlusuna ilişkin federasyon ilkesi, onun kimliğiyle kimlerin kimlik doğrulaması yapabileceğini belirler; bu nedenle istemci kimliği tek başına erişim sağlamaz. İstemci parolasına ihtiyacınız yok.

Adım 3. Paketinizi üretim dağıtımları için yapılandırma

databricks.yml içinde, host hedefiniz üzerinde açık bir çalışma alanı root_path ve prod bildirin. Bu, paketin her çalıştırmada aynı konuma dağıtılmasını sağlar. Üretim modu doğrulaması, run_as hizmet sorumlusu olarak ayarlanmadıkça her iki alanı da gerektirir. Bkz Deklaratif Otomasyon Paketleri dağıtım modları.

Git kaynağı

Dağıtımların çalışma alanına dosya yüklemek yerine doğrudan Git deponuzdan kod çekmesini sağlamak için kullanın git_source . Bu, ek sync adımı önler ve dağıtılan kodu deponuzla eşitlenmiş durumda tutar.

targets:
  prod:
    mode: production
    workspace:
      host: https://my-workspace.cloud.databricks.com
      root_path: /Workspace/Users/<service-principal-or-owner>/.bundle/${bundle.name}/${bundle.target}
    resources:
      apps:
        my_app:
          name: my-app
          git_repository:
            url: https://github.com/org/repo
          git_source:
            branch: main
            source_code_path: apps/my-app

<service-principal-or-owner> öğesini, paket artifaktlarının sahibi olan çalışma alanı kullanıcısıyla, genellikle hizmet sorumlusu uygulamasının kimliğiyle değiştirin. URL'yi git_repository GitHub depo URL'nizle değiştirin. Uygulama kodunuz deponun kök dizinindeyse source_code_path ögesini atlayın. Uygulamaya bakın.

Özel depolar için, dağıtmadan önce uygulamanın hizmet sorumlusunda git kimlik bilgilerini yapılandırın. Git deposundan dağıtma başlığı altında CLI yönergelerine bakın.

Çalışma alanı kaynağı

Dağıtım sırasında yerel deponuzdaki uygulama dosyalarını çalışma alanına yüklemek için kullanın source_code_path .

targets:
  prod:
    mode: production
    workspace:
      host: https://my-workspace.cloud.databricks.com
      root_path: /Workspace/Users/<service-principal-or-owner>/.bundle/${bundle.name}/${bundle.target}
    resources:
      apps:
        my_app:
          name: my-app
          source_code_path: ./app

<service-principal-or-owner> öğesini, paket artifaktlarının sahibi olan çalışma alanı kullanıcısıyla, genellikle hizmet sorumlusu uygulamasının kimliğiyle değiştirin. ./app öğesini, databricks.yml'e göre uygulamanızın kaynak kodunun yolu ile değiştirin. Uygulamaya bakın.

Adım 4. Dağıtım iş akışını ekleme

Deponuza ekleyin .github/workflows/deploy.yml :

name: Deploy to Databricks Apps

on:
  workflow_dispatch:
  # Uncomment to deploy on every push to main once the workflow is validated.
  # push:
  #   branches: [main]

permissions:
  id-token: write # required for OIDC federation
  contents: read

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: prod
    env:
      DATABRICKS_AUTH_TYPE: github-oidc
      DATABRICKS_HOST: ${{ vars.DATABRICKS_HOST }}
      DATABRICKS_CLIENT_ID: ${{ vars.DATABRICKS_CLIENT_ID }}
    steps:
      - uses: actions/checkout@v4

      - name: Install Databricks CLI
        uses: databricks/setup-cli@main

      - name: Validate bundle
        run: databricks bundle validate --target prod

      - name: Deploy bundle
        run: databricks bundle deploy --target prod

      - name: Start or restart app
        run: databricks bundle run my_app --target prod

Son adımda, my_app altında databricks.yml öğenizin kullandığı kaynak anahtarıyla resources.apps ifadesini değiştirin.

Çalıştırıcının bir OIDC belirteci talep etmek için id-token: write iznine sahip olması gerekir. databricks/setup-cli eylemi DATABRICKS_AUTH_TYPE=github-oidc öğesini okur ve kimlik doğrulamayı otomatik olarak gerçekleştirir.

Warning

databricks bundle deploy kaynak kodunu yükler ve kaynakları günceller, ancak uygulama sürecini yeniden başlatmaz. Son databricks bundle run adımı atlarsanız uygulama önceki kodu sunmaya devam ederken dağıtım CI'de geçer. Dağıtıldıktan sonra her zaman paket kaynağını çalıştırın.

Adım 5. Uygulamanın iyi durumda olmasını bekleyin

Databricks, dağıtımdan sonra durum yoklama adımı eklemeyi önerir. databricks bundle run uygulama başlatılacağına işaret eder etmez çıkar, ancak uygulama henüz çalışmıyor olabilir. Eksik bağımlılıklar, eksik bir ortam değişkeni veya bağlantı noktası çakışması gibi sorunlar nedeniyle başlatma sırasında yine başarısız olabilir. Bir yoklama adımı eklemek, başlatma işleminin başarısız olması durumunda iş akışının da başarısız sayılmasını sağlar:

- name: Wait for app to be running
  env:
    APP_NAME: my-app
  run: |
    for i in $(seq 1 20); do
      STATE=$(databricks apps get "$APP_NAME" --output json | jq -r '.app_status.state')
      echo "Attempt $i/20: state=$STATE"
      if [ "$STATE" = "RUNNING" ]; then
        exit 0
      fi
      sleep 15
    done
    echo "App did not reach RUNNING state within 5 minutes" >&2
    exit 1

APP_NAME değerini, paket kaynak anahtarına değil, databricks.yml öğesinin resources.apps.<key>.name altında bildirdiği değere ayarlayın.

Mevcut bir uygulamayı işleme

Uygulama adları çalışma alanı genelinde benzersizdir. bundle deploy adımı, o ada sahip bir uygulama zaten başka bir paket (veya manuel olarak oluşturulmuş bir uygulama) tarafından sahipleniliyorsa An app with the same name already exists hatasıyla başarısız olur. Paketinizi yeniden oluşturma yerine mevcut uygulamaya bağlayın.

Paketi mevcut uygulamaya eklemek için bunu yerel olarak bir kez çalıştırın:

databricks bundle deployment bind my_app <existing-app-name> --target prod --auto-approve

Ardından iş akışını yeniden çalıştırın. Sonraki dağıtımlarda bağlama yeniden kullanılır.

Mevcut uygulamada, budget_policy_id dosyanızda bulunmayan sunucu tarafı yapılandırmaları (örneğin databricks.yml) varsa, yeniden dağıtmadan önce bunları paket dosyasına kopyalayın. Uyumsuzluklar, paket dağıtma adımı sırasında Terraform "tutarsız sonuç" hatası olarak görünür.

Tetikleyici seçme

İlk dağıtım manuel olsun diye workflow_dispatch ile başlayın. Birkaç çalıştırma başarıyla tamamlandıktan sonra, her birleştirmede dağıtmak üzere push: branches: [main] öğesini ekleyin.

Ek bir güvenlik kapısı için, prod ortamını Ayarlar>Ortamlar>prod>Dağıtım koruma kuralları bölümünde gerekli gözden geçirenlerle yapılandırın. Her iş akışı çalıştırması, dağıtım görevi başlamadan önce onay veren kişiyi bekler.

Ek kaynaklar