Tutorial: uso de Acciones de GitHub para implementar en App Service y conectarse a una base de datos
Aprenda a configurar un flujo de trabajo de Acciones de GitHub para implementar una aplicación ASP.NET Core con un back-end de Azure SQL Database. Cuando haya terminado, tendrá una aplicación ASP.NET en ejecución en Azure y conectada a SQL Database. Primero usará una plantilla de ARM para crear recursos.
En este tutorial no se usan los contenedores. Si quiere implementar contenido en una aplicación contenedorizada de ASP.NET Core, consulte Uso de las Acciones de GitHub para implementar contenido en App Service para contenedores conectarse a una base de datos .
En este tutorial, aprenderá a:
- Usar un flujo de trabajo de Acciones de GitHub para agregar recursos a Azure con una plantilla de Azure Resource Manager (plantilla ARM).
- Use un flujo de trabajo de Acciones de GitHub para crear una aplicación ASP.NET Core
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
Para completar este tutorial, necesita:
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Una cuenta de GitHub. Si no tiene ninguna, regístrese gratis.
- Un repositorio de GitHub para almacenar las plantillas de Resource Manager y los archivos del flujo de trabajo. Para crear uno, vea Creación de un repositorio.
Descarga del ejemplo
Bifurque el proyecto de ejemplo en el repositorio de muestras de Azure.
https://github.com/Azure-Samples/dotnetcore-sqldb-ghactions
Creación del grupo de recursos
Abra Azure Cloud Shell en https://shell.azure.com. También puede usar la CLI de Azure si la ha instalado localmente. (Para obtener más información sobre Cloud Shell, consulte el artículo de información general de Cloud Shell).
az group create --name {resource-group-name} --location {resource-group-location}
Genere las credenciales de implementación.
Open ID Connect es un método de autenticación que usa tokens de corta duración. La configuración de OpenID Connect con Acciones de GitHub es un proceso más complejo que ofrece seguridad reforzada.
Si no tiene una aplicación existente, registre una nueva aplicación de Microsoft Entra y una entidad de servicio que puedan acceder a los recursos.
az ad app create --display-name myApp
Este comando genera un JSON de salida con un
appId
que es suclient-id
. LaobjectId
esAPPLICATION-OBJECT-ID
y se usará para crear credenciales federadas con llamadas a la Graph API. Guarde el valor que se usará como secreto de GitHub deAZURE_CLIENT_ID
más adelante.Crear una entidad de servicio. Reemplace
$appID
por el valor de appId de la salida de JSON. Este comando genera una salida de JSON con unobjectId
diferente y se usará en el siguiente paso. El nuevoobjectId
esassignee-object-id
.Este comando genera una salida de JSON con un
objectId
diferente y se usará en el siguiente paso. El nuevoobjectId
esassignee-object-id
.Copie el
appOwnerTenantId
para usarlo como secreto de GitHub paraAZURE_TENANT_ID
más adelante.az ad sp create --id $appId
Cree una asignación de roles por suscripción y objeto. De forma predeterminada, la asignación de roles se vinculará a la suscripción predeterminada. Reemplace
$subscriptionId
por el ID de suscripción,$resourceGroupName
por el nombre del grupo de recursos y$assigneeObjectId
por el valor deassignee-object-id
generado (el id. de objeto de la entidad de servicio recién creada).az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Ejecute el siguiente comando para crear una credencial de identidad federada para la aplicación de Microsoft Entra.
- Reemplace
APPLICATION-OBJECT-ID
por el objectId (generado al crear la aplicación) de la aplicación de Microsoft Entra. - Establezca un valor para
CREDENTIAL-NAME
al que haga referencia más adelante. - Establezca
subject
. Este valor lo define GitHub en función del flujo de trabajo:- Trabajos en el entorno de Acciones de GitHub:
repo:< Organization/Repository >:environment:< Name >
- En el caso de los trabajos no vinculados a un entorno, incluya la ruta de acceso de referencia para una rama o etiqueta en función de la ruta de acceso de referencia usada para desencadenar el flujo de trabajo:
repo:< Organization/Repository >:ref:< ref path>
. Por ejemplo,repo:n-username/ node_express:ref:refs/heads/my-branch
orepo:n-username/ node_express:ref:refs/tags/my-tag
. - En el caso de los flujos de trabajo desencadenados por un evento de solicitud de incorporación de cambios:
repo:< Organization/Repository >:pull_request
.
- Trabajos en el entorno de Acciones de GitHub:
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" ] }
- Reemplace
Para más información sobre cómo crear una aplicación de directorio activo, un principal de servicio y credenciales federadas en el portal Azure, consulte Conectar GitHub y Azure.
Configuración del secreto de GitHub para la autenticación
Debe especificar el identificador de cliente, el identificador de inquilino y el identificador de suscripción en la acción de inicio de sesión. Estos valores se pueden proporcionar directamente en el flujo de trabajo o se pueden almacenar en secretos de GitHub y se puede hacer referencia a ellos en el flujo de trabajo. Guardar los valores como secretos de GitHub es la opción más segura.
En GitHub, vaya al repositorio.
Vaya a Configuración en el menú de navegación.
Seleccione Seguridad > Secretos y variables > Acciones.
Seleccione New repository secret (Nuevo secreto del repositorio).
Cree secretos para
AZURE_CLIENT_ID
,AZURE_TENANT_ID
yAZURE_SUBSCRIPTION_ID
. Use estos valores de la aplicación de Microsoft Entra para los secretos de GitHub:Secreto de GitHub Aplicación de Microsoft Entra AZURE_CLIENT_ID Id. de aplicación (cliente) AZURE_TENANT_ID Id. de directorio (inquilino) AZURE_SUBSCRIPTION_ID Id. de suscripción Guarde todos los secretos, para lo que debe seleccionar Add secret (Agregar secreto).
Incorporación de secretos de GitHub a la compilación
Cree dos nuevos secretos en el repositorio de GitHub para
SQLADMIN_PASS
ySQLADMIN_LOGIN
. Asegúrese de elegir una contraseña compleja; de lo contrario, se producirá un error en el paso de creación del servidor de base de datos de SQL. Tenga en cuenta que no podrá volver a acceder a esta contraseña, así que guárdela por separado.Cree un secreto
AZURE_SUBSCRIPTION_ID
para el id. de suscripción de Azure. Si no conoce el id. de suscripción, use este comando en Azure Shell para encontrarlo. Copie el valor en la columnaSubscriptionId
.az account list -o table
Creación de recursos de Azure
El flujo de trabajo de creación de recursos de Azure ejecuta una plantilla de ARM para implementar recursos en Azure. El flujo de trabajo:
- Restaura el código fuente con la acción de restauración.
- Inicia sesión en Azure con la acción de inicio de sesión de Azure y recopila información del entorno y los recursos de Azure.
- Implementa recursos con la acción para implementar Azure Resource Manager.
Para ejecutar el flujo de trabajo de creación de recursos de Azure:
Abra el archivo
infraworkflow.yml
en.github/workflows
en el repositorio.Actualice el valor de
AZURE_RESOURCE_GROUP
al nombre de su grupo de recursos.Establezca la entrada de
region
en las acciones de implementación de ARM de su región.- Abra
templates/azuredeploy.resourcegroup.parameters.json
y actualice la propiedadrgLocation
en su región.
- Abra
Vaya a Acciones y seleccione Ejecutar flujo de trabajo.
Compruebe que su acción se haya ejecutado correctamente; para ello, compruebe si hay una marca de verificación verde en la página Acciones.
Una vez que haya creado los recursos, vaya a Acciones, seleccione Crear recursos de Azure y deshabilite el flujo de trabajo.
Creación de un secreto de perfil de publicación
En Azure Portal, abra la nueva instancia de almacenamiento provisional de App Service (ranura) que creó con el flujo de trabajo
Create Azure Resources
.Seleccione Obtener perfil de publicación.
Abra el archivo del perfil de publicación en un editor de texto y copie el contenido.
Cree un nuevo secreto de GitHub para
AZURE_WEBAPP_PUBLISH_PROFILE
.
Compilación e implementación de la aplicación
Para ejecutar la compilación e implementar el flujo de trabajo:
Abra el archivo
workflow.yaml
en.github/workflows
en el repositorio.Compruebe que las variables de entorno de
AZURE_RESOURCE_GROUP
,AZURE_WEBAPP_NAME
,SQLSERVER_NAME
yDATABASE_NAME
coinciden con las deinfraworkflow.yml
.Compruebe que la aplicación se implementó visitando la dirección URL de la opción de salida Cambiar al espacio de producción. Debería ver una aplicación de ejemplo, denominada Mi aplicación TodoList.
Limpieza de recursos
Si ya no necesita el proyecto de ejemplo, elimine el grupo de recursos de Azure Portal y elimine el repositorio en GitHub.