Deploye til produksjon med GitHub Actions¶
Denne guiden viser hvordan GitHub Actions kan ta over deployen av en
bundle. På hver pull request
validerer og planlegger workflowen bundlen mot både stage og prod, så du ser hva endringen
vil gjøre i prod før du merger den inn. Når endringen merges inn i main, deployes
bundlen til prod. Autentiseringen bruker OpenID Connect (OIDC) mellom GitHub og
Databricks, mot service principals som Dataspeilet setter opp, så ingen hemmeligheter
lagres i GitHub.
Før du begynner¶
Sørg for at du har:
- En bundle med targetene
stageogprod, se Ta i bruk bundles. - Bundlen i et repo under
oslokommunepå GitHub, der du kan opprette workflows og administrere miljøer (Settings → Environments). - Godtatt brukervilkårene og gjennomført personvern- og risikovurdering for teamets bruk av data, se Brukervilkår og ansvar. Dette må være på plass før noe kjører i prod.
Trinn 1: Be Dataspeilet om OIDC-oppsett¶
Skriv i #dig-dataspeilet-support hvilket repo bundlen ligger i og hvilke workspaces den skal deployes til. Er repoet opprettet etter 15. juli 2026, si fra om det, da trenger OIDC-oppsettet et annet format. Dataspeilet setter opp to service principals per workspace:
<workspace>-gha-prs, som validerer og planlegger fra pull requests<workspace>-gha-deploy, som deployer fra et GitHub-miljø og kjører jobbene
Denne guiden bruker gha-prs i både stage- og prod-workspacet, og gha-deploy i
prod-workspacet. Be samtidig om at gha-deploy får rettigheter i katalogen og skjemaene
jobbene skal lese og skrive i. Det følger ikke med oppsettet av service principalen.
Du får tilbake application ID for hver service principal, og navnet på GitHub-miljøet for
prod-workspacet, normalt prod. Navnet er en del av OIDC-oppsettet, så det må brukes
nøyaktig slik i neste trinn. Se Roller og
rettigheter for
hva de to service principalene kan gjøre.
Trinn 2: Opprett GitHub-miljøet og variablene¶
- Gå til Settings → Environments i repoet og opprett miljøet
prod. - Legg til variabelen
DATABRICKS_CLIENT_IDi miljøet, med application ID forgha-deployi prod-workspacet. - Gå til Settings → Secrets and variables → Actions → Variables og legg til
repovariablene
DATABRICKS_PR_CLIENT_ID_STAGEogDATABRICKS_PR_CLIENT_ID_PROD, med application ID forgha-prsi henholdsvis stage- og prod-workspacet.
Application ID er ikke en hemmelighet, så variabler er riktig sted. Workspace-adressen
trenger du ikke oppgi, den står allerede i workspace.host per target i databricks.yml.
Trinn 3: Sett identitet og rettigheter i prod-targetet¶
Åpne databricks.yml og sett hvem som kjører jobbene i prod, og hvem som kan se og styre
dem. Bytt ut plassholderne med verdiene fra trinn 1 og teamets admin-gruppe:
targets:
prod:
mode: production
workspace:
host: https://prod-workspace.cloud.databricks.com
root_path: ~/.bundle/${bundle.name}/${bundle.target}
run_as:
service_principal_name: <application-id for gha-deploy>
permissions:
- group_name: <teamets admin-gruppe>
level: CAN_MANAGE
- service_principal_name: <application-id for gha-prs>
level: CAN_VIEW
run_astar application ID, ikke visningsnavnet.~/iroot_pather hjemområdet til identiteten som deployer, altså deploy-service principalen.permissionsgjelder både jobbene, pipelinene og deploy-mappa.CAN_VIEWtil PR-service principalen er det som lar pull request-workflowen lese deploy-tilstanden og vise en plan mot prod.- Stage-targetet lar du stå i
development-mode utenrun_as, ellers må alle som deployer fra egen maskin haCAN_USEpå service principalen.
Trinn 4: Skriv workflowene¶
Opprett .github/workflows/pr.yml, som validerer og planlegger mot begge targetene på hver
pull request mot main:
name: PR
on:
pull_request:
branches: [main]
permissions:
id-token: write
contents: read
jobs:
plan:
name: plan (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- target: stage
client_id: ${{ vars.DATABRICKS_PR_CLIENT_ID_STAGE }}
- target: prod
client_id: ${{ vars.DATABRICKS_PR_CLIENT_ID_PROD }}
env:
DATABRICKS_AUTH_TYPE: github-oidc
DATABRICKS_CLIENT_ID: ${{ matrix.client_id }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
- uses: databricks/setup-cli@fd1d91d9d3b5f1191a2aae9206f7c68a997dc52d # v1.16.0
- name: Validate
run: databricks bundle validate -t ${{ matrix.target }}
- name: Plan
run: databricks bundle plan -t ${{ matrix.target }}
Opprett så .github/workflows/deploy.yml, som deployer til prod når noe pushes til main:
name: Deploy
on:
push:
branches: [main]
permissions:
id-token: write
contents: read
concurrency: deploy
jobs:
prod:
runs-on: ubuntu-latest
environment: prod
env:
DATABRICKS_AUTH_TYPE: github-oidc
DATABRICKS_CLIENT_ID: ${{ vars.DATABRICKS_CLIENT_ID }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
- uses: databricks/setup-cli@fd1d91d9d3b5f1191a2aae9206f7c68a997dc52d # v1.16.0
- name: Deploy
run: databricks bundle deploy -t prod
id-token: writelar jobben hente et OIDC-token fra GitHub.environmentavgjør hvilket miljø tokenet utstedes for, og dermed hvilken service principal jobben kan logge inn som.concurrencyhindrer at to kjøringer deployer om hverandre.- Actions er pinnet til commit-hash, ikke til tag. En tag kan flyttes av den som eier actionen, en hash kan ikke. Kommentaren bak sier hvilken versjon hashen tilsvarer.
uvtrengs fordiplanogdeploybygger wheelet før de sammenligner med det som er deployet.- Deployen har ikke
--auto-approve. En endring som vil slette og gjenskape en pipeline med tabellene dens stopper derfor jobben i stedet for å gjøre det uten å spørre, se Feilsøking.
Bekreft resultatet¶
Lag en liten endring på en branch og åpne en pull request. Under Checks skal plan
kjøre for begge targetene. Planen for prod viser hva som endres når du merger inn, for
eksempel:
Planen for stage viser at konfigurasjonen er gyldig for stage-workspacet, men sier «to add»
for alle ressursene, siden development-mode gir hver identitet sin egen kopi.
Merge inn, og følg workflowen Deploy under Actions. I prod-workspacet finner du
jobbene og pipelinene under Jobs & Pipelines uten [dev ...]-prefiks, med
deploy-service principalen som Run as. Filene ligger under
/Workspace/Users/<application-id>/.bundle/.
Feilsøking¶
Autentiseringen feiler i workflowen
OIDC-tokenet inneholder reponavnet og miljønavnet, og begge må stemme med det
Dataspeilet registrerte. Sjekk at environment i jobben er skrevet nøyaktig som
miljønavnet du fikk i trinn 1, og at repoet ikke er gitt nytt navn eller flyttet. Er
repoet opprettet etter 15. juli 2026, trenger OIDC-oppsettet et annet format, se
trinn 1. Stemmer alt, si fra til Dataspeilet.
Plan mot prod feiler på den første pull requesten
PR-service principalen får lesetilgang til deploy-mappa først når bundlen er deployet
med permissions fra trinn 3. Merge inn endringen én gang. Fra neste pull request får
du plan mot prod.
Deploy feiler fordi en pipeline må slettes og gjenskapes
Noen endringer kan ikke gjøres på en eksisterende pipeline. Da sletter bundlen
pipelinen og tabellene dens, og lager dem på nytt. Planen på pull requesten viser
dette som recreate. Er det meningen, legg til --auto-approve på bundle deploy i
workflowen for denne ene deployen, og fjern flagget etterpå. Er det ikke meningen, ta
endringen tilbake.
Jobben kjører, men feiler med manglende rettigheter i katalogen
Deploy-service principalen kjører jobbene og trenger rettigheter i katalogen og skjemaene den skriver til. Be Dataspeilet om å gi den det.
Deploy feiler med at service principalen ikke finnes
run_as.service_principal_name skal være application ID, en UUID, ikke visningsnavnet
<workspace>-gha-deploy. validate fanger ikke dette, feilen kommer først i deploy.
Relatert innhold¶
Guider:
Forklaringer og referanser:
Ekstern dokumentasjon: