Självstudie: Använda GitHub Actions för att distribuera till en anpassad App Service-container och ansluta till en databas
Den här självstudien beskriver hur du konfigurerar ett GitHub Actions-arbetsflöde för att distribuera ett containerbaserat ASP.NET Core-program med en Azure SQL Database-serverdel . När du är klar har du en ASP.NET app som körs i Azure och är ansluten till SQL Database. Först skapar du Azure-resurser med ett GITHub Actions-arbetsflöde för ARM-mallar .
I den här självstudien lär du dig att:
- Använda ett GitHub Actions-arbetsflöde för att lägga till resurser i Azure med en Azure Resource Manager-mall (ARM-mall)
- Använda ett GitHub Actions-arbetsflöde för att skapa en container med de senaste ändringarna i webbappen
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
För att slutföra den här självstudien behöver du:
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Ett GitHub-konto. Om du inte har ett sådant kan du registrera dig utan kostnad.
- En GitHub-lagringsplats för att lagra dina Resource Manager-mallar och dina arbetsflödesfiler. Information om hur du skapar en finns i Skapa en ny lagringsplats.
Hämta exemplet
Förgrena exempelprojektet i Azure Samples-lagringsplatsen.
https://github.com/Azure-Samples/dotnetcore-containerized-sqldb-ghactions/
Skapa resursgruppen
Öppna Azure Cloud Shell på https://shell.azure.com. Du kan också använda Azure CLI om du har installerat det lokalt. (Mer information om Cloud Shell finns i Översikt över Cloud Shell.)
az group create --name {resource-group-name} --location {resource-group-location}
Generera autentiseringsuppgifter för distribution
OpenID Connect är en autentiseringsmetod som använder kortlivade token. Att konfigurera OpenID Connect med GitHub Actions är en mer komplex process som ger förstärkt säkerhet.
Om du inte har ett befintligt program registrerar du ett nytt Microsoft Entra-ID-program och tjänstens huvudnamn som kan komma åt resurser.
az ad app create --display-name myApp
Det här kommandot matar ut JSON med en
appId
som är dinclient-id
. isid
APPLICATION-OBJECT-ID
och används för att skapa federerade autentiseringsuppgifter med Graph API-anrop. Spara värdet som ska användas somAZURE_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 tjänstens huvudnamn
id
. Tjänstens huvudnamnid
används som värdet för--assignee-object-id
argumentet iaz role assignment create
kommandot i nästa steg.appOwnerOrganizationId
Kopiera från JSON-utdata som ska användas som en GitHub-hemlighet förAZURE_TENANT_ID
senare.az ad sp create --id $appId
Skapa en ny rolltilldelning för tjänstens huvudnamn. Som standard är rolltilldelningen kopplad till din standardprenumeration. Ersätt
$subscriptionId
med ditt prenumerations-ID,$resourceGroupName
med resursgruppens namn och$servicePrincipalId
med det nyligen skapade tjänsthuvudnamns-ID:t.az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Kör följande kommando för att skapa en ny federerad identitetsautentiseringsuppgift för ditt Microsoft Entra-ID-program.
- Ersätt
APPLICATION-OBJECT-ID
med objectId (genereras när du skapar appen) för ditt Microsoft Entra-ID-program. - Ange ett värde som
CREDENTIAL-NAME
ska refereras senare. subject
Ange . 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
ellerrepo: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
.
- Jobb i din GitHub Actions-miljö:
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" ] }
- Ersätt
Information om hur du skapar ett Active Directory-program, tjänstens huvudnamn och federerade autentiseringsuppgifter i Azure Portal finns i Ansluta GitHub och Azure.
Konfigurera GitHub-hemligheten för autentisering
Du måste ange programmets klient-ID, klient-ID och prenumerations-ID fö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.
Gå till din lagringsplats i GitHub.
Gå till Inställningar i navigeringsmenyn.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Skapa hemligheter för
AZURE_CLIENT_ID
,AZURE_TENANT_ID
ochAZURE_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.
Lägga till en SQL Server-hemlighet
Skapa en ny hemlighet på lagringsplatsen för SQL_SERVER_ADMIN_PASSWORD
. Den här hemligheten kan vara valfritt lösenord som uppfyller Azures standarder för lösenordssäkerhet. Du kommer inte att kunna komma åt det här lösenordet igen så spara det separat.
Skapa Azure-resurser
Arbetsflödet skapa Azure-resurser kör en ARM-mall för att distribuera resurser till Azure. Arbetsflödet:
- Checkar ut källkoden med utcheckningsåtgärden.
- Loggar in i Azure med azure-inloggningsåtgärden och samlar in miljö- och Azure-resursinformation.
- Distribuerar resurser med åtgärden Azure Resource Manager Deploy.
Så här kör du arbetsflödet skapa Azure-resurser:
azuredeploy.yaml
Öppna filen i på.github/workflows
lagringsplatsen.Uppdatera värdet
AZURE_RESOURCE_GROUP
för till resursgruppens namn.Uppdatera värdena
WEB_APP_NAME
för ochSQL_SERVER_NAME
till webbappens namn och sql server-namn.Gå till Åtgärder och välj Kör arbetsflöde.
Kontrollera att åtgärden har körts genom att söka efter en grön bockmarkering på sidan Åtgärder .
Lägga till containerregister och SQL-hemligheter
I Azure Portal öppnar du ditt nyligen skapade Azure Container Registry i resursgruppen.
Gå till Åtkomstnycklar och kopiera värdena för användarnamn och lösenord.
Skapa nya GitHub-hemligheter för
ACR_USERNAME
ochACR_PASSWORD
lösenord på lagringsplatsen.Öppna din Azure SQL-databas i Azure Portal. Öppna Anslutningssträngar och kopiera värdet.
Skapa en ny hemlighet för
SQL_CONNECTION_STRING
. Ersätt{your_password}
med .SQL_SERVER_ADMIN_PASSWORD
Skapa, push-överföra och distribuera avbildningen
Arbetsflödet för att skapa, pusha och distribuera skapar en container med de senaste appändringarna, push-överför containern till Azure Container Registry och uppdaterar mellanlagringsplatsen för webbprogram så att den pekar på den senaste push-överföringscontainern. Arbetsflödet containrar ett bygg- och distributionsjobb:
- Byggjobbet checkar ut källkoden med utcheckningsåtgärden. Jobbet använder sedan inloggningsåtgärden Docker och ett anpassat skript för att autentisera med Azure Container Registry, skapa en containeravbildning och distribuera den till Azure Container Registry.
- Distributionsjobbet loggar in i Azure med azure-inloggningsåtgärden och samlar in miljö- och Azure-resursinformation. Jobbet uppdaterar sedan Webbappinställningar med åtgärden Azure App Service-inställningar och distribueras till en Mellanlagringsplats för App Service med åtgärden Azure Web Deploy. Slutligen kör jobbet ett anpassat skript för att uppdatera SQL-databasen och växlar mellanlagringsplatsen till produktion.
Så här kör du arbetsflödet build, push och deploy:
build-deploy.yaml
Öppna filen i.github/workflows
på lagringsplatsen.Kontrollera att miljövariablerna för
AZURE_RESOURCE_GROUP
ochWEB_APP_NAME
matchar dem iazuredeploy.yaml
.ACR_LOGIN_SERVER
Uppdatera värdet för din Azure Container Registry-inloggningsserver.