GitHub Actions-werkstroom gebruiken om uw statische website te implementeren in Azure Storage
Artikel
Ga aan de slag met GitHub Actions met behulp van een werkstroom om een statische site te implementeren in een Azure-opslagaccount. Zodra u een GitHub Actions-werkstroom hebt ingesteld, kunt u uw site automatisch vanuit GitHub implementeren in Azure wanneer u wijzigingen aanbrengt in de code van uw site.
Notitie
Als u Azure Static Web Apps gebruikt, hoeft u geen werkstroom voor GitHub Actions handmatig in te stellen.
Azure Static Web Apps maakt automatisch een GitHub Actions-werkstroom voor u.
Het is gebruikelijk om een CDN (Content Delivery Network) te gebruiken om de latentie voor uw gebruikers over de hele wereld te verminderen en het aantal transacties naar uw opslagaccount te verminderen. Het implementeren van statische inhoud in een cloudopslagservice kan de noodzaak voor mogelijk dure rekeninstanties verminderen. Zie het patroon Static Content Hosting voor meer informatie.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
De parameter --json-auth is beschikbaar in Azure CLI-versies >= 2.51.0. Versies vóór dit gebruik --sdk-auth met een afschaffingswaarschuwing.
Vervang in het bovenstaande voorbeeld de tijdelijke aanduidingen door uw abonnements-id, resourcegroepnaam en app-naam. De uitvoer is een JSON-object met de roltoewijzingsreferenties die toegang bieden tot uw App Service-app, vergelijkbaar met hieronder. Kopieer dit JSON-object voor later gebruik.
OpenID Verbinding maken is een verificatiemethode die gebruikmaakt van kortdurende tokens. Het instellen van OpenID Verbinding maken met GitHub Actions is een complexer proces dat beveiligde beveiliging biedt.
Met deze opdracht wordt JSON uitgevoerd met een appId JSON die uw client-id. Dit objectId wordt APPLICATION-OBJECT-ID gebruikt voor het maken van federatieve referenties met Graph API-aanroepen. Sla de waarde op die u later wilt gebruiken als het AZURE_CLIENT_ID GitHub-geheim.
Een service-principal maken. Vervang de door de $appID appId uit uw JSON-uitvoer. Met deze opdracht wordt JSON-uitvoer gegenereerd met een andere objectId uitvoer die in de volgende stap wordt gebruikt. Het nieuwe objectId is de assignee-object-id.
Met deze opdracht wordt JSON-uitvoer gegenereerd met een andere objectId en wordt in de volgende stap gebruikt. Het nieuwe objectId is de assignee-object-id.
Kopieer het appOwnerTenantId te gebruiken als gitHub-geheim voor AZURE_TENANT_ID later gebruik.
az ad sp create --id $appId
Maak een nieuwe roltoewijzing per abonnement en object. De roltoewijzing wordt standaard gekoppeld aan uw standaardabonnement. Vervang $subscriptionId door uw abonnements-id, $resourceGroupName door de naam van de resourcegroep en $assigneeObjectId door gegenereerd assignee-object-id (de zojuist gemaakte object-id van de service-principal).
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Voer de volgende opdracht uit om een nieuwe federatieve identiteitsreferentie te maken voor uw Microsoft Entra-toepassing.
Vervang door APPLICATION-OBJECT-ID de objectId (gegenereerd tijdens het maken van een app) voor uw Microsoft Entra-toepassing.
Stel een waarde in om CREDENTIAL-NAME later te verwijzen.
Stel de subject in. De waarde hiervan wordt gedefinieerd door GitHub, afhankelijk van uw werkstroom:
Taken in uw GitHub Actions-omgeving: repo:< Organization/Repository >:environment:< Name >
Voor taken die niet zijn gekoppeld aan een omgeving, moet u het referentiepad voor vertakkingen/tags opnemen op basis van het referentiepad dat wordt gebruikt voor het activeren van de werkstroom: repo:< Organization/Repository >:ref:< ref path>. Bijvoorbeeld repo:n-username/ node_express:ref:refs/heads/my-branch of repo:n-username/ node_express:ref:refs/tags/my-tag.
Voor werkstromen die door een pull-aanvraaggebeurtenis zijn geactiveerd: 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"
]
}
Selecteer Acties voor beveiligingsgeheimen > en variabelen>.
Selecteer Nieuw opslagplaatsgeheim.
Plak de volledige JSON-uitvoer van de Azure CLI-opdracht in het waardeveld van het geheim. Geef het geheim de naam AZURE_CREDENTIALS.
Selecteer Geheim toevoegen.
U moet de client-id, tenant-id en abonnements-id van uw toepassing opgeven voor de aanmeldingsactie. Deze waarden kunnen rechtstreeks in de werkstroom worden opgegeven of kunnen worden opgeslagen in GitHub-geheimen en waarnaar wordt verwezen in uw werkstroom. Het opslaan van de waarden als GitHub-geheimen is de veiligere optie.
Selecteer Acties voor beveiligingsgeheimen > en variabelen>.
Selecteer Nieuw opslagplaatsgeheim.
Geheimen maken voor AZURE_CLIENT_ID, AZURE_TENANT_IDen AZURE_SUBSCRIPTION_ID. Gebruik deze waarden uit uw Microsoft Entra-toepassing voor uw GitHub-geheimen:
GitHub-geheim
Microsoft Entra-toepassing
AZURE_CLIENT_ID
Client-id van toepassing
AZURE_TENANT_ID
Id van directory (tenant)
AZURE_SUBSCRIPTION_ID
Abonnements-id
Sla elk geheim op door Geheim toevoegen te selecteren.
Verwijder alles na de sectie on: van uw werkstroombestand. Uw resterende werkstroom kan er bijvoorbeeld als volgt uitzien.
name: CI
on:
push:
branches: [ main ]
Wijzig de naam van uw werkstroom Blob storage website CI en voeg de acties voor uitchecken en aanmelden toe. Met deze acties wordt uw sitecode uitgecheckt en geverifieerd met Azure met behulp van het AZURE_CREDENTIALS GitHub-geheim dat u eerder hebt gemaakt.
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 }}
Gebruik de Azure CLI-actie om uw code te uploaden naar blobopslag en om uw CDN-eindpunt te verwijderen. Vervang az storage blob upload-batchde tijdelijke aanduiding door de naam van uw opslagaccount. Het script wordt geüpload naar de $web container. Vervang az cdn endpoint purgede tijdelijke aanduidingen door de naam van uw CDN-profiel, de naam van het CDN-eindpunt en de resourcegroep. Als u uw CDN-opschoning wilt versnellen, kunt u de --no-wait optie toevoegen aan az cdn endpoint purge. Als u de beveiliging wilt verbeteren, kunt u ook de optie toevoegen met de --account-key sleutel van uw opslagaccount.
Voltooi uw werkstroom door een actie toe te voegen aan de afmelding van Azure. Dit is de voltooide werkstroom. Het bestand wordt weergegeven in de map .github/workflows van uw opslagplaats.
Verwijder alles na de sectie on: van uw werkstroombestand. Uw resterende werkstroom kan er bijvoorbeeld als volgt uitzien.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
Voeg een sectie machtigingen toe.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
Voeg kassa- en aanmeldingsacties toe. Met deze acties wordt uw sitecode uitgecheckt en geverifieerd met Azure met behulp van de GitHub-geheimen die u eerder hebt gemaakt.
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 }}
Gebruik de Azure CLI-actie om uw code te uploaden naar blobopslag en om uw CDN-eindpunt te verwijderen. Vervang az storage blob upload-batchde tijdelijke aanduiding door de naam van uw opslagaccount. Het script wordt geüpload naar de $web container. Vervang az cdn endpoint purgede tijdelijke aanduidingen door de naam van uw CDN-profiel, de naam van het CDN-eindpunt en de resourcegroep. Als u uw CDN-opschoning wilt versnellen, kunt u de --no-wait optie toevoegen aan az cdn endpoint purge. Als u de beveiliging wilt verbeteren, kunt u ook de optie toevoegen met de --account-key sleutel van uw opslagaccount.
Voltooi uw werkstroom door een actie toe te voegen aan de afmelding van Azure. Dit is de voltooide werkstroom. Het bestand wordt weergegeven in de map .github/workflows van uw opslagplaats.
Open het eerste resultaat om gedetailleerde logboeken van de uitvoering van de werkstroom weer te geven.
Resources opschonen
Wanneer uw statische website en GitHub-opslagplaats niet meer nodig zijn, schoont u de resources op die u hebt geïmplementeerd door de resourcegroep en uw GitHub-opslagplaats te verwijderen.