Cloud & IT Cert Prep · Lektion

GitHub Actions i Azure

Genskab CI/CD-workflowet med GitHub Actions og handlingen azure/webapps-deploy, og forstå, hvornår GitHub Actions bør vælges frem for Azure Pipelines.

Lektion 4 af 413 trin

GitHub Actions i Azure er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Hvad er GitHub Actions?

GitHub Actions er GitHubs indbyggede platform til CI/CD og automatisering. Workflows defineres i YAML-filer, der gemmes i dit repositories .github/workflows/-bibliotek, og udløses af GitHub-hændelser — pushes, pull requests, udgivelser og meget mere. GitHub Actions er tæt integreret med GitHub-økosystemet (issues, PR'er, pakker og sikkerhedsscanning) og giver adgang til en omfattende markedsplads med community-actions til opgaver som opbygning, test og udrulning til Azure.

Strukturen i et GitHub Actions-workflow

En workflow-fil til GitHub Actions har tre sektioner på øverste niveau. on definerer udløsende hændelser. env angiver globale miljøvariabler. jobs definerer et eller flere job, som hver især kører på en runner (hostet af GitHub eller selvhostet). Hvert job har trin — enten run (shell-script) eller uses (en forudbygget action). Job kører som standard parallelt; brug needs til at oprette sekventielle afhængigheder.

# .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 test

Godkendelse af Azure fra GitHub Actions

Den anbefalede måde at godkende GitHub Actions til Azure på er OpenID Connect (OIDC) — det udsteder kortlivede tokens uden at gemme langlivede hemmeligheder i GitHub. Konfigurér en federeret identitetslegitimationsoplysning på en Azure App Registration eller Managed Identity, og giv den tillid til dit GitHub-repository og din branch. Brug azure/login@v2-actionen til at udveksle GitHub OIDC-tokenet med et Azure-adgangstoken — der kræves ingen client secrets 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 }}

Udrulning til Azure App Service

azure/webapps-deploy@v3-actionen udruller kode eller et containeraftryk til Azure App Service. Den håndterer slotudrulning, pakke-baseret udrulning og udrulning af Docker-aftryk. Kombinér den med azure/login@v2 til godkendelse. Du kan målrette et staging-slot, køre smoke tests og derefter skifte slot med azure/CLI@v2-actionen, der kører kommandoen til slotudskiftning — og dermed genskabe Azure Pipelines-mønstret for blue-green-udrulning helt 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.zip

Udrulning til Azure Kubernetes Service

Udrul til AKS fra GitHub Actions ved hjælp af azure/k8s-deploy@v5-actionen. Denne action bruger kubectl apply til at udrulle manifests, udfører udskiftning af aftryk (erstatter aftrykkets tag med tagget fra den aktuelle build) og overvåger udrulningens tilstand. azure/aks-set-context@v4-actionen konfigurerer kubectl-legitimationsoplysninger ved at hente klyngens kubeconfig ved hjælp af den godkendte Azure-session.

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

Gem følsomme værdier i GitHub Secrets — krypterede værdier, der er tilgængelige som ${{ secrets.SECRET_NAME }} i workflows. Ikke-følsom konfiguration placeres i GitHub Variables — tilgængelig som ${{ vars.VARIABLE_NAME }}. Begge dele kan begrænses til et repository, et miljø eller en organisation. Brug environments i GitHub Actions til at tilføje beskyttelsesregler (påkrævede godkendere og udrulningsbranches), svarende til 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

GitHub Actions Environments (konfigureret under repositoryets Settings → Environments) tilføjer udrulningskontroller, der minder om Azure DevOps-miljøer. Du kan kræve påkrævede godkendere, som skal godkende, før et job, der er målrettet miljøet, kører, begrænse udrulninger til bestemte branches (kun main kan udrulle til Production) og tilføje ventetimere for at forsinke udrulninger. Job, der er målrettet et beskyttet miljø, sættes på pause, indtil alle beskyttelsesregler er opfyldt.

# 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.zip

Genanvendelige workflows og composite actions

Undgå at duplikere CI/CD-logik på tværs af repositories ved at bruge to funktioner i GitHub Actions. Genanvendelige workflows lader dig definere et workflow i ét repository og kalde det fra workflows i andre repositories ved hjælp af uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. Composite actions samler flere trin i én action, der gemmes i et repository og kan genbruges med uses: myorg/my-actions/deploy@v1. Begge dele fremmer DRY-principper på tværs af organisationens 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 eller Azure Pipelines: Hvornår skal du vælge hvad?

Vælg GitHub Actions, når: din kode er hostet på GitHub, dit team foretrækker GitHub-brugerfladen, du ønsker tæt integration med GitHub PR-kontroller og kodescanning, eller du bygger open source-projekter (mange gratis minutter). Vælg Azure Pipelines, når: du har brug for integration med Azure Boards, avanceret test med Azure Test Plans, administration af Azure Artifacts-feeds, koden ligger i Azure Repos, eller du har brug for kompleks udgivelsesstyring i flere stadier med kontroller på tværs af mange miljøer. Begge understøtter udrulning til Azure lige godt.

GitHub Actions Marketplace

GitHub Actions Marketplace indeholder tusindvis af community-actions og officielle actions til almindelige opgaver. Microsoft udgiver officielle Azure-actions: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy og mange flere. Fastlås altid actions til et bestemt versionstag (f.eks. @v3) eller en commit-SHA for at forhindre angreb på softwareforsyningskæden, hvor en kompromitteret action opdateres 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 time

Selvhostede runners til private netværk

GitHub-hostede runners har kun adgang til det offentlige internet — de kan ikke nå private Azure-ressourcer (SQL-databaser og interne API'er) uden at eksponere ressourcerne offentligt. Brug selvhostede runners på Azure-VM'er i dit VNet til udrulninger til private ressourcer. Registrér en runner ved at downloade GitHub Actions-runneragenten, konfigurere den med URL'en til dit repository og et registreringstoken og køre den som en tjeneste. Skaler selvhostede runners med Azure Container Apps for at få elastiske runner-pools.

# 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-hosted

Hurtigt tjek

Test din forståelse af begreberne fra Microsoft Azure Fundamentals (AZ-900) i denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at workflows i GitHub Actions er YAML-filer i .github/workflows/, som udløses af GitHub-hændelser og køres på runners, at OIDC-federerede legitimationsoplysninger muliggør godkendelse til Azure fra GitHub Actions uden hemmeligheder, og at GitHub Environments med beskyttelsesregler tilføjer godkendelseskontroller til produktionsudrulninger. Dette afslutter kurset i Azure DevOps — næste emne er Azure Monitor og Log Analytics.

Gratis at komme i gang

Lær Cloud & IT Cert Prep med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
150
Lektioner
600

Ofte stillede spørgsmål

Er lektionen “GitHub Actions i Azure” gratis?

Ja — hele teksten til “GitHub Actions i Azure” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “GitHub Actions i Azure”?

Genskab CI/CD-workflowet med GitHub Actions og handlingen azure/webapps-deploy, og forstå, hvornår GitHub Actions bør vælges frem for Azure Pipelines. Du øver dig i Cloud & IT Cert Prep med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cloud & IT Cert Prep?

Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “GitHub Actions i Azure”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cloud & IT Cert Prep-lektion?

Ja. Alle Cloud & IT Cert Prep-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oversigt over Azure DevOps Services
  2. Opbygning af en CI-pipeline med Azure Pipelines
  3. Continuous deployment til Azure
  4. GitHub Actions i Azure
← Tilbage til Cloud & IT Cert Prep