Zelfstudie: GitHub Actions gebruiken om te implementeren in een aangepaste App Service-container en verbinding te maken met een database
Deze zelfstudie begeleidt u bij het instellen van een GitHub Actions-werkstroom voor het implementeren van een in een container geplaatste ASP.NET Core-toepassing met een Back-end van Azure SQL Database . Wanneer u klaar bent, hebt u een ASP.NET-app die wordt uitgevoerd in Azure en is verbonden met SQL Database. U maakt eerst Azure-resources met een GitHub Actions-werkstroom voor een ARM-sjabloon .
In deze zelfstudie leert u het volgende:
- Een GitHub Actions-werkstroom gebruiken om resources toe te voegen aan Azure met een Azure Resource Manager-sjabloon (ARM-sjabloon)
- Een GitHub Actions-werkstroom gebruiken om een container te bouwen met de meest recente wijzigingen in de web-app
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
Vereisten
Voor het voltooien van deze zelfstudie hebt u het volgende nodig:
- Een Azure-account met een actief abonnement. Gratis een account maken
- Een GitHub-account. Als u geen account hebt, kunt u zich registreren voor een gratis account.
- Een GitHub-opslagplaats voor het opslaan van uw Resource Manager-sjablonen en uw werkstroombestanden. Zie Een nieuwe opslagplaats maken om er een te maken.
Het voorbeeld downloaden
Fork het voorbeeldproject in de opslagplaats Azure Samples.
https://github.com/Azure-Samples/dotnetcore-containerized-sqldb-ghactions/
De resourcegroep maken
Open de Azure Cloud Shell op https://shell.azure.com. U kunt de Azure CLI ook gebruiken als u deze lokaal hebt geïnstalleerd. (Zie het Overzicht van Cloud Shell voor meer informatie over Cloud Shell.)
az group create --name {resource-group-name} --location {resource-group-location}
Genereer implementatiereferenties
OpenID Connect is een verificatiemethode die gebruikmaakt van kortstondige tokens. Het instellen van OpenID Connect met GitHub Actions is complexer en biedt beperkte beveiliging.
Als u geen bestaande toepassing hebt, registreert u een nieuwe Microsoft Entra ID-toepassing en service-principal die toegang heeft tot resources.
az ad app create --display-name myApp
Met deze opdracht wordt JSON uitgevoerd met een
appId
JSON die uwclient-id
. Ditid
wordtAPPLICATION-OBJECT-ID
gebruikt voor het maken van federatieve referenties met Graph API-aanroepen. Sla de waarde op die u later wilt gebruiken als hetAZURE_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 service-principal
id
. De service-principalid
wordt gebruikt als de waarde van het--assignee-object-id
argument in deaz role assignment create
opdracht in de volgende stap.Kopieer de
appOwnerOrganizationId
uitvoer van de JSON om te gebruiken als een GitHub-geheim voorAZURE_TENANT_ID
later gebruik.az ad sp create --id $appId
Maak een nieuwe roltoewijzing voor uw service-principal. De roltoewijzing wordt standaard gekoppeld aan uw standaardabonnement. Vervang
$subscriptionId
door uw abonnements-id,$resourceGroupName
door de naam van de resourcegroep en$servicePrincipalId
door de zojuist gemaakte service-principal-id.az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --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 ID-toepassing.
- Vervang door
APPLICATION-OBJECT-ID
de objectId (gegenereerd tijdens het maken van een app) voor uw Microsoft Entra ID-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>
. Bijvoorbeeldrepo:n-username/ node_express:ref:refs/heads/my-branch
ofrepo:n-username/ node_express:ref:refs/tags/my-tag
. - Voor werkstromen die door een pull-aanvraaggebeurtenis zijn geactiveerd:
repo:< Organization/Repository >:pull_request
.
- Taken in uw GitHub Actions-omgeving:
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" ] }
- Vervang door
Zie Connect GitHub en Azure voor meer informatie over het maken van een Active Directory-toepassing, service-principal en federatieve referenties in Azure Portal.
Het GitHub-geheim configureren voor verificatie
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.
Ga in GitHub naar uw opslagplaats.
Ga naar Instellingen in het navigatiemenu.
Selecteer Acties voor beveiligingsgeheimen > en variabelen>.
Selecteer Nieuw opslagplaatsgeheim.
Geheimen maken voor
AZURE_CLIENT_ID
,AZURE_TENANT_ID
enAZURE_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.
Een SQL Server-geheim toevoegen
Maak een nieuw geheim in uw opslagplaats voor SQL_SERVER_ADMIN_PASSWORD
. Dit geheim kan elk wachtwoord zijn dat voldoet aan de Azure-standaarden voor wachtwoordbeveiliging. U hebt geen toegang meer tot dit wachtwoord, dus sla het wachtwoord afzonderlijk op.
Azure-resources maken
Met de werkstroom Azure-resources maken wordt een ARM-sjabloon uitgevoerd om resources in Azure te implementeren. De werkstroom:
- Hiermee wordt de broncode uitgecheckt met de actie Uitchecken.
- Meld u aan bij Azure met de azure-aanmeldingsactie en verzamelt omgevings- en Azure-resourcegegevens.
- Hiermee worden resources geïmplementeerd met de azure Resource Manager-implementatieactie.
Ga als volgende te werk om de werkstroom Azure-resources maken uit te voeren:
Open het
azuredeploy.yaml
bestand in.github/workflows
uw opslagplaats.Werk de waarde van
AZURE_RESOURCE_GROUP
uw resourcegroepnaam bij.Werk de waarden van en
SQL_SERVER_NAME
naar de naam vanWEB_APP_NAME
uw web-app en de sql-servernaam bij.Ga naar Acties en selecteer Werkstroom uitvoeren.
Controleer of uw actie is uitgevoerd door te controleren op een groen vinkje op de pagina Acties .
Containerregister en SQL-geheimen toevoegen
Open in Azure Portal uw zojuist gemaakte Azure Container Registry in uw resourcegroep.
Ga naar Access-sleutels en kopieer de waarden voor de gebruikersnaam en het wachtwoord.
Maak nieuwe GitHub-geheimen voor
ACR_USERNAME
enACR_PASSWORD
wachtwoord in uw opslagplaats.Open uw Azure SQL-database in Azure Portal. Open verbindingsreeksen en kopieer de waarde.
Maak een nieuw geheim voor
SQL_CONNECTION_STRING
. Vervang{your_password}
door uwSQL_SERVER_ADMIN_PASSWORD
.
Uw installatiekopieën bouwen, pushen en implementeren
De build-, push- en implementatiewerkstroom bouwt een container met de meest recente app-wijzigingen, pusht de container naar Azure Container Registry en werkt de staging-site van de webtoepassing bij zodat deze verwijst naar de meest recente container die is gepusht. De werkstroomcontainers zijn een build- en implementatietaak:
- Met de buildtaak wordt de broncode uitgecheckt met de actie Uitchecken. De taak gebruikt vervolgens de docker-aanmeldingsactie en een aangepast script om te verifiëren met Azure Container Registry, een containerinstallatiekopieën te bouwen en deze te implementeren in Azure Container Registry.
- De implementatietaak meldt zich aan bij Azure met de azure-aanmeldingsactie en verzamelt omgevings- en Azure-resourcegegevens. De taak werkt vervolgens web-app-instellingen bij met de actie Azure-app Service-instellingen en wordt geïmplementeerd in een App Service-staging-site met de actie Azure Web Deploy. Ten slotte voert de taak een aangepast script uit om de SQL-database bij te werken en wisselt staging-site naar productie.
De werkstroom bouwen, pushen en implementeren uitvoeren:
Open het
build-deploy.yaml
bestand in.github/workflows
uw opslagplaats.Controleer of de omgevingsvariabelen voor
AZURE_RESOURCE_GROUP
enWEB_APP_NAME
overeenkomen met de omgevingsvariabelen inazuredeploy.yaml
.Werk de waarde voor uw
ACR_LOGIN_SERVER
Azure Container Registry-aanmeldingsserver bij.