Cloud & IT Cert Prep · Lekcja

GitHub Actions na platformie Azure

Odtwórz przepływ CI/CD za pomocą GitHub Actions i akcji azure/webapps-deploy oraz dowiedz się, kiedy wybrać GitHub Actions zamiast Azure Pipelines.

Lekcja 4 z 413 kroki

GitHub Actions na platformie Azure to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Czym jest GitHub Actions?

GitHub Actions to wbudowana w GitHub platforma CI/CD i automatyzacji. Przepływy pracy definiuje się w plikach YAML przechowywanych w katalogu .github/workflows/ repozytorium; są one uruchamiane przez zdarzenia GitHub — wypchnięcia zmian, żądania ściągnięcia, wydania i inne. GitHub Actions jest ściśle zintegrowany z ekosystemem GitHub (issues, PR-y, pakiety i skanowanie zabezpieczeń) oraz udostępnia bogaty marketplace akcji społeczności do zadań takich jak kompilowanie, testowanie i wdrażanie na platformę Azure.

Struktura przepływu pracy GitHub Actions

Plik przepływu pracy GitHub Actions ma trzy sekcje najwyższego poziomu. on definiuje zdarzenia wyzwalające. env ustawia globalne zmienne środowiskowe. jobs definiuje jedno lub więcej zadań, z których każde jest uruchamiane na obiekcie runner (hostowanym przez GitHub lub własnym). Każde zadanie ma elementy steps — albo run (skrypt powłoki), albo uses (gotowa akcja). Domyślnie zadania są uruchamiane równolegle; elementu needs należy użyć do utworzenia zależności sekwencyjnych.

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

Uwierzytelnianie platformy Azure z poziomu GitHub Actions

Zalecanym sposobem uwierzytelniania GitHub Actions na platformie Azure jest OpenID Connect (OIDC) — mechanizm ten wydaje krótkotrwałe tokeny bez przechowywania w GitHub długotrwałych wpisów tajnych. Należy skonfigurować poświadczenie tożsamości federacyjnej w rejestracji aplikacji Azure lub tożsamości zarządzanej, nadając jej zaufanie do repozytorium GitHub i jego gałęzi. Proszę użyć akcji azure/login@v2, aby wymienić token OIDC GitHub na token dostępu platformy Azure — wpisy tajne klienta w GitHub Secrets nie są wymagane.

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

Wdrażanie do usługi Azure App Service

Akcja azure/webapps-deploy@v3 wdraża kod lub obraz kontenera do usługi Azure App Service. Obsługuje wdrażanie do slotu, wdrażanie na podstawie pakietu oraz wdrażanie obrazu platformy Docker. Należy połączyć ją z akcją azure/login@v2 w celu uwierzytelniania. Można wskazać slot staging, uruchomić testy dymne, a następnie zamienić sloty za pomocą akcji azure/CLI@v2, uruchamiającej polecenie zamiany slotów — w ten sposób cały wzorzec wdrażania blue-green z Azure Pipelines można odtworzyć w 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

Wdrażanie do usługi Azure Kubernetes Service

Wdrażanie do AKS z poziomu GitHub Actions odbywa się za pomocą akcji azure/k8s-deploy@v5. Akcja ta używa polecenia kubectl apply do wdrażania manifestów, wykonuje podstawianie obrazu (zastępuje znacznik obrazu znacznikiem bieżącej kompilacji) oraz monitoruje kondycję wdrożenia. Akcja azure/aks-set-context@v4 konfiguruje dane uwierzytelniające kubectl, pobierając kubeconfig klastra przy użyciu uwierzytelnionej sesji Azure.

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 }}'

Wpisy tajne i zmienne GitHub

Wrażliwe wartości należy przechowywać w GitHub Secrets — zaszyfrowanych wartościach dostępnych w przepływach pracy jako ${{ secrets.SECRET_NAME }}. Konfigurację niewrażliwą należy umieszczać w GitHub Variables — dostępną jako ${{ vars.VARIABLE_NAME }}. Oba typy można ograniczyć do repozytorium, środowiska lub organizacji. Należy używać środowisk w GitHub Actions, aby dodawać reguły ochrony (wymaganych recenzentów i gałęzi wdrażania), podobnie jak w przypadku środowisk Azure DevOps.

# 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 }}'

Reguły ochrony środowiska

Środowiska GitHub Actions (konfigurowane w obszarze Ustawienia repozytorium → Environments) dodają bramki wdrażania podobne do środowisk Azure DevOps. Można wymagać wymaganych recenzentów, którzy muszą zatwierdzić zadanie przed jego uruchomieniem dla danego środowiska, ograniczyć wdrożenia do określonych gałęzi (tylko main może wdrażać do środowiska Production) oraz dodać czasy oczekiwania opóźniające wdrożenia. Zadania kierowane do chronionego środowiska są wstrzymywane do momentu spełnienia wszystkich reguł ochrony.

# 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

Przepływy pracy wielokrotnego użytku i akcje złożone

Proszę unikać powielania logiki CI/CD w repozytoriach, korzystając z dwóch funkcji GitHub Actions. Przepływy pracy wielokrotnego użytku pozwalają zdefiniować przepływ pracy w jednym repozytorium i wywoływać go z przepływów pracy w innych repozytoriach za pomocą uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. Akcje złożone łączą wiele kroków w jedną akcję przechowywaną w repozytorium i możliwą do ponownego użycia za pomocą uses: myorg/my-actions/deploy@v1. Obie funkcje wspierają zasadę DRY w potokach CI/CD organizacji.

# 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 a Azure Pipelines: kiedy wybrać które rozwiązanie

Proszę wybrać GitHub Actions, gdy kod jest hostowany w GitHub, zespół preferuje interfejs GitHub, potrzebna jest ścisła integracja ze sprawdzaniem PR-ów i skanowaniem kodu GitHub lub tworzone są projekty open source (z dużą liczbą bezpłatnych minut). Proszę wybrać Azure Pipelines, gdy potrzebna jest integracja z Azure Boards, zaawansowane testowanie z Azure Test Plans, zarządzanie źródłami Azure Artifacts, kod znajduje się w Azure Repos albo wymagane jest złożone, wieloetapowe zarządzanie wydaniami z bramkami obejmującymi wiele środowisk. Oba rozwiązania równie dobrze obsługują wdrażanie na platformę Azure.

Marketplace GitHub Actions

Marketplace GitHub Actions zawiera tysiące akcji społeczności i akcji oficjalnych do typowych zadań. Firma Microsoft publikuje oficjalne akcje Azure: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy i wiele innych. Zawsze należy przypinać akcje do określonego znacznika wersji (np. @v3) lub skrótu SHA zatwierdzenia, aby zapobiec atakom na łańcuch dostaw, w których przejęta akcja zostaje zaktualizowana złośliwym kodem.

# 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

Własne runnery w sieciach prywatnych

Runnery hostowane przez GitHub mają dostęp wyłącznie do publicznego Internetu — nie mogą uzyskać dostępu do prywatnych zasobów Azure (baz danych SQL i wewnętrznych interfejsów API) bez publicznego udostępniania tych zasobów. W przypadku wdrożeń do zasobów prywatnych należy używać własnych runnerów na maszynach wirtualnych Azure znajdujących się w sieci VNet. Runnery rejestruje się przez pobranie agenta runnera GitHub Actions, skonfigurowanie go za pomocą adresu URL repozytorium i tokenu rejestracji oraz uruchomienie go jako usługi. Własne runnery można skalować za pomocą Azure Container Apps, tworząc elastyczne pule runnerów.

# 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

Szybki sprawdzian

Proszę sprawdzić swoją znajomość zagadnień Microsoft Azure Fundamentals (AZ-900) omówionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że przepływy pracy GitHub Actions to pliki YAML w katalogu .github/workflows/, uruchamiane przez zdarzenia GitHub i wykonywane na runnerach, federacyjne poświadczenia OIDC umożliwiają uwierzytelnianie na platformie Azure z poziomu GitHub Actions bez wpisów tajnych, a środowiska GitHub z regułami ochrony dodają bramki zatwierdzania do wdrożeń produkcyjnych. To kończy kurs Azure DevOps — w następnej części omówimy Azure Monitor i Log Analytics.

Bezpłatny start

Ucz się Cloud & IT Cert Prep dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
150
Lekcje
600

Często zadawane pytania

Czy lekcja „GitHub Actions na platformie Azure” jest bezpłatna?

Tak — pełny tekst „GitHub Actions na platformie Azure” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „GitHub Actions na platformie Azure”?

Odtwórz przepływ CI/CD za pomocą GitHub Actions i akcji azure/webapps-deploy oraz dowiedz się, kiedy wybrać GitHub Actions zamiast Azure Pipelines. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?

Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „GitHub Actions na platformie Azure”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?

Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Przegląd usług Azure DevOps
  2. Budowanie potoku CI za pomocą Azure Pipelines
  3. Ciągłe wdrażanie na platformie Azure
  4. GitHub Actions na platformie Azure
← Powrót do Cloud & IT Cert Prep