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.
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 testUwierzytelnianie 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.zipWdraż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.zipPrzepł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 timeWł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-hostedSzybki 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.
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
- Przegląd usług Azure DevOps
- Budowanie potoku CI za pomocą Azure Pipelines
- Ciągłe wdrażanie na platformie Azure
- GitHub Actions na platformie Azure