Wdrażanie statycznej witryny internetowej w usłudze Azure Storage przy użyciu przepływu pracy funkcji GitHub Actions
Artykuł
Rozpocznij pracę z funkcją GitHub Actions przy użyciu przepływu pracy, aby wdrożyć statyczną witrynę na koncie usługi Azure Storage. Po skonfigurowaniu przepływu pracy funkcji GitHub Actions będzie można automatycznie wdrożyć witrynę na platformie Azure z usługi GitHub po wprowadzeniu zmian w kodzie witryny.
Uwaga
Jeśli używasz usługi Azure Static Web Apps, nie musisz ręcznie konfigurować przepływu pracy funkcji GitHub Actions.
Usługa Azure Static Web Apps automatycznie tworzy przepływ pracy funkcji GitHub Actions.
Wymagania wstępne
Subskrypcja platformy Azure i konto usługi GitHub.
Często używa się sieci dostarczania zawartości (CDN), aby zmniejszyć opóźnienia dla użytkowników na całym świecie i zmniejszyć liczbę transakcji na koncie magazynu. Wdrażanie zawartości statycznej w usłudze magazynu w chmurze może zmniejszyć potrzebę potencjalnie kosztownego wystąpienia obliczeniowego. Aby uzyskać więcej informacji, zobacz Wzorzec hostingu zawartości statycznej.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
Parametr --json-auth jest dostępny w wersjach >interfejsu wiersza polecenia platformy Azure = 2.51.0. Wersje przed tym użyciem --sdk-auth z ostrzeżeniem o wycofaniu.
W powyższym przykładzie zastąp symbole zastępcze identyfikatorem subskrypcji, nazwą grupy zasobów i nazwą aplikacji. Dane wyjściowe to obiekt JSON z poświadczeniami przypisania roli, które zapewniają dostęp do aplikacji usługi App Service podobnej do poniższej. Skopiuj ten obiekt JSON do późniejszego użycia.
OpenID Połączenie to metoda uwierzytelniania, która używa tokenów krótkotrwałych. Konfigurowanie Połączenie OpenID za pomocą funkcji GitHub Actions jest bardziej złożonym procesem, który oferuje zabezpieczenia ze wzmocnionymi zabezpieczeniami.
To polecenie zwróci kod JSON z elementem , który jest twoim client-idelementem appId . Element objectId jest APPLICATION-OBJECT-ID używany do tworzenia poświadczeń federacyjnych przy użyciu wywołań interfejsu API programu Graph. Zapisz wartość do użycia jako AZURE_CLIENT_ID wpis tajny usługi GitHub później.
Tworzenie jednostki usługi. Zastąp element $appID identyfikatorem appId z danych wyjściowych JSON. To polecenie generuje dane wyjściowe JSON z inną objectId wartością, która będzie używana w następnym kroku. objectId Nowy element to assignee-object-id.
To polecenie generuje dane wyjściowe JSON z inną objectId wartością i będzie używane w następnym kroku. objectId Nowy element to assignee-object-id.
Skopiuj element appOwnerTenantId , aby użyć go jako wpisu tajnego usługi GitHub do AZURE_TENANT_ID późniejszego użycia.
az ad sp create --id $appId
Utwórz nowe przypisanie roli według subskrypcji i obiektu. Domyślnie przypisanie roli będzie powiązane z domyślną subskrypcją. Zastąp $subscriptionId ciąg identyfikatorem subskrypcji, $resourceGroupName nazwą grupy zasobów i $assigneeObjectId wygenerowaną assignee-object-id wartością (nowo utworzony identyfikator obiektu jednostki usługi).
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Uruchom następujące polecenie, aby utworzyć nowe poświadczenie tożsamości federacyjnej dla aplikacji Firmy Microsoft Entra.
Zastąp element APPLICATION-OBJECT-IDobjectId (wygenerowany podczas tworzenia aplikacji) dla aplikacji Firmy Microsoft Entra.
Ustaw wartość dla elementu , CREDENTIAL-NAME aby odwoływać się później.
Ustaw wartość subject. Wartość tej wartości jest definiowana przez usługę GitHub w zależności od przepływu pracy:
Zadania w środowisku funkcji GitHub Actions: repo:< Organization/Repository >:environment:< Name >
W przypadku zadań, które nie są powiązane ze środowiskiem, dołącz ścieżkę ref dla gałęzi/tagu na podstawie ścieżki ref używanej do wyzwalania przepływu pracy: repo:< Organization/Repository >:ref:< ref path>. Na przykład: repo:n-username/ node_express:ref:refs/heads/my-branch lub repo:n-username/ node_express:ref:refs/tags/my-tag.
W przypadku przepływów pracy wyzwalanych przez zdarzenie żądania ściągnięcia: repo:< Organization/Repository >:pull_request.
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:octo-org/octo-repo:environment:Production",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
Wybierz pozycję Wpisy tajne zabezpieczeń > i zmienne > Akcje.
Wybierz pozycję Nowy wpis tajny repozytorium.
Wklej całe dane wyjściowe JSON z polecenia interfejsu wiersza polecenia platformy Azure do pola wartości wpisu tajnego. Nadaj wpisowi tajnym nazwę AZURE_CREDENTIALS.
Wybierz przycisk Add secret (Dodaj wpis tajny).
Musisz podać identyfikator klienta aplikacji, identyfikator dzierżawy i identyfikator subskrypcji do akcji logowania. Te wartości można podać bezpośrednio w przepływie pracy lub przechowywać w wpisach tajnych usługi GitHub i odwoływać się do nich w przepływie pracy. Zapisanie wartości jako wpisów tajnych usługi GitHub jest bezpieczniejszą opcją.
Wybierz pozycję Wpisy tajne zabezpieczeń > i zmienne > Akcje.
Wybierz pozycję Nowy wpis tajny repozytorium.
Utwórz wpisy tajne dla , AZURE_CLIENT_IDAZURE_TENANT_IDi AZURE_SUBSCRIPTION_ID. Użyj tych wartości z aplikacji Microsoft Entra dla wpisów tajnych usługi GitHub:
Wpis tajny usługi GitHub
Aplikacja Microsoft Entra
AZURE_CLIENT_ID
Identyfikator aplikacji (klient)
AZURE_TENANT_ID
Identyfikator katalogu (dzierżawcy)
AZURE_SUBSCRIPTION_ID
Identyfikator subskrypcji
Zapisz każdy wpis tajny, wybierając pozycję Dodaj wpis tajny.
Wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.
Usuń wszystko po on: sekcji pliku przepływu pracy. Na przykład pozostały przepływ pracy może wyglądać następująco.
name: CI
on:
push:
branches: [ main ]
Zmień nazwę przepływu pracy Blob storage website CI i dodaj akcje wyewidencjonowania i logowania. Te akcje wyewidencjonują kod witryny i uwierzytelniają się na platformie Azure przy użyciu utworzonego wcześniej wpisu tajnego AZURE_CREDENTIALS usługi GitHub.
name: Blob storage website CI
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Użyj akcji interfejsu wiersza polecenia platformy Azure, aby przekazać kod do magazynu obiektów blob i przeczyścić punkt końcowy usługi CDN. W polu az storage blob upload-batchzastąp symbol zastępczy nazwą konta magazynu. Skrypt zostanie przekazany do kontenera $web . W polu az cdn endpoint purgezastąp symbole zastępcze nazwą profilu usługi CDN, nazwą punktu końcowego usługi CDN i grupą zasobów. Aby przyspieszyć przeczyszczanie sieci CDN, możesz dodać --no-wait opcję do az cdn endpoint purge. Aby zwiększyć bezpieczeństwo, możesz również dodać --account-key opcję przy użyciu klucza konta magazynu.
Ukończ przepływ pracy, dodając akcję w celu wylogowania się z platformy Azure. Oto ukończony przepływ pracy. Plik zostanie wyświetlony w .github/workflows folderze repozytorium.
Wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.
Usuń wszystko po on: sekcji pliku przepływu pracy. Na przykład pozostały przepływ pracy może wyglądać następująco.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
Dodaj sekcję uprawnień.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
Dodaj akcje wyewidencjonowania i logowania. Te akcje wyewidencjonują kod witryny i uwierzytelniają się na platformie Azure przy użyciu utworzonych wcześniej wpisów tajnych usługi GitHub.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Użyj akcji interfejsu wiersza polecenia platformy Azure, aby przekazać kod do magazynu obiektów blob i przeczyścić punkt końcowy usługi CDN. W polu az storage blob upload-batchzastąp symbol zastępczy nazwą konta magazynu. Skrypt zostanie przekazany do kontenera $web . W polu az cdn endpoint purgezastąp symbole zastępcze nazwą profilu usługi CDN, nazwą punktu końcowego usługi CDN i grupą zasobów. Aby przyspieszyć przeczyszczanie sieci CDN, możesz dodać --no-wait opcję do az cdn endpoint purge. Aby zwiększyć bezpieczeństwo, możesz również dodać --account-key opcję przy użyciu klucza konta magazynu.
Ukończ przepływ pracy, dodając akcję w celu wylogowania się z platformy Azure. Oto ukończony przepływ pracy. Plik zostanie wyświetlony w .github/workflows folderze repozytorium.