Setelan admin - Continuous Integration

Halaman Continuous Integration di bagian Platform pada menu Admin memungkinkan Anda mengonfigurasi setelan untuk fitur Continuous Integration (CI) Looker. Konfigurasi setelan CI Looker (Google Cloud core) untuk memastikan kualitas dan keandalan project LookML Anda. CI mencegah error kueri dan mengidentifikasi masalah pada SQL, pengujian data, konten, dan LookML sebelum mencapai produksi. Anda juga dapat mengonfigurasi validator CI agar berjalan secara otomatis saat permintaan pull dikirimkan ke repositori LookML Anda, sehingga menyederhanakan alur kerja pengembangan Anda.

Kemampuan kepatuhan Continuous Integration

CI Looker tidak termasuk dalam batas otorisasi FedRAMP High, FedRAMP Moderate, atau DoD Impact Level 5 (IL5).

Sebelum mengaktifkan setelan CI Looker untuk instance Looker Anda, konsultasikan dengan badan pemberi otorisasi Anda untuk menentukan apakah penawaran kepatuhan CI Looker memenuhi persyaratan keamanan dan peraturan khusus organisasi Anda.

Untuk instance Looker (inti Google Cloud), setiap paket kontrol Assured Workloads yang tersedia akan menambahkan fitur CI Looker sebagai penawaran default setelah persyaratan dan proses perubahan paket tersebut terpenuhi.

Mengaktifkan Continuous Integration

Fitur Integrasi Berkelanjutan (CI) Looker memungkinkan Anda menjalankan pengujian pada project LookML untuk memberikan pengalaman data yang lebih andal, efisien, dan mudah digunakan. Anda dapat menggunakan validator CI untuk mengidentifikasi masalah pada SQL, pengujian data, konten, dan LookML sebelum masalah tersebut memengaruhi produksi untuk memverifikasi LookML dan mencegah error kueri bagi pengguna Anda. Anda juga dapat mengonfigurasi validator CI agar berjalan secara otomatis sesuai jadwal atau saat permintaan pull dikirimkan ke repositori LookML Anda.

Admin Looker dapat menggunakan tombol Aktifkan Continuous Integration untuk mengaktifkan CI di instance Anda.

Pengguna Looker CI

Saat Anda mengaktifkan Continuous Integration di instance, Looker akan otomatis membuat 10 pengguna CI Looker di grup pengguna Looker CI Users dengan peran Looker CI Users. Admin Looker dapat melihat pengguna CI Looker dari tab Akun Layanan di halaman Admin Pengguna.

Jika instance Anda menggunakan pemberian akses untuk mengontrol akses ke Eksplorasi, pengguna CI Looker harus disertakan dalam pemberian akses tersebut. Anda dapat menyertakan pengguna CI dengan menetapkan nilai atribut pengguna yang relevan ke grup Pengguna CI Looker, seperti yang dijelaskan di halaman dokumentasi Setelan admin - Atribut pengguna.

Integrasi

Integrasi Berkelanjutan memungkinkan Anda menjalankan rangkaian CI secara otomatis saat permintaan pull atau commit terjadi di repositori Git jarak jauh Anda. Anda dapat mengonfigurasi Continuous Integration untuk berintegrasi dengan penyedia Git berikut:

  • GitHub (menggunakan aplikasi GitHub CI Looker)
  • GitLab (menggunakan Looker API dan GitLab CI)
  • Bitbucket (menggunakan Looker API dan Bitbucket Pipelines)
  • GitHub Actions (menggunakan Looker API dan GitHub Actions)

GitHub

Jika Anda memiliki repositori GitHub berbasis cloud sebagai repositori jarak jauh untuk project LookML, Anda dapat mengonfigurasi Continuous Integration untuk menjalankan suite CI secara otomatis saat developer LookML mengirimkan permintaan pull ke repositori LookML Anda.

Untuk menjalankan rangkaian CI secara otomatis di repositori Anda, Integrasi Berkelanjutan memerlukan izin berikut:

  • Akses baca ke metadata dan permintaan pull repositori Anda
  • Akses baca dan tulis ke status commit, hook repositori, dan alur kerja repositori Anda

Izin ini tidak disiapkan saat Anda menyiapkan koneksi Git untuk project LookML di Looker IDE. Jika ingin menggunakan pemicuan permintaan pull untuk menjalankan CI, project LookML Anda harus disiapkan dengan koneksi Git (seperti yang dijelaskan di halaman Menyiapkan dan menguji koneksi Git), dan Anda juga harus mengonfigurasi aplikasi GitHub CI seperti yang dijelaskan di bagian Mengonfigurasi aplikasi GitHub CI.

Tabel GitHub

Tabel GitHub di halaman Admin Continuous Integration mencantumkan repositori GitHub yang dikonfigurasi untuk project LookML di instance Looker Anda. Repositori GitHub ini dikonfigurasi oleh developer LookML Anda seperti yang dijelaskan di halaman dokumentasi Menyiapkan dan menguji koneksi Git.

Untuk setiap repositori GitHub yang tercantum, tabel akan menampilkan apakah repositori telah dikonfigurasi dengan aplikasi GitHub CI:

Mengonfigurasi aplikasi GitHub CI

Untuk memberikan aplikasi GitHub CI untuk repositori, ikuti langkah-langkah berikut:

  1. Di halaman Admin Continuous Integration di Looker, klik tombol Configure GitHub App. Tindakan ini akan membuka jendela browser ke halaman web aplikasi GitHub.
  2. Pilih akun GitHub tempat LookML Anda disimpan.
  3. Di bagian Repository access, pilih All repositories untuk mengizinkan integrasi CI untuk semua repositori Git yang dimiliki oleh pemilik resource, atau pilih Only select repositories untuk memilih repositori yang ingin Anda gunakan untuk Integrasi Berkelanjutan.
  4. Klik Simpan.

Jika aplikasi GitHub CI Looker berhasil diberikan ke repositori, Looker akan menampilkan Terinstal untuk repositori di tabel GitHub di halaman Admin Continuous Integration.

GitLab

Anda dapat memicu eksekusi Integrasi Berkelanjutan Looker dari GitLab CI menggunakan Looker API dan Looker Python SDK resmi (looker-sdk).

Untuk memicu eksekusi CI Looker dari pipeline CI GitLab, selesaikan langkah-langkah berikut:

  1. Konfigurasi variabel CI/CD di GitLab.
  2. Buat skrip Python untuk GitLab CI.
  3. Konfigurasi alur kerja GitLab CI.

Mengonfigurasi variabel CI/CD di GitLab

Di project GitLab, buka Settings > CI/CD > Variables dan buat variabel CI/CD berikut. Setel setiap variabel ke Disamarkan untuk melindungi nilai sensitif:

  • LOOKERSDK_BASE_URL: URL API instance Looker Anda (misalnya, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: ID Klien API3 yang dihasilkan dari halaman Admin Pengguna di Looker
  • LOOKERSDK_CLIENT_SECRET: Secret Klien API3 yang sesuai yang dihasilkan dari halaman Admin Pengguna di Looker

Membuat skrip Python untuk GitLab CI

Buat skrip Python bernama run_looker_ci.py di repositori Anda. Skrip ini menggunakan Looker SDK untuk memicu eksekusi CI dan melakukan polling hingga eksekusi selesai:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# GitLab CI specific environment variables
branch = os.getenv("CI_COMMIT_REF_NAME")
commit = os.getenv("CI_COMMIT_SHA")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or GitLab vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the GitLab CI job.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Mengonfigurasi alur kerja GitLab CI

Di direktori root repositori Anda, buat atau perbarui file konfigurasi pipeline .gitlab-ci.yml untuk menginstal looker-sdk dan menjalankan run_looker_ci.py:

stages:
  - test

looker-ci:
  stage: test
  image: python:3.10
  variables:
    LOOKER_PROJECT_ID: "LOOKER_PROJECT_ID"
    LOOKER_SUITE_ID: "LOOKER_SUITE_ID"
  script:
    - pip install looker-sdk
    - python run_looker_ci.py
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

Ganti kode berikut:

  • LOOKER_PROJECT_ID: ID project Looker yang ingin Anda uji
  • LOOKER_SUITE_ID: ID rangkaian CI yang ingin Anda jalankan

Bitbucket

Anda dapat memicu proses Integrasi Berkelanjutan Looker dari Bitbucket Pipelines menggunakan Looker API dan Looker Python SDK resmi (looker-sdk).

Untuk memicu eksekusi CI Looker dari Bitbucket Pipelines, selesaikan langkah-langkah berikut:

  1. Konfigurasi variabel repositori di Bitbucket.
  2. Buat skrip Python untuk Bitbucket Pipelines.
  3. Konfigurasi alur kerja Bitbucket Pipelines.

Mengonfigurasi variabel repositori di Bitbucket

Di repositori Bitbucket Anda, buka Repository settings > Repository variables dan buat variabel repositori berikut. Setel setiap variabel ke Secured untuk melindungi nilai sensitif:

  • LOOKERSDK_BASE_URL: URL API instance Looker Anda (misalnya, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: ID Klien API3 yang dihasilkan dari halaman Admin Pengguna di Looker
  • LOOKERSDK_CLIENT_SECRET: Rahasia Klien API3 yang sesuai yang dihasilkan dari halaman Admin Pengguna di Looker

Membuat skrip Python untuk Bitbucket Pipelines

Buat skrip Python bernama run_looker_ci.py di repositori Anda. Skrip ini menggunakan Looker SDK untuk memicu eksekusi CI dan melakukan polling hingga eksekusi selesai:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# Bitbucket Pipelines specific environment variables
branch = os.getenv("BITBUCKET_BRANCH")
commit = os.getenv("BITBUCKET_COMMIT")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or Bitbucket vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the Bitbucket Pipeline.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Mengonfigurasi alur kerja Bitbucket Pipelines

Di direktori root repositori Anda, buat atau perbarui file bitbucket-pipelines.yml untuk menginstal looker-sdk dan menjalankan run_looker_ci.py:

image: python:3.10

pipelines:
  pull-requests:
    '**':
      - step:
          name: Looker CI
          script:
            - export LOOKER_PROJECT_ID="LOOKER_PROJECT_ID"
            - export LOOKER_SUITE_ID="LOOKER_SUITE_ID"
            - pip install looker-sdk
            - python run_looker_ci.py

Ganti kode berikut:

  • LOOKER_PROJECT_ID: ID project Looker yang ingin Anda uji
  • LOOKER_SUITE_ID: ID rangkaian CI yang ingin Anda jalankan

GitHub Actions

Anda dapat memicu eksekusi Integrasi Berkelanjutan Looker dari GitHub Actions menggunakan Looker API dan Looker Python SDK resmi (looker-sdk).

Untuk memicu eksekusi CI Looker dari alur kerja GitHub Actions, selesaikan langkah-langkah berikut:

  1. Konfigurasi rahasia repositori di GitHub.
  2. Buat skrip Python untuk GitHub Actions.
  3. Konfigurasi alur kerja GitHub Actions.

Mengonfigurasi secret repositori di GitHub

Di repositori GitHub Anda, buka Settings > Secrets and variables > Actions, lalu buat secret repositori berikut:

  • LOOKERSDK_BASE_URL: URL API instance Looker Anda (misalnya, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: ID Klien API3 yang dihasilkan dari halaman Admin Pengguna di Looker
  • LOOKERSDK_CLIENT_SECRET: Rahasia Klien API3 yang sesuai yang dihasilkan dari halaman Admin Pengguna di Looker

Membuat skrip Python untuk GitHub Actions

Buat skrip Python bernama run_looker_ci.py di repositori Anda. Skrip ini menggunakan Looker SDK untuk memicu eksekusi CI dan melakukan polling hingga eksekusi selesai:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# GitHub Actions specific environment variables
# GITHUB_HEAD_REF is the branch name for PRs. 
# GITHUB_REF_NAME can be used as a fallback for non-PR events.
branch = os.getenv("GITHUB_HEAD_REF") or os.getenv("GITHUB_REF_NAME")
# GITHUB_PR_SHA is the head commit SHA for PRs.
# GITHUB_SHA can be used as a fallback for non-PR events.
commit = os.getenv("GITHUB_PR_SHA") or os.getenv("GITHUB_SHA")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or GitHub vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the GitHub Action.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Mengonfigurasi alur kerja GitHub Actions

Di repositori Anda, buat file alur kerja di .github/workflows/looker-ci.yml dengan konfigurasi berikut:

name: Looker CI
on:
  pull_request:
    branches:
      - main

jobs:
  run-looker-ci:
    runs-on: ubuntu-latest


    env:
      # Automatically picked up by the Looker SDK
      LOOKERSDK_BASE_URL: ${{ secrets.LOOKERSDK_BASE_URL }}
      LOOKERSDK_CLIENT_ID: ${{ secrets.LOOKERSDK_CLIENT_ID }}
      LOOKERSDK_CLIENT_SECRET: ${{ secrets.LOOKERSDK_CLIENT_SECRET }}


      # Passed directly to the script
      LOOKER_PROJECT_ID: "LOOKER_PROJECT_ID"
      LOOKER_SUITE_ID: "LOOKER_SUITE_ID"
      GITHUB_PR_SHA: ${{ github.event.pull_request.head.sha }}

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install looker-sdk

      - name: Run Looker CI
        run: python run_looker_ci.py

Ganti kode berikut:

  • LOOKER_PROJECT_ID: ID project Looker yang ingin Anda uji
  • LOOKER_SUITE_ID: ID rangkaian CI yang ingin Anda jalankan

Konfigurasi dbt Cloud

Jika menggunakan dbt Cloud, Anda dapat mengonfigurasi Continuous Integration untuk menjalankan suite CI secara otomatis saat tugas CI dbt Cloud selesai. Suite CI yang dijalankan membantu memastikan bahwa perubahan pada model dbt Anda tidak merusak project LookML Anda.

Untuk mengonfigurasi integrasi dbt Cloud, ikuti langkah-langkah berikut di bagian Konfigurasi dbt Cloud:

  1. Di kolom dbt Cloud Host URL, masukkan URL ke akun dbt Cloud Anda.
  2. Di kolom dbt Cloud API Key, masukkan token akun layanan dbt Cloud.
  3. KlikUji Koneksi. Looker akan memverifikasi bahwa Looker dapat terhubung ke akun dbt Cloud Anda, lalu mengambil ID Akun dbt Cloud Anda.
  4. Klik Simpan.

Atribut Pengguna

Anda dapat mengonfigurasi atribut pengguna yang dapat diganti oleh Continuous Integration selama proses validasi. Atribut pengguna digunakan bersama dengan integrasi dbt Cloud untuk mengarahkan Looker ke skema sementara yang dibuat oleh tugas CI dbt Cloud.

Untuk mengonfigurasi default atribut pengguna untuk CI, ikuti langkah-langkah berikut di bagian Atribut Pengguna:

  1. Di kolom Atribut Pengguna, pilih atribut pengguna dari daftar drop-down. Jika tidak ada atribut pengguna yang dipilih, Looker akan menggunakan atribut pengguna yang ditentukan di kolom Set Data Utama di koneksi database untuk menjalankan CI.
  2. Di kolom Nilai untuk menjalankan CI, masukkan nilai yang harus digunakan dengan atribut pengguna ini untuk menjalankan CI.
  3. Klik Simpan.

Anda dapat menambahkan beberapa pasangan nilai dan atribut pengguna. Setiap atribut pengguna yang dikonfigurasi di bagian Atribut Pengguna akan tersedia untuk dipilih sebagai penggantian di konfigurasi CI Suite Anda.

Untuk menghapus pasangan atribut dan nilai pengguna, klik Hapus.