CI/CD Databricks-alkalmazásokhoz GitHub Actionsszel

Ez a lap bemutatja, hogyan automatizálhatja a Databricks-alkalmazások üzembe helyezését GitHub GitHub Actions és Declarative Automation Bundles használatával. Ez magában foglalja a számítási feladatok identitásának összevonását, a munkafolyamat YAML-ét és egy állapotellenőrzést, amely megerősíti, hogy az alkalmazás minden üzembe helyezés után a legújabb kódot szolgálja ki.

Általános GitHub Actions útmutatást Azure Databricks feladatokhoz és folyamatokhoz: GitHub Actions. A munkaterhelés-identitásföderáció beállításával kapcsolatban lásd: A munkaterhelés-identitásföderáció engedélyezése a GitHub Actionshöz.

Note

Ha azt szeretné, hogy az alkalmazás minden, az egyik ágra történő push után automatikusan újra üzembe legyen helyezve, használja az automatikus Git-alapú üzembe helyezést (béta). Lásd: Az automatikus Git-telepítések engedélyezése.

Requirements

1. lépés. Munkaterhelés-identitásföderáció konfigurálása

A munkaterhelés-identitásszövetség lehetővé teszi, hogy a GitHub Actions-futtató egy rövid élettartamú OIDC-tokennel hitelesítse magát az Azure Databricksnél, ahelyett hogy hitelesítő adatokat tárolna a repozitóriumban.

  1. A szolgáltatásnévben a GitHub Actions föderációs szabályzatának létrehozásához kövesse a Workload Identity Federation engedélyezése a GitHub Actionshöz című témakör lépéseit. Rögzítse a szolgáltatásnév alkalmazásazonosítóját (UUID) és a munkaterület URL-címét. Mindkét változóra szüksége van a munkafolyamatban.
  2. Adjon a szolgáltatásnévnek CAN MANAGE engedélyt az alkalmazásban, vagy munkaterületi engedélyt az alkalmazások létrehozásához, ha az alkalmazás még nem létezik. Lásd: Databricks-alkalmazások engedélyeinek konfigurálása.

2. lépés. A GitHub adattár konfigurálása

A GitHub adattárban hozzon létre egy üzembehelyezési környezetet a munkaterület kapcsolati változóinak tárolásához. A környezet használatával manuális jóváhagyást is igényelhet az üzembe helyezés előtt.

  1. A Beállítási>környezetekben hozzon létre egy környezet nevét prod (vagy bármely nevet, amelyet a munkafolyamat hivatkozik).
  2. Környezeti változók esetén adja hozzá a következőket:
Variable Value
DATABRICKS_HOST A munkaterület URL-címe, például https://my-workspace.cloud.databricks.com
DATABRICKS_CLIENT_ID A szolgáltatásnév alkalmazásazonosítója az 1. lépésből

Egyik érték sem hitelesítő adat. A szolgáltatásnév összevonási szabályzata szabályozza, hogy ki hitelesítheti magát, így az ügyfélazonosító önmagában nem biztosít hozzáférést. Nincs szükség titkos ügyfélkódra.

3. lépés. Konfigurálja a csomagot éles üzembe helyezéshez

Itt databricks.ymldeklaráljon egy explicit munkaterületet host és root_path a prod célon. Ez biztosítja, hogy a csomag minden futtatáskor ugyanazon a helyen legyen üzembe helyezve. Az éles módú érvényesítéshez mindkét mezőre szükség van, kivéve, ha run_as szolgáltatásnévre van beállítva. Lásd: Deklaratív Automation-csomagok üzembe helyezési módjai.

Git-forrás

Használja a(z) git_source elemet, hogy a telepítések közvetlenül a Git-adattárból kérjék le a kódot, ahelyett hogy fájlokat töltene fel a munkaterületre. Ez elkerüli a további sync lépést, és szinkronizálja az üzembe helyezett kódot az adattárral.

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

Cserélje le a(z) <service-principal-or-owner> elemet arra a munkaterület-felhasználóra, amely a köteghez tartozó összetevők tulajdonosa, jellemzően a szolgáltatásnévhez tartozó alkalmazásazonosítóra. Cserélje le az git_repository URL-címet a GitHub adattár URL-címére. Ha az alkalmazás kódja a repozitórium gyökerében található, hagyja ki a(z) source_code_path elemet. Lásd a(z) alkalmazást.

Magánadattárak esetén üzembe helyezés előtt konfiguráljon egy Git-hitelesítő adatot az alkalmazás szolgáltatásnevén. Tekintse meg a Git-adattárból történő üzembe helyezés parancssori felületének utasításait.

Munkaterület forrása

A source_code_path használatával alkalmazásfájlokat tölthet fel a helyi tárolóból a munkaterületre az üzembe helyezés során.

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

Cserélje le a(z) <service-principal-or-owner> elemet arra a munkaterület-felhasználóra, amely a köteghez tartozó összetevők tulajdonosa, jellemzően a szolgáltatásnévhez tartozó alkalmazásazonosítóra. Cserélje le a(z) ./app elemet az alkalmazás forráskódjának a(z) databricks.yml-hez viszonyított elérési útjára. Lásd a(z) alkalmazást.

4. lépés. Az üzembe helyezési munkafolyamat hozzáadása

Add hozzá a(z) .github/workflows/deploy.yml elemet az adattáradhoz:

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

Az utolsó lépésben cserélje le a(z) my_app elemet arra az erőforráskulcsra, amelyet a(z) databricks.yml a(z) resources.apps alatt használ.

A futónak szüksége van az id-token: write OIDC-jogkivonat igényléséhez szükséges engedélyre. A databricks/setup-cli művelet automatikusan beolvassa DATABRICKS_AUTH_TYPE=github-oidc és kezeli a hitelesítést.

Warning

databricks bundle deploy feltölti a forráskódot, és frissíti az erőforrásokat, de nem indítja újra az alkalmazásfolyamatot. Ha kihagyja az utolsó databricks bundle run lépést, az üzembe helyezés a CI-ben halad át, miközben az alkalmazás továbbra is az előző kódot szolgálja ki. Az üzembe helyezés után mindig futtassa a csomagerőforrást.

5. lépés. Várjon, amíg az alkalmazás kifogástalan állapotban van

A Databricks azt javasolja, hogy az üzembe helyezés után adjon hozzá egy állapot-lekérdezési lépést. databricks bundle run kilép, amint jelzi az alkalmazás indítását, de lehet, hogy az alkalmazás még nem fut. Az indítás során továbbra is meghiúsulhat olyan problémák miatt, mint a hiányzó függőségek, a hiányzó környezeti változók vagy a portütközések. Lekérdezési lépés hozzáadása biztosítja, hogy egy sikertelen indítás a munkafolyamatot is meghiúsulja:

- 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

Állítsa a(z) APP_NAME értékét arra az értékre, amelyet a(z) databricks.yml a(z) resources.apps.<key>.name alatt megad, ne a csomag erőforráskulcsára.

Meglévő alkalmazás kezelése

Az alkalmazásnevek a munkaterületen egyediek. A bundle deploy lépés meghiúsul An app with the same name already exists , ha egy másik csomag (vagy egy manuálisan létrehozott alkalmazás) már rendelkezik ilyen nevű alkalmazással. Kösse a csomagot a meglévő alkalmazáshoz ahelyett, hogy újra létrehozná.

Ezt helyileg futtatva csatolja a csomagot a meglévő alkalmazáshoz:

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

Ezután futtassa újra a munkafolyamatot. A későbbi üzembe helyezések újra felhasználják a kötést.

Ha a meglévő alkalmazás kiszolgálóoldali konfigurációval (például budget_policy_id) rendelkezik, amely nem szerepel a databricks.ymlcsomagfájlban, az újbóli üzembe helyezés előtt másolja azt a csomagfájlba. Az eltérések terraformos "inkonzisztens eredmény" hibaként jelennek meg a csomag üzembe helyezési lépése során.

Eseményindító kiválasztása

workflow_dispatch-val kezdje, hogy az első telepítés kézi legyen. Miután néhány futtatás sikeresen lefutott, adja hozzá a push: branches: [main] elemet, hogy minden egyesítéskor üzembe helyezzen.

További biztonsági ellenőrzésként állítsa be a prod környezetet kötelező jóváhagyókkal itt: Settings>Environments>prod>Deployment protection rules. Minden munkafolyamat futtatása megvár egy jóváhagyót az üzembe helyezési feladat megkezdése előtt.

További erőforrások