GitHub Actions i Azure
Gjenskap CI/CD-arbeidsflyten med GitHub Actions og azure/webapps-deploy-handlingen, og forstå når GitHub Actions bør velges fremfor Azure Pipelines.
GitHub Actions i Azure er en gratis leksjon i Azure Fundamentals på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Azure Fundamentals, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Azure Fundamentals inneholder totalt 4 leksjoner.
Hva er GitHub Actions?
GitHub Actions er GitHubs innebygde plattform for CI/CD og automatisering. Workflows defineres i YAML-filer som lagres i .github/workflows/-mappen i repositoriet, og utløses av GitHub-hendelser – push, pull requests, releaser og mer. GitHub Actions er tett integrert med GitHub-økosystemet (issues, PR-er, pakker og sikkerhetsskanning) og tilbyr en omfattende markedsplass med community actions for oppgaver som bygging, testing og utrulling til Azure.
Strukturen i GitHub Actions-workflows
En workflow-fil for GitHub Actions har tre seksjoner på øverste nivå. on definerer utløsende hendelser. env angir globale miljøvariabler. jobs definerer én eller flere jobber, som hver kjører på en runner (hostet av GitHub eller selvhostet). Hver jobb har steps – enten run (skallskript) eller uses (en forhåndsbygd action). Jobber kjører parallelt som standard; bruk needs for å opprette sekvensielle avhengigheter.
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
NODE_VERSION: '18.x'
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- run: npm ci
- run: npm testAutentisering mot Azure fra GitHub Actions
Den anbefalte måten å autentisere GitHub Actions mot Azure på er OpenID Connect (OIDC) – dette utsteder kortvarige tokens uten å lagre langvarige hemmeligheter i GitHub. Konfigurer en federert identitetslegitimasjon på en Azure App Registration eller Managed Identity, og gi den tillit til GitHub-repositoriet og branchen Deres. Bruk actionen azure/login@v2 til å utveksle GitHub OIDC-tokenet mot et Azure-tilgangstoken – det er ikke nødvendig med klienthemmeligheter i GitHub Secrets.
# Configure OIDC federated credential in Azure
az ad app federated-credential create \
--id <AppRegistrationObjectId> \
--parameters '{
"name": "github-oidc",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:myorg/myrepo:ref:refs/heads/main",
"audiences": ["api://AzureADTokenExchange"]
}'
# In the workflow: login via OIDC
# permissions:
# id-token: write
# contents: read
# - uses: azure/login@v2
# with:
# client-id: ${{ vars.AZURE_CLIENT_ID }}
# tenant-id: ${{ vars.AZURE_TENANT_ID }}
# subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}Utrulling til Azure App Service
Actionen azure/webapps-deploy@v3 ruller ut kode eller et containerimage til Azure App Service. Den håndterer utrulling til slot, pakkebasert utrulling og utrulling av Docker-image. Kombiner den med azure/login@v2 for autentisering. De kan rette utrullingen mot et staging-slot, kjøre smoketester og deretter bytte slot med actionen azure/CLI@v2, som kjører kommandoen for slotbytte – og dermed gjenskape Azure Pipelines-mønsteret for blue-green-utrulling fullt ut i GitHub Actions.
# .github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Build and zip app
run: npm ci && npm run build && zip -r app.zip dist/
- uses: azure/webapps-deploy@v3
with:
app-name: myUniqueWebApp
slot-name: staging
package: app.zipUtrulling til Azure Kubernetes Service
Rull ut til AKS fra GitHub Actions ved hjelp av actionen azure/k8s-deploy@v5. Denne actionen bruker kubectl apply til å rulle ut manifester, utfører image-substitusjon (erstatter imagetagen med tagen fra det aktuelle bygget) og overvåker utrullingens helsetilstand. Actionen azure/aks-set-context@v4 konfigurerer kubectl-legitimasjon ved å hente klyngens kubeconfig ved hjelp av den autentiserte Azure-økten.
jobs:
deploy-aks:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- uses: azure/aks-set-context@v4
with:
resource-group: MyRG
cluster-name: myAKSCluster
- uses: azure/k8s-deploy@v5
with:
namespace: production
manifests: k8s/
images: 'mycontainerregistry.azurecr.io/myapp:${{ github.sha }}'GitHub Secrets og variabler
Lagres sensitive verdier i GitHub Secrets – krypterte verdier som er tilgjengelige som ${{ secrets.SECRET_NAME }} i workflows. Ikke-sensitive konfigurasjoner legges i GitHub Variables – tilgjengelige som ${{ vars.VARIABLE_NAME }}. Begge kan avgrenses til et repository, et miljø eller en organisasjon. Bruk environments i GitHub Actions for å legge til beskyttelsesregler (obligatoriske godkjennere og utrullingsbrancher), på samme måte som Azure DevOps Environments.
# Reference secrets and variables in a workflow
steps:
- name: Configure app settings
uses: azure/CLI@v2
with:
inlineScript: |
az webapp config appsettings set \
--name myUniqueWebApp \
--resource-group MyRG \
--settings \
DATABASE_URL='${{ secrets.DATABASE_URL }}' \
API_VERSION='${{ vars.API_VERSION }}'Regler for miljøbeskyttelse
Environments i GitHub Actions (konfigureres under Innstillinger → Environments i repositoriet) legger til utrullingsporter på samme måte som miljøer i Azure DevOps. De kan kreve required reviewers som må godkjenne før en jobb som retter seg mot miljøet, kjører, begrense utrullinger til bestemte brancher (bare main kan rulle ut til Production) og legge til ventetider for å utsette utrullinger. Jobber som retter seg mot et beskyttet miljø, settes på pause til alle beskyttelsesreglene er oppfylt.
# Workflow job targeting a protected GitHub environment
jobs:
deploy-production:
runs-on: ubuntu-latest
environment:
name: Production # Must have 2 approvers in GitHub settings
url: https://myapp.contoso.com
needs: deploy-staging
steps:
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- uses: azure/webapps-deploy@v3
with:
app-name: myUniqueWebApp
package: app.zipGjenbrukbare workflows og composite actions
Unngå å duplisere CI/CD-logikk på tvers av repositories ved å bruke to funksjoner i GitHub Actions. Gjenbrukbare workflows lar Dem definere en workflow i ett repository og kalle den fra workflows i andre repositories ved hjelp av uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. Composite actions samler flere trinn i én action som lagres i et repository, og kan gjenbrukes med uses: myorg/my-actions/deploy@v1. Begge fremmer DRY-prinsipper på tvers av organisasjonens CI/CD-pipelines.
# Call a reusable workflow from another workflow
jobs:
deploy:
uses: myorg/shared-workflows/.github/workflows/deploy-appservice.yml@main
with:
app-name: myUniqueWebApp
slot-name: staging
package-path: dist/
secrets:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}GitHub Actions kontra Azure Pipelines: Når bør De velge hva?
Velg GitHub Actions når: koden ligger på GitHub, teamet foretrekker GitHub-grensesnittet, De ønsker tett integrasjon med GitHub-kontroller av PR-er og kodeskanning, eller De bygger open source-prosjekter (sjenerøst antall gratis minutter). Velg Azure Pipelines når: De trenger integrasjon med Azure Boards, avansert testing med Azure Test Plans, administrasjon av Azure Artifacts-feeds, koden ligger i Azure Repos, eller De trenger kompleks releasehåndtering med flere stadier og porter på tvers av mange miljøer. Begge støtter utrulling til Azure like godt.
GitHub Actions Marketplace
GitHub Actions Marketplace inneholder tusenvis av community- og offisielle actions for vanlige oppgaver. Microsoft publiserer offisielle Azure-actions: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy og mange flere. Lås alltid actions til en bestemt versjonstagg (for eksempel @v3) eller en commit-SHA for å forhindre angrep på leverandørkjeden, der en kompromittert action oppdateres med skadelig kode.
# Pin actions to specific version (recommended)
- uses: actions/checkout@v4 # Pinned to v4 tag
- uses: azure/login@v2 # Pinned to v2
- uses: azure/webapps-deploy@v3 # Pinned to v3
# Extra security: pin to commit SHA
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
# Avoid unpinned 'latest' or branch references
# - uses: some-action@main # UNSAFE - could change at any timeSelvhostede runners for private nettverk
GitHub-hostede runners har bare tilgang til det offentlige internett – de kan ikke nå private Azure-ressurser (SQL-databaser og interne API-er) uten at ressursene eksponeres offentlig. Bruk selvhostede runners på Azure-VM-er i VNet-et Deres for utrullinger til private ressurser. Registrer en runner ved å laste ned GitHub Actions-runneragenten, konfigurere den med URL-en til repositoriet og et registreringstoken, og kjøre den som en tjeneste. Skaler selvhostede runners med Azure Container Apps for elastiske runner-pooler.
# Register a self-hosted runner on an Azure VM
# 1. Download runner (run on the VM)
curl -O -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-linux-x64-2.317.0.tar.gz
mkdir actions-runner && tar xzf ./actions-runner-linux-x64-2.317.0.tar.gz -C actions-runner
cd actions-runner
# 2. Configure (use token from GitHub Settings > Actions > Runners)
./config.sh --url https://github.com/myorg/myrepo --token <REGISTRATION_TOKEN>
# 3. Run as a service
sudo ./svc.sh install && sudo ./svc.sh start
# Use in workflow
# runs-on: self-hostedSjekk forståelsen
Test forståelsen Deres av konseptene i Microsoft Azure Fundamentals (AZ-900) fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen har De lært at GitHub Actions-workflows er YAML-filer i .github/workflows/ som utløses av GitHub-hendelser og kjøres på runners, at OIDC-federerte legitimasjoner muliggjør hemmelighetsfri Azure-autentisering fra GitHub Actions, og at GitHub Environments med beskyttelsesregler legger til godkjenningsporter for produksjonsutrullinger. Dette fullfører Azure DevOps-kurset – neste tema er Azure Monitor og Log Analytics.
Lær deg Azure Fundamentals med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «GitHub Actions i Azure» gratis?
Ja – hele teksten i «GitHub Actions i Azure» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Azure Fundamentals-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Azure Fundamentals inneholder totalt 4 leksjoner.
Hva lærer jeg i «GitHub Actions i Azure»?
Gjenskap CI/CD-arbeidsflyten med GitHub Actions og azure/webapps-deploy-handlingen, og forstå når GitHub Actions bør velges fremfor Azure Pipelines. Du øver på Azure Fundamentals med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Azure Fundamentals?
Ingen tidligere erfaring er nødvendig. Azure Fundamentals på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «GitHub Actions i Azure»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Azure Fundamentals-leksjonen?
Ja. Alle Azure Fundamentals-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Oversikt over Azure DevOps Services
- Bygge en CI-pipeline med Azure Pipelines
- Kontinuerlig distribusjon til Azure
- GitHub Actions i Azure