Tutoriel : Utiliser GitHub Actions pour déployer sur un conteneur personnalisé App Service et se connecter à une base de données
Ce tutoriel vous guidera tout au long du processus de configuration d'un workflow GitHub Actions visant à déployer une application ASP.NET Core conteneurisée avec un back-end Azure SQL Database . Quand vous avez terminé, vous disposez d’une application ASP.NET s’exécutant dans Azure et connectée à SQL Database. Vous allez d'abord créer des ressources Azure à l'aide d'un workflow GitHub Actions de modèle ARM.
Dans ce tutoriel, vous allez apprendre à :
- Utiliser un workflow GitHub Actions pour ajouter des ressources à Azure à l'aide d'un modèle Azure Resource Manager (modèle ARM)
- Utiliser un workflow GitHub Actions pour créer un conteneur à l'aide des dernières modifications apportées à l'application web
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
Pour suivre ce didacticiel, vous aurez besoin des éléments suivants :
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement.
- Un référentiel GitHub pour stocker vos modèles Resource Manager et vos fichiers de workflow. Pour en créer un, consultez Création d’un référentiel.
Télécharger l’exemple
Dupliquez (fork) l'exemple de projet dans le référentiel Exemples Azure.
https://github.com/Azure-Samples/dotnetcore-containerized-sqldb-ghactions/
Créer le groupe de ressources
Ouvrez Azure Cloud Shell sur https://shell.azure.com. Vous pouvez également utiliser l'interface de ligne de commande Azure si vous l'avez installée localement. (Pour plus d'informations sur Cloud Shell, consultez Présentation de Cloud Shell).
az group create --name {resource-group-name} --location {resource-group-location}
Générer les informations d’identification du déploiement
OpenID Connect est une méthode d’authentification qui utilise des jetons de courte durée. La configuration d’OpenID Connect avec GitHub Actions est un processus plus complexe qui offre une sécurité renforcée.
Si vous n’avez aucune application existante, inscrivez une nouvelle application Microsoft Entra ID et un principal de service pouvant accéder aux ressources.
az ad app create --display-name myApp
Cette commande affiche une sortie JSON avec un
appId
qui est votreclient-id
. Leid
estAPPLICATION-OBJECT-ID
et il sera utilisé pour créer des informations d’identification fédérées avec des appels d’API Graph. Enregistrez la valeur à utiliser comme secret GitHubAZURE_CLIENT_ID
ultérieurement.Créer un principal de service. Remplacez le
$appID
par l’appID de votre sortie JSON.Cette commande génère une sortie JSON avec un principal de service
id
. Le principal de serviceid
est utilisé comme valeur de l’argument--assignee-object-id
de la commandeaz role assignment create
à l’étape suivante.Copiez le
appOwnerOrganizationId
depuis la sortie JSON à utiliser ultérieurement comme secret GitHub pourAZURE_TENANT_ID
.az ad sp create --id $appId
Créez une attribution de rôle pour votre principal de service. Par défaut, l’attribution de rôle est liée à votre abonnement par défaut. Remplacez
$subscriptionId
par votre ID d’abonnement,$resourceGroupName
par le nom de votre groupe de ressources et$servicePrincipalId
par l’ID du principal de service créé.az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Exécutez la commande suivante pour créer des informations d’identification à l’identité fédérée pour votre application Microsoft Entra ID.
- Remplacez
APPLICATION-OBJECT-ID
par l’objectId (généré lors de la création de l’application) pour votre application Microsoft Entra ID. - Définissez une valeur pour
CREDENTIAL-NAME
que vous référencerez ultérieurement. - Définissez
subject
. Cette valeur est définie par GitHub en fonction de votre workflow :- Travaux dans votre environnement GitHub Actions :
repo:< Organization/Repository >:environment:< Name >
- Pour les tâches non liées à un environnement, incluez le chemin de référence (ref path) de la branche/étiquette en fonction du chemin de référence utilisé pour déclencher le workflow :
repo:< Organization/Repository >:ref:< ref path>
. Par exemple,repo:n-username/ node_express:ref:refs/heads/my-branch
ourepo:n-username/ node_express:ref:refs/tags/my-tag
. - Pour les workflows déclenchés par un événement de demande de tirage (pull request) :
repo:< Organization/Repository >:pull_request
.
- Travaux dans votre environnement GitHub Actions :
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" ] }
- Remplacez
Pour savoir comment créer une application Active Directory, un principal de service et des informations d’identification fédérées dans le portail Azure, consultez Connecter GitHub et Azure.
Configurer le secret GitHub pour l’authentification
Vous devez fournir l’ID de client, l’ID de locataire et l’ID d’abonnement de votre application à l’action de connexion. Vous pouvez fournir ces valeurs directement dans le workflow ou les stocker dans des secrets GitHub et les référencer dans votre workflow. L’enregistrement des valeurs en tant que secrets GitHub est l’option la plus sécurisée.
Dans GitHub, accédez à votre dépôt.
Sélectionnez Paramètres dans le volet de navigation.
Sélectionnez Sécurité > Secrets et variables > Actions.
Sélectionnez New repository secret (Nouveau secret de dépôt).
Créez des secrets pour
AZURE_CLIENT_ID
,AZURE_TENANT_ID
etAZURE_SUBSCRIPTION_ID
. Utilisez ces valeurs à partir de votre application Microsoft Entra pour vos secrets GitHub :Secret GitHub Application Microsoft Entra AZURE_CLIENT_ID ID d’application (client) AZURE_TENANT_ID ID de l’annuaire (locataire) AZURE_SUBSCRIPTION_ID Identifiant d’abonnement Enregistrez chaque secret en sélectionnant Ajouter un secret.
Ajouter un secret SQL Server
Dans votre référentiel, créez un secret pour SQL_SERVER_ADMIN_PASSWORD
. Il peut s'agir de n'importe quel mot de passe conforme aux normes Azure en matière de sécurité des mots de passe. Enregistrez ce mot de passe séparément car vous n'y aurez plus accès ensuite.
Créer des ressources Azure
Le workflow de création de ressources Azure exécute un modèle ARM pour déployer les ressources vers Azure. Le workflow :
- extrait le code source à l'aide de l'action d'extraction ;
- se connecte à Azure à l'aide de l'action de connexion à Azure et recueille des informations sur l'environnement et les ressources Azure ;
- déploie les ressources à l'aide de l'action de déploiement Azure Resource Manager.
Pour exécuter le workflow de création de ressources Azure :
Ouvrez le fichier
azuredeploy.yaml
dans.github/workflows
au sein de votre référentiel.Remplacez la valeur de
AZURE_RESOURCE_GROUP
par le nom de votre groupe de ressources.Mettez à jour les valeurs de
WEB_APP_NAME
et deSQL_SERVER_NAME
sur votre nom d’application web et sur le nom de serveur SQL.Accédez à Actions et sélectionnez Exécuter le workflow.
Vérifiez qu'une coche verte apparaît sur la page Actions pour vous assurer que votre action a bien été exécutée.
Ajouter un registre de conteneurs et des secrets SQL
Sur le portail Azure, ouvrez l'instance d'Azure Container Registry que vous venez de créer dans votre groupe de ressources.
Accédez à Clés d'accès et copiez le nom d'utilisateur et le mot de passe.
Dans votre référentiel, créez de nouveaux secrets GitHub pour
ACR_USERNAME
etACR_PASSWORD
.Sur le portail Azure, ouvrez votre base de données Azure SQL. Ouvrez Chaînes de connexion et copiez la valeur.
Créez un secret pour
SQL_CONNECTION_STRING
. Remplacez la valeur{your_password}
par vôtre valeurSQL_SERVER_ADMIN_PASSWORD
.
Créer, envoyer et déployer votre image
Le workflow de création, d'envoi et de déploiement génère un conteneur qui intègre les dernières modifications apportées à l'application, envoie le conteneur à Azure Container Registry et met à jour l'emplacement de préproduction de l'application web pour qu'il pointe vers le dernier conteneur envoyé. Le workflow contient un travail de création et de déploiement :
- Le travail de création extrait le code source à l'aide de l'action d'extraction. Le travail utilise ensuite l'action de connexion à Docker et un script personnalisé pour s'authentifier auprès d'Azure Container Registry, générer une image conteneur et la déployer sur Azure Container Registry.
- Le travail de déploiement se connecte à Azure à l'aide de l'action de connexion à Azure et recueille des informations sur l'environnement et les ressources Azure. Le travail procède ensuite à la mise à jour des paramètres de l'application web à l'aide de l'action des paramètres Azure App Service, et lance le déploiement sur un emplacement de préproduction App Service à l'aide de l'action Azure Web Deploy. Enfin, le travail exécute un script personnalisé pour mettre à jour la base de données SQL et bascule l'emplacement de préproduction vers la production.
Pour exécuter le workflow de création, d'envoi et de déploiement :
Ouvrez votre fichier
build-deploy.yaml
dans.github/workflows
au sein de votre référentiel.Vérifiez que les variables d'environnement de
AZURE_RESOURCE_GROUP
etWEB_APP_NAME
correspondent à celles du fichierazuredeploy.yaml
.Mettez à jour la valeur
ACR_LOGIN_SERVER
de votre serveur de connexion Azure Container Registry.