Använda GitHub Actions-arbetsflöde för att distribuera din statiska webbplats i Azure Storage
Artikel
Kom igång med GitHub Actions med hjälp av ett arbetsflöde för att distribuera en statisk plats till ett Azure Storage-konto. När du har konfigurerat ett GitHub Actions-arbetsflöde kan du automatiskt distribuera din webbplats till Azure från GitHub när du gör ändringar i webbplatsens kod.
Kommentar
Om du använder Azure Static Web Apps behöver du inte konfigurera ett GitHub Actions-arbetsflöde manuellt.
Azure Static Web Apps skapar automatiskt ett GitHub Actions-arbetsflöde åt dig.
En fungerande statisk webbplats som finns i Azure Storage. Lär dig hur du är värd för en statisk webbplats i Azure Storage. Om du vill följa det här exemplet bör du även distribuera Azure CDN.
Kommentar
Det är vanligt att använda ett nätverk för innehållsleverans (CDN) för att minska svarstiden för dina användare runt om i världen och minska antalet transaktioner till ditt lagringskonto. Distribution av statiskt innehåll till en molnbaserad lagringstjänst kan minska behovet av potentiellt dyra beräkningsinstanser. Mer information finns i mönstret Värd för statiskt innehåll.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
Parametern --json-auth är tillgänglig i Azure CLI-versioner >= 2.51.0. Versioner före den här användningen --sdk-auth med en utfasningsvarning.
I exemplet ovan ersätter du platshållarna med ditt prenumerations-ID, resursgruppsnamn och appnamn. Utdata är ett JSON-objekt med autentiseringsuppgifterna för rolltilldelning som ger åtkomst till din App Service-app på liknande sätt som nedan. Kopiera det här JSON-objektet för senare.
OpenID Anslut är en autentiseringsmetod som använder kortlivade token. Att konfigurera OpenID-Anslut med GitHub Actions är en mer komplex process som erbjuder förstärkt säkerhet.
Det här kommandot matar ut JSON med en appId som är din client-id. is objectIdAPPLICATION-OBJECT-ID och används för att skapa federerade autentiseringsuppgifter med Graph API-anrop. Spara värdet som ska användas som AZURE_CLIENT_ID GitHub-hemlighet senare.
Skapa ett huvudnamn för tjänsten. $appID Ersätt med appId från dina JSON-utdata. Det här kommandot genererar JSON-utdata med en annan objectId som används i nästa steg. Den nya objectId är assignee-object-id.
Det här kommandot genererar JSON-utdata med en annan objectId och används i nästa steg. Den nya objectId är assignee-object-id.
Kopiera som appOwnerTenantId ska användas som en GitHub-hemlighet för AZURE_TENANT_ID senare.
az ad sp create --id $appId
Skapa en ny rolltilldelning efter prenumeration och objekt. Som standard är rolltilldelningen kopplad till din standardprenumeration. Ersätt $subscriptionId med ditt prenumerations-ID, $resourceGroupName med resursgruppens namn och $assigneeObjectId med genererat assignee-object-id (det nyligen skapade objekt-ID:t för tjänstens huvudnamn).
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Ersätt APPLICATION-OBJECT-ID med objectId (genereras när du skapar appen) för ditt Microsoft Entra-program.
Ange ett värde som CREDENTIAL-NAME ska refereras senare.
subjectAnge . Värdet för detta definieras av GitHub beroende på ditt arbetsflöde:
Jobb i din GitHub Actions-miljö: repo:< Organization/Repository >:environment:< Name >
För Jobb som inte är knutna till en miljö inkluderar du referenssökvägen för gren/tagg baserat på referenssökvägen som används för att utlösa arbetsflödet: repo:< Organization/Repository >:ref:< ref path>. Exempel: repo:n-username/ node_express:ref:refs/heads/my-branch eller repo:n-username/ node_express:ref:refs/tags/my-tag.
För arbetsflöden som utlöses av en pull-begärandehändelse: 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"
]
}
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Klistra in hela JSON-utdata från Azure CLI-kommandot i hemlighetens värdefält. Ge hemligheten namnet AZURE_CREDENTIALS.
Välj Add secret (Lägg till hemlighet).
Du måste ange programmets klient-ID, klient-ID och prenumerations-IDför inloggningsåtgärden. Dessa värden kan antingen anges direkt i arbetsflödet eller lagras i GitHub-hemligheter och refereras till i arbetsflödet. Att spara värdena som GitHub-hemligheter är det säkrare alternativet.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Skapa hemligheter för AZURE_CLIENT_ID, AZURE_TENANT_IDoch AZURE_SUBSCRIPTION_ID. Använd dessa värden från ditt Microsoft Entra-program för dina GitHub-hemligheter:
GitHub-hemlighet
Microsoft Entra-program
AZURE_CLIENT_ID
App-ID (klient-ID)
AZURE_TENANT_ID
Katalog-ID (klientorganisation)
AZURE_SUBSCRIPTION_ID
Prenumerations-ID:t
Spara varje hemlighet genom att välja Lägg till hemlighet.
Ta bort allt efter avsnittet i on: arbetsflödesfilen. Ditt återstående arbetsflöde kan till exempel se ut så här.
name: CI
on:
push:
branches: [ main ]
Byt namn på arbetsflödet Blob storage website CI och lägg till utchecknings- och inloggningsåtgärderna. Dessa åtgärder checkar ut din webbplatskod och autentiserar med Azure med hjälp av GitHub-hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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 }}
Använd Azure CLI-åtgärden för att ladda upp koden till bloblagringen och rensa CDN-slutpunkten. För az storage blob upload-batchersätter du platshållaren med namnet på ditt lagringskonto. Skriptet laddas upp till containern $web . För az cdn endpoint purgeersätter du platshållarna med ditt CDN-profilnamn, CDN-slutpunktsnamn och resursgrupp. Om du vill påskynda CDN-rensningen kan du lägga till alternativet --no-wait i az cdn endpoint purge. För att förbättra säkerheten kan du också lägga till --account-key alternativet med din lagringskontonyckel.
Slutför arbetsflödet genom att lägga till en åtgärd för utloggning av Azure. Här är det slutförda arbetsflödet. Filen visas i mappen på .github/workflows lagringsplatsen.
Ta bort allt efter avsnittet i on: arbetsflödesfilen. Ditt återstående arbetsflöde kan till exempel se ut så här.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
Lägg till ett behörighetsavsnitt.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
Lägg till utchecknings- och inloggningsåtgärder. Dessa åtgärder checkar ut din webbplatskod och autentiserar med Azure med hjälp av GitHub-hemligheterna som du skapade tidigare.
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 }}
Använd Azure CLI-åtgärden för att ladda upp koden till bloblagringen och rensa CDN-slutpunkten. För az storage blob upload-batchersätter du platshållaren med namnet på ditt lagringskonto. Skriptet laddas upp till containern $web . För az cdn endpoint purgeersätter du platshållarna med ditt CDN-profilnamn, CDN-slutpunktsnamn och resursgrupp. Om du vill påskynda CDN-rensningen kan du lägga till alternativet --no-wait i az cdn endpoint purge. För att förbättra säkerheten kan du också lägga till --account-key alternativet med din lagringskontonyckel.
Slutför arbetsflödet genom att lägga till en åtgärd för utloggning av Azure. Här är det slutförda arbetsflödet. Filen visas i mappen på .github/workflows lagringsplatsen.
Öppna det första resultatet om du vill se detaljerade loggar för arbetsflödets körning.
Rensa resurser
När din statiska webbplats och GitHub-lagringsplats inte längre behövs rensar du de resurser som du har distribuerat genom att ta bort resursgruppen och din GitHub-lagringsplats.