Självstudie: Distribuera miljöer i CI/CD med hjälp av GitHub- och Azure Deployment Environments
Artikel
I den här självstudien får du lära dig hur du integrerar Azure Deployment Environments i din CI/CD-pipeline. Du kan använda valfri GitOps-provider som stöder CI/CD, till exempel GitHub Actions, Azure Arc, GitLab eller Jenkins.
Kontinuerlig integrering och kontinuerlig leverans (CI/CD) är en metod för programvaruutveckling som hjälper team att automatisera processen med att skapa, testa och distribuera programvaruändringar. MED CI/CD kan du släppa programändringar oftare och med större förtroende.
Du använder ett arbetsflöde som har tre grenar: main, dev och test.
Huvudgrenen betraktas alltid som produktion.
Du skapar funktionsgrenar från huvudgrenen.
Du skapar pull-begäranden för att sammanfoga funktionsgrenar till main.
Det här arbetsflödet är ett litet exempel i den här självstudien. Verkliga arbetsflöden kan vara mer komplexa.
I det här avsnittet skapar du ett Utvecklingscenter för Azure Deployment Environments och ett projekt med tre miljötyper: Dev, Test och Prod.
Miljötypen Prod innehåller den enskilda produktionsmiljön.
En ny miljö skapas i Dev för varje funktionsgren.
En ny miljö skapas i Test för varje pull-begäran.
1.1 Konfigurera Azure CLI
Börja genom att logga in på Azure. Kör följande kommando och följ anvisningarna för att slutföra autentiseringsprocessen.
Azure CLI
az login
Installera sedan Azure devcenter-tillägget för Azure CLI.
Azure CLI
az extension add --name devcenter --upgrade
Nu när det aktuella tillägget har installerats registrerar du Microsoft.DevCenter namnområdet.
Azure CLI
az provider register --namespace Microsoft.DevCenter
Tips
I den här självstudien sparar du flera värden som miljövariabler som ska användas senare. Du kanske också vill registrera det här värdet någon annanstans för att säkerställa att de är tillgängliga när det behövs.
Hämta användarens ID och ange det till en miljövariabel för senare:
Azure CLI
MY_AZURE_ID=$(az ad signed-in-user show --query id -o tsv)
Hämta prenumerations-ID:t för din aktuella prenumeration.
Azure CLI
AZURE_SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Hämta klientorganisations-ID:t för din aktuella klientorganisation.
Azure CLI
AZURE_TENANT_ID=$(az account show --query tenantId --output tsv)
Du måste använda ett globalt unikt nyckelvalvnamn. Annars kan du få följande fel: Code: VaultAlreadyExists Message: The vault name 'mykeyvaultname' is already in use. Vault names are globally unique so it is possible that the name is already taken.
1.2 Skapa ett utvecklingscenter
Ett utvecklingscenter är en samling projekt och miljöer som har liknande inställningar. Dev Centers ger åtkomst till en katalog med mallar och artefakter som kan användas för att skapa miljöer. Dev centers ger också ett sätt att hantera åtkomst till miljöer och projekt.
Skapa en resursgrupp.
Azure CLI
az group create \
--name$AZURE_RESOURCE_GROUP \
--location$LOCATION
1.3 Tilldela rollen dev center-identitetsägare i prenumerationen
Ett utvecklingscenter behöver behörigheter för att tilldela roller för prenumerationer som är associerade med miljötyper.
För att minska onödig komplexitet använder du i den här självstudien en enda prenumeration för utvecklingscentret och alla miljötyper. I praktiken skulle dev center- och måldistributionsprenumerationer sannolikt vara separata prenumerationer med olika principer som tillämpas.
Azure CLI
az role assignment create \
--scope /subscriptions/$AZURE_SUBSCRIPTION_ID \
--role Owner \
--assignee-object-id$AZURE_DEVCENTER_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
1.4 Skapa miljötyperna
På utvecklingscenternivå definierar miljötyper de miljöer som utvecklingsteam kan skapa, till exempel utveckling, testning, sandbox-miljö, förproduktion eller produktion.
Skapa tre nya miljötyper: Dev, Test och Prod.
Azure CLI
az devcenter admin environment-type create \
--name Dev \
--resource-group$AZURE_RESOURCE_GROUP \
--dev-center$AZURE_DEVCENTER
Azure CLI
az devcenter admin environment-type create \
--name Test \
--resource-group$AZURE_RESOURCE_GROUP \
--dev-center$AZURE_DEVCENTER
Föregående kommando matar ut JSON. Spara värdet id som en miljövariabel som ska användas senare.
Azure CLI
AZURE_PROJECT_ID=<id>
Tilldela dig själv rollen DevCenter-projektadministratör i projektet.
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID" \
--role"DevCenter Project Admin" \
--assignee-object-id$MY_AZURE_ID \
--assignee-principal-type User
1.6 Skapa projektmiljötyper
På projektnivå anger plattformstekniker vilka miljötyper som är lämpliga för utvecklingsteamet.
Skapa en ny projektmiljötyp för var och en av de miljötyper som du skapade i utvecklingscentret.
I det här avsnittet skapar du ett nytt nyckelvalv. Du använder det här nyckelvalvet senare i självstudien för att spara en personlig åtkomsttoken från GitHub.
id Spara återigen från föregående kommandos JSON-utdata som en miljövariabel.
Azure CLI
AZURE_KEYVAULT_ID=<id>
Ge dig själv rollen Key Vault-administratör i det nya nyckelvalvet.
Azure CLI
az role assignment create \
--scope$AZURE_KEYVAULT_ID \
--role"Key Vault Administrator" \
--assignee-object-id$MY_AZURE_ID \
--assignee-principal-type User
Tilldela dev center-identiteten rollen Key Vault Secrets User.
Azure CLI
az role assignment create \
--scope$AZURE_KEYVAULT_ID \
--role"Key Vault Secrets User" \
--assignee-object-id$AZURE_DEVCENTER_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
3. Skapa och konfigurera en GitHub-lagringsplats
I det här avsnittet skapar du en ny GitHub-lagringsplats för att lagra en katalog. Azure Deployment Environments stöder både GitHub- och Azure DevOps-lagringsplatser. I den här självstudien använder du GitHub.
3.1 Skapa en ny GitHub-lagringsplats
I det här steget skapar du en ny lagringsplats i ditt GitHub-konto som har en fördefinierad katalogstruktur, grenar och filer. Dessa objekt genereras från en exempelmalllagringsplats.
Använd den här länken för att generera en ny GitHub-lagringsplats från exempelmallen.
Om du inte har ett betalt GitHub-konto anger du lagringsplatsen till Offentlig.
Välj Create repository from template (Skapa lagringsplats från mall).
Observera att åtgärden Skapa miljö misslyckas på fliken Åtgärder . Det här beteendet förväntas. Du kan fortsätta med nästa steg.
3.2 Skydda lagringsplatsens huvudgren
Du kan skydda viktiga grenar genom att ange regler för grenskydd. Skyddsregler definierar om medarbetare kan ta bort eller tvinga fram push-överföring till grenen. De ställer också in krav för alla push-överföringar till grenen, till exempel att skicka statuskontroller eller en linjär incheckningshistorik.
Anteckning
Skyddade grenar är tillgängliga på offentliga lagringsplatser med GitHub Free och GitHub Free för organisationer och i offentliga och privata lagringsplatser med GitHub Pro, GitHub Team, GitHub Enterprise Cloud och GitHub Enterprise Server. Mer information finns i GitHubs produkter.
Om den inte redan är öppen går du till huvudsidan för lagringsplatsen.
Under namnet på lagringsplatsen väljer du Inställningar. Om du inte kan se fliken Inställningar väljer du listrutan ... och väljer sedan Inställningar.
I avsnittet Kod och automatisering i sidofältet väljer du Grenar.
Under Grenskyddsregler väljer du Lägg till grenskyddsregel.
Under Mönster för grennamn anger du main.
Under Skydda matchande grenar väljer du Kräv en pull-begäran innan sammanslagning.
Konfigurationsvariabler för GitHub Actions är i betaversion och kan komma att ändras.
I avsnittet Säkerhet i sidofältet väljer du Hemligheter och variabler och sedan Åtgärder.
Välj fliken Variabler.
För varje objekt i tabellen:
Välj Ny lagringsplatsvariabel.
I fältet Namn anger du variabelnamnet.
I fältet Värde anger du det värde som beskrivs i tabellen.
Välj Lägg till variabel.
Variabelnamn
Variabelvärde
AZURE_DEVCENTER
Ditt dev center-namn
AZURE_PROJECT
Projektnamnet
AZURE_CATALOG
Ange till "Miljöer"
AZURE_CATALOG_ITEM
Ange till "FunctionApp"
AZURE_SUBSCRIPTION_ID
Ditt Azure-prenumerations-ID
AZURE_TENANT_ID
Ditt Azure-klient-ID
3.4 Skapa en personlig Åtkomsttoken för GitHub
Skapa sedan en detaljerad personlig åtkomsttoken för att aktivera ditt Azure Deployment Environments dev center för att ansluta till lagringsplatsen och använda miljökatalogen.
Anteckning
Detaljerad personlig åtkomsttoken är för närvarande i betaversion och kan komma att ändras. Om du vill lämna feedback kan du läsa feedbackdiskussionen.
I det övre högra hörnet på en sida på GitHub.com väljer du ditt profilfoto och väljer sedan Inställningar.
I det vänstra sidofältet väljer du Inställningar för utvecklare.
I det vänstra sidofältet går du till Personliga åtkomsttoken, väljer Detaljerade token och väljer sedan Generera ny token.
På sidan Ny detaljerad personlig åtkomsttoken under Tokennamn anger du ett namn för token.
Under Förfallodatum väljer du ett förfallodatum för token.
Välj din GitHub-användare under Resursägare.
Under Lagringsplatsåtkomst väljer du Endast lagringsplatser och sedan i listrutan Valda lagringsplatser söker du efter och väljer den lagringsplats som du skapade.
Under Behörigheter väljer du Lagringsplatsbehörigheter och ändrar Innehållet till Skrivskyddat.
Välj Generera token.
Kopiera och spara din personliga åtkomsttoken nu. Du kan inte visa den igen.
3.5 Spara din personliga åtkomsttoken i nyckelvalvet
Spara sedan den personliga åtkomsttoken som en nyckelvalvshemlighet med namnet pat.
Azure CLI
az keyvault secret set \
--name pat \
--vault-name$AZURE_KEYVAULT \
--value<personalAccessToken>
4. Anslut katalogen till utvecklingscentret
I Azure Deployment Environments är en katalog en lagringsplats som innehåller en uppsättning miljödefinitioner. Katalogobjekt består av en IaC-mall (infrastruktur som kod) och en miljöfil som fungerar som ett manifest. Mallen definierar miljön och miljöfilen innehåller metadata om mallen. Utvecklingsteam använder miljödefinitioner från katalogen för att skapa miljöer.
Mallen som du använde för att skapa din GitHub-lagringsplats innehåller en katalog i mappen Miljöer .
Lägg till katalogen i utvecklingscentret
I följande kommando ersätter du < Organization/Repository > med github-organisationen och lagringsplatsens namn.
OpenID Anslut med GitHub Actions är en autentiseringsmetod som använder kortlivade token för att erbjuda förstärkt säkerhet. Det är det rekommenderade sättet att autentisera GitHub Actions till Azure.
Du kan också autentisera ett huvudnamn för tjänsten direkt med hjälp av en hemlighet, men det är utanför omfånget för den här självstudien.
az ad app create --display-name"$AZURE_PROJECT-Dev"
Det här kommandot matar ut JSON med ett id som du använder när du skapar federerade autentiseringsuppgifter med Graph API och ett appId (kallas även klient-ID).
I vart och ett av följande tre kommandon ersätter du < Organization/Repository > med din GitHub-organisation och lagringsplatsnamn.
Skapa den federerade identitetsautentiseringsuppgiften för Dev.
Azure CLI
az rest --method POST \
--uri"https://graph.microsoft.com/beta/applications/$DEV_APPLICATION_ID/federatedIdentityCredentials" \
--body'{"name":"ADEDev","issuer":"https://token.actions.githubusercontent.com","subject":"repo:< Organization/Repository >:environment:Dev","description":"Dev","audiences":["api://AzureADTokenExchange"]}'
För test.
Azure CLI
az rest --method POST \
--uri"https://graph.microsoft.com/beta/applications/$TEST_APPLICATION_ID/federatedIdentityCredentials" \
--body'{"name":"ADETest","issuer":"https://token.actions.githubusercontent.com","subject":"repo:< Organization/Repository >:environment:Test","description":"Test","audiences":["api://AzureADTokenExchange"]}'
Och för Prod.
Azure CLI
az rest --method POST \
--uri"https://graph.microsoft.com/beta/applications/$PROD_APPLICATION_ID/federatedIdentityCredentials" \
--body'{"name":"ADEProd","issuer":"https://token.actions.githubusercontent.com","subject":"repo:< Organization/Repository >:environment:Prod","description":"Prod","audiences":["api://AzureADTokenExchange"]}'
5.2 Tilldela roller till distributionsidentiteter
Tilldela varje distributionsidentitet rollen Läsare i projektet.
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID" \
--role Reader \
--assignee-object-id$DEV_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID" \
--role Reader \
--assignee-object-id$TEST_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID" \
--role Reader \
--assignee-object-id$PROD_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
Tilldela varje distributionsidentitet rollen Distributionsmiljöer Användarroll till motsvarande miljötyp.
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID/environmentTypes/Dev" \
--role"Deployment Environments User" \
--assignee-object-id$DEV_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID/environmentTypes/Test" \
--role"Deployment Environments User" \
--assignee-object-id$TEST_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
Azure CLI
az role assignment create \
--scope"$AZURE_PROJECT_ID/environmentTypes/Prod" \
--role"Deployment Environments User" \
--assignee-object-id$PROD_SERVICE_PRINCIPAL_ID \
--assignee-principal-type ServicePrincipal
6. Konfigurera GitHub-miljöer
Med GitHub-miljöer kan du konfigurera miljöer med skyddsregler och hemligheter. Ett arbetsflödesjobb som refererar till en miljö måste följa alla skyddsregler för miljön innan du kör eller får åtkomst till miljöns hemligheter.
Skapa dev-, test- och prod-miljöer som mappar till miljötyperna i Azure Deployment Environments-projektet.
Anteckning
Miljöer, miljöhemligheter och miljöskyddsregler är tillgängliga på offentliga lagringsplatser för alla produkter. För åtkomst till miljöer, miljöhemligheter och distributionsgrenar i privata eller interna lagringsplatser måste du använda GitHub Pro, GitHub Team eller GitHub Enterprise. För åtkomst till andra miljöskyddsregler i privata eller interna lagringsplatser måste du använda GitHub Enterprise. Mer information finns i GitHubs produkter.
6.1 Skapa Dev-miljön
På GitHub navigerar du till huvudsidan för lagringsplatsen.
Under namnet på lagringsplatsen väljer du Inställningar. Om du inte kan se fliken Inställningar väljer du listrutan ... och väljer sedan Inställningar.
I det vänstra sidofältet väljer du Miljöer.
Välj Ny miljö och ange Dev som miljönamn och välj sedan Konfigurera miljö.
Under Miljöhemligheter väljer du Lägg till hemlighet och anger AZURE_CLIENT_ID som Namn.
Som Värde anger du klient-ID (appId) för *Dev**Microsoft Entra-appen som du skapade tidigare (sparad som $DEV_AZURE_CLIENT_ID miljövariabel).
Välj Add secret (Lägg till hemlighet).
6.2 Skapa testmiljön
Gå tillbaka till huvudmiljösidan genom att välja Miljöer i det vänstra sidofältet.
Välj Ny miljö och ange Test för miljönamnet och välj sedan Konfigurera miljö.
Under Miljöhemligheter väljer du Lägg till hemlighet och anger AZURE_CLIENT_ID som Namn.
Som Värde anger du klient-ID :t (appId) för testappen Microsoft Entra som du skapade tidigare (sparad som $TEST_AZURE_CLIENT_ID miljövariabel).
Välj Add secret (Lägg till hemlighet).
6.3 Skapa Prod-miljön
Gå tillbaka till huvudmiljösidan igen genom att välja Miljöer i det vänstra sidofältet
Välj Ny miljö och ange Prod som miljönamn och välj sedan Konfigurera miljö.
Under Miljöhemligheter väljer du Lägg till hemlighet och anger AZURE_CLIENT_ID som Namn.
Som Värde anger du klient-ID :t (appId) för Prod Microsoft Entra-appen som du skapade tidigare (sparad som $PROD_AZURE_CLIENT_ID miljövariabeln).
Välj Add secret (Lägg till hemlighet).
Ange sedan dig själv som en nödvändig granskare för den här miljön. När du försöker distribuera till Prod väntar GitHub Actions på ett godkännande innan du börjar. Medan ett jobb väntar på godkännande har det statusen Väntar. Om ett jobb inte godkänns inom 30 dagar misslyckas det automatiskt.
Sök efter och välj din GitHub-användare. Du kan ange upp till sex personer eller team. Endast en av de nödvändiga granskarna behöver godkänna jobbet för att det ska fortsätta.
Välj Spara skyddsregler.
main Konfigurera slutligen som distributionsgren:
I listrutan Distributionsgrenar väljer du Valda grenar.
Välj Lägg till distributionsgrenregel och ange main för mönstret Förgreningsnamn.
Välj Lägg till regel.
7. Testa CI/CD-pipelinen
I det här avsnittet gör du några ändringar i lagringsplatsen och testar CI/CD-pipelinen.
7.1 Klona lagringsplatsen
I terminalen cd till en mapp där du vill klona lagringsplatsen lokalt.
Klona lagringsplatsen. Se till att ersätta < Organization/Repository > i följande kommando med din GitHub-organisation och lagringsplatsnamn.
På sidan Åtgärder på lagringsplatsen visas ett nytt arbetsflöde för uppdateringsmiljön som körs.
7.4 Skapa en pull-begäran
Skapa en GitHub-pullbegäran main <- feature1.
På sidan Åtgärder på lagringsplatsen ser du att ett nytt arbetsflöde har startats för att skapa en miljö som är specifik för pull-begäran med hjälp av testmiljötypen.
7.5 Sammanfoga pull-begäran
Gå till pull-begäran som du skapade på GitHub.
Sammanfoga pull-begäran.
Dina ändringar publiceras i produktionsmiljön och förgrenings- och pull-begärandemiljöerna tas bort.
Rensa resurser
Om du inte planerar att använda någon av de resurser som du har skapat tar du bort dem så att du inte debiteras ytterligare avgifter. Om du har distribuerat exempelprogrammet i en annan resursgrupp kanske du vill upprepa följande steg.
Så här tar du bort resurser med hjälp av Azure-portalen:
Välj menyknappen i det övre vänstra hörnet och välj sedan Resursgrupper.
I listan väljer du den resursgrupp som du skapade.
Välj Ta bort resursgrupp.
Ange resursgruppsnamnet. Välj sedan ta bort.
Om du vill ta bort resurser med hjälp av Azure CLI anger du följande kommando:
Azure CLI
az group delete --name<my-dev-center-rg>
Kom ihåg att om du tar bort resursgruppen tas alla resurser i den bort.
Skapa två arbetsflöden för distribution med GitHub Actions och Microsoft Azure. Lär dig mer om att utlösa ett CD-arbetsflöde och lagra autentiseringsuppgifter.
Skapa lösningar från slutpunkt till slutpunkt i Microsoft Azure för att skapa Azure Functions, implementera och hantera webbappar, utveckla lösningar som använder Azure Storage med mera.