Bagikan melalui


Teknik CI/CD dengan folder Git dan Databricks Git (Repos)

Pelajari teknik untuk menggunakan folder Databricks Git dalam alur kerja CI/CD. Dengan mengonfigurasi folder Databricks Git di ruang kerja, Anda dapat menggunakan kontrol sumber untuk file proyek di repositori Git dan Anda dapat mengintegrasikannya ke dalam alur rekayasa data Anda.

Gambar berikut menunjukkan gambaran umum teknik dan alur kerja.

Gambaran umum teknik CI/CD untuk folder Git.

Untuk gambaran umum CI/CD dengan Azure Databricks, lihat Apa itu CI/CD di Azure Databricks?.

Alur pengembangan

Folder Databricks Git memiliki folder tingkat pengguna. Folder tingkat pengguna secara otomatis dibuat ketika pengguna pertama kali mengkloning repositori jarak jauh. Anda dapat menganggap folder Databricks Git di folder pengguna sebagai "checkout lokal" yang bersifat individual untuk setiap pengguna dan di mana pengguna membuat perubahan pada kode mereka.

Di folder pengguna Anda di folder Databricks Git, kloning repositori jarak jauh Anda. Praktik terbaik adalah membuat cabang fitur baru atau memilih cabang yang dibuat sebelumnya untuk pekerjaan Anda, alih-alih langsung menerapkan dan mendorong perubahan ke cabang utama. Anda dapat membuat perubahan, menerapkan, dan mendorong perubahan di cabang tersebut. Ketika Anda siap untuk menggabungkan kode, Anda dapat melakukannya di antarmuka pengguna folder Git.

Persyaratan

Alur kerja ini mengharuskan Anda telah menyiapkan integrasi Git Anda.

Catatan

Databricks merekomendasikan agar setiap pengembang bekerja di cabang fitur mereka sendiri. Untuk informasi tentang cara mengatasi konflik penggabungan, lihat Mengatasi konflik penggabungan.

Berkolaborasi di folder Git

Alur kerja berikut menggunakan cabang yang disebut feature-b yang didasarkan pada cabang utama.

  1. Kloning repositori Git Anda yang ada ke ruang kerja Databricks Anda.
  2. Gunakan antarmuka pengguna folder Git untuk membuat cabang fitur dari cabang utama. Contoh ini menggunakan cabang feature-b fitur tunggal untuk kesederhanaan. Anda dapat membuat dan menggunakan beberapa cabang fitur untuk melakukan pekerjaan Anda.
  3. Buat modifikasi Anda pada notebook Azure Databricks dan file lain di repositori.
  4. Terapkan dan dorong perubahan pada penyedia Git Anda.
  5. Kontributor sekarang dapat mengkloning repositori Git ke dalam folder pengguna mereka sendiri.
    1. Mengerjakan cabang baru, rekan kerja membuat perubahan pada buku catatan dan file lain di folder Git.
    2. Kontributor menerapkan dan mendorong perubahan mereka ke penyedia Git.
  6. Untuk menggabungkan perubahan dari cabang lain atau melakukan rebase cabang feature-b di Databricks, di antarmuka pengguna folder Git gunakan salah satu alur kerja berikut:
  7. Ketika Anda siap untuk menggabungkan pekerjaan Anda ke repositori dan main cabang Git jarak jauh, gunakan antarmuka pengguna folder Git untuk menggabungkan perubahan dari fitur-b. Jika mau, Anda dapat menggabungkan perubahan langsung ke repositori Git yang mendukung folder Git Anda.

Alur kerja produksi

Folder Databricks Git menyediakan dua opsi untuk menjalankan pekerjaan produksi Anda:

  • Opsi 1: Berikan referensi Git jarak jauh dalam definisi pekerjaan. Misalnya, jalankan notebook tertentu di main cabang repositori Git.
  • Opsi 2: Siapkan repositori Git produksi dan panggil REPOS API untuk memperbaruinya secara terprogram. Jalankan pekerjaan terhadap folder Databricks Git yang mengkloning repositori jarak jauh ini. Panggilan REPOS API harus menjadi tugas pertama dalam pekerjaan.

Opsi 1: Jalankan pekerjaan menggunakan notebook di repositori jarak jauh

Sederhanakan proses definisi kerja dan pertahankan satu sumber kebenaran dengan menjalankan pekerjaan Azure Databricks menggunakan notebook yang terletak di repositori Git jarak jauh. Referensi Git ini dapat menjadi penerapan, tag, atau cabang Git dan disediakan oleh Anda dalam definisi pekerjaan.

Ini membantu mencegah perubahan yang tidak disengaja pada pekerjaan produksi Anda, seperti ketika pengguna melakukan pengeditan lokal di repositori produksi atau mengalihkan cabang. Ini juga mengotomatiskan langkah CD karena Anda tidak perlu membuat folder Git produksi terpisah di Databricks, mengelola izin untuk itu, dan terus memperbaruinya.

Lihat Menggunakan kode sumber yang dikontrol versi dalam pekerjaan Azure Databricks.

Opsi 2: Siapkan folder Git produksi dan otomatisasi Git

Dalam opsi ini, Anda menyiapkan folder git produksi dan otomatisasi untuk memperbarui folder Git saat digabungkan.

Langkah 1: Menyiapkan folder tingkat atas

Admin membuat folder tingkat atas non-pengguna. Kasus penggunaan yang paling umum untuk folder tingkat atas ini adalah membuat folder pengembangan, penahapan, dan produksi yang berisi folder Databricks Git untuk versi atau cabang yang sesuai untuk pengembangan, penahapan, dan produksi. Misalnya, jika perusahaan Anda menggunakan main cabang untuk produksi, folder Git "produksi" harus memiliki cabang yang main dicek keluar di dalamnya.

Biasanya izin pada folder tingkat atas ini bersifat baca-saja untuk semua pengguna non-admin di dalam ruang kerja. Untuk folder tingkat atas tersebut, kami sarankan Anda hanya menyediakan izin CAN EDIT dan CAN MANAGE kepada perwakilan layanan untuk menghindari pengeditan yang tidak disengaja pada kode produksi Anda oleh pengguna ruang kerja.

Folder Git tingkat atas.

Langkah 2: Siapkan pembaruan otomatis ke folder Databricks Git dengan API folder Git

Untuk menyimpan folder Git di Databricks pada versi terbaru, Anda dapat menyiapkan otomatisasi Git untuk memanggil REPOS API. Di penyedia Git Anda, siapkan otomatisasi yang, setelah setiap penggabungan PR berhasil ke cabang utama, memanggil titik akhir Repos API pada folder Git yang sesuai untuk memperbaruinya ke versi terbaru.

Misalnya, di GitHub ini dapat dicapai dengan Tindakan GitHub. Untuk informasi selengkapnya, lihat Repos API.

Untuk memanggil DATAbricks REST API dari dalam sel notebook Databricks, pertama-tama instal Databricks SDK dengan %pip install databricks-sdk --upgrade (untuk DATAbricks REST API terbaru) lalu impor ApiClient dari databricks.sdk.core.

Catatan

Jika %pip install databricks-sdk --upgrade mengembalikan kesalahan bahwa "Paket tidak dapat ditemukan", maka databricks-sdk paket belum diinstal sebelumnya. Jalankan kembali perintah tanpa --upgrade bendera: %pip install databricks-sdk.

Anda juga dapat menjalankan API SDK Databricks dari notebook untuk mengambil perwakilan layanan untuk ruang kerja Anda. Berikut adalah contoh menggunakan Python dan Databricks SDK untuk Python.

Anda juga dapat menggunakan alat seperti curl atau Terraform. Anda tidak dapat menggunakan antarmuka pengguna Azure Databricks.

Untuk mempelajari selengkapnya tentang perwakilan layanan di Azure Databricks, lihat Mengelola perwakilan layanan. Untuk informasi tentang perwakilan layanan dan CI/CD, lihat Perwakilan layanan untuk CI/CD. Untuk detail selengkapnya tentang menggunakan Databricks SDK dari buku catatan, baca Menggunakan Databricks SDK untuk Python dari dalam buku catatan Databricks.

Menggunakan perwakilan layanan dengan folder Databricks Git

Untuk menjalankan alur kerja yang disebutkan di atas dengan perwakilan layanan:

  1. Buat perwakilan layanan dengan Azure Databricks.
  2. Tambahkan kredensial git: Gunakan PAT penyedia Git Anda untuk perwakilan layanan.

Untuk menyiapkan perwakilan layanan, lalu tambahkan kredensial penyedia Git:

  1. Membuat perwakilan layanan. Lihat Menjalankan pekerjaan dengan perwakilan layanan.
  2. Buat token ID Microsoft Entra untuk perwakilan layanan.
  3. Setelah membuat perwakilan layanan, Anda menambahkannya ke ruang kerja Azure Databricks dengan API Perwakilan Layanan.
  4. Tambahkan kredensial penyedia Git Anda ke ruang kerja Anda dengan token ID Microsoft Entra dan API Kredensial Git.

Integrasi terraform

Anda juga dapat mengelola folder Databricks Git dalam penyiapan otomatis sepenuhnya menggunakan Terraform dan databricks_repo:

resource "databricks_repo" "this" {
  url = "https://github.com/user/demo.git"
}

Untuk menggunakan Terraform untuk menambahkan kredensial Git ke perwakilan layanan, tambahkan konfigurasi berikut:

  provider "databricks" {
    # Configuration options
  }

  provider "databricks" {
    alias = "sp"
    host = "https://....cloud.databricks.com"
    token = databricks_obo_token.this.token_value
  }

  resource "databricks_service_principal" "sp" {
    display_name = "service_principal_name_here"
  }

  resource "databricks_obo_token" "this" {
    application_id   = databricks_service_principal.sp.application_id
    comment          = "PAT on behalf of ${databricks_service_principal.sp.display_name}"
    lifetime_seconds = 3600
  }

  resource "databricks_git_credential" "sp" {
    provider = databricks.sp
    depends_on = [databricks_obo_token.this]
    git_username          = "myuser"
    git_provider          = "azureDevOpsServices"
    personal_access_token = "sometoken"
  }

Mengonfigurasi alur CI/CD otomatis dengan folder Databricks Git

Berikut adalah otomatisasi sederhana yang dapat dijalankan sebagai GitHub Action.

Persyaratan

  1. Anda telah membuat folder Git di ruang kerja Databricks yang melacak cabang dasar yang digabungkan.
  2. Anda memiliki paket Python yang membuat artefak untuk ditempatkan ke lokasi DBFS. Kode Anda harus:
    • Perbarui repositori yang terkait dengan cabang pilihan Anda (seperti development) untuk berisi versi terbaru buku catatan Anda.
    • Buat artefak apa pun dan salin ke jalur pustaka.
    • Ganti versi terakhir artefak build untuk menghindari harus memperbarui versi artefak secara manual dalam pekerjaan Anda.

Langkah-langkah

Catatan

Langkah 1 harus dilakukan oleh admin repositori Git.

  1. Siapkan rahasia sehingga kode Anda dapat mengakses ruang kerja Databricks. Tambahkan rahasia berikut ke repositori Github:

  2. Navigasi ke tab Tindakan repositori Git Anda dan klik tombol Alur kerja baru. Di bagian atas halaman, pilih Siapkan alur kerja sendiri dan tempelkan di skrip ini:

    Tautan

    # This is a basic automation workflow to help you get started with GitHub Actions.
    
    name: CI
    
      # Controls when the workflow will run
      on:
        # Triggers the workflow on push for main and dev branch
        push:
          branches:
            # Set your base branch name here
            - your-base-branch-name
    
      # A workflow run is made up of one or more jobs that can run sequentially or in parallel
      jobs:
        # This workflow contains a single job called "deploy"
        deploy:
          # The type of runner that the job will run on
          runs-on: ubuntu-latest
          env:
            DBFS_LIB_PATH: dbfs:/path/to/libraries/
            REPO_PATH: /Repos/path/here
            LATEST_WHEEL_NAME: latest_wheel_name.whl
    
          # Steps represent a sequence of tasks that will be executed as part of the job
          steps:
          # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          - name: Setup Python
            uses: actions/setup-python@v2
            with:
            # Version range or exact version of a Python version to use, using SemVer's version range syntax.
              python-version: 3.8
    
          - name: Install mods
            run: |
              pip install databricks-cli
              pip install pytest setuptools wheel
    
          - name: Configure CLI
            run: |
              echo "${{ secrets.DEPLOYMENT_TARGET_URL }} ${{ secrets.DEPLOYMENT_TARGET_TOKEN }}" | databricks configure --token
    
          - name: Extract branch name
            shell: bash
            run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
            id: extract_branch
    
          - name: Update Databricks Git folder
            run: |
              databricks repos update --path ${{env.REPO_PATH}} --branch "${{ steps.extract_branch.outputs.branch }}"
    
          - name: Build Wheel and send to Databricks workspace DBFS location
            run: |
              cd $GITHUB_WORKSPACE
              python setup.py bdist_wheel
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}
              # there is only one wheel file; this line copies it with the original version number in file name and overwrites if that version of wheel exists; it does not affect the other files in the path
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}${{env.LATEST_WHEEL_NAME}} # this line copies the wheel file and overwrites the latest version with it
    
  3. Perbarui nilai variabel lingkungan berikut dengan nilai Anda sendiri:

    • DBFS_LIB_PATH: Jalur di DBFS ke pustaka (roda) yang akan Anda gunakan dalam otomatisasi ini, yang dimulai dengan dbfs:. Misalnya,dbfs:/mnt/myproject/libraries.
    • REPO_PATH: Jalur di ruang kerja Databricks Anda ke folder Git tempat notebook akan diperbarui. Contohnya,/Repos/Develop.
    • LATEST_WHEEL_NAME: Nama file roda Python yang terakhir dikompilasi (.whl). Ini digunakan untuk menghindari pembaruan versi roda secara manual dalam pekerjaan Databricks Anda. Contohnya,your_wheel-latest-py3-none-any.whl.
  4. Pilih Terapkan perubahan... untuk menerapkan skrip sebagai alur kerja GitHub Actions. Setelah permintaan pull untuk alur kerja ini digabungkan, buka tab Tindakan dari repositori Git dan konfirmasikan bahwa tindakan berhasil.