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.

  1. 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 su client-id. La objectId es APPLICATION-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 de AZURE_CLIENT_ID más adelante.

  2. 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 un objectId diferente y se usará en el siguiente paso. El nuevo objectId es assignee-object-id.

    Este comando genera una salida de JSON con un objectId diferente y se usará en el siguiente paso. El nuevo objectId es assignee-object-id.

    Copie el appOwnerTenantId para usarlo como secreto de GitHub para AZURE_TENANT_ID más adelante.

     az ad sp create --id $appId
    
  3. 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 de assignee-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
    
  4. 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 o repo: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.
    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"
        ]
    }
    

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.

  1. En GitHub, vaya al repositorio.

  2. Vaya a Configuración en el menú de navegación.

  3. Seleccione Seguridad > Secretos y variables > Acciones.

    Captura de pantalla de la adición de un secreto

  4. Seleccione New repository secret (Nuevo secreto del repositorio).

  5. Cree secretos para AZURE_CLIENT_ID, AZURE_TENANT_ID y AZURE_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
  6. Guarde todos los secretos, para lo que debe seleccionar Add secret (Agregar secreto).

Incorporación de secretos de GitHub a la compilación

  1. Cree dos nuevos secretos en el repositorio de GitHub para SQLADMIN_PASS y SQLADMIN_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.

  2. 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 columna SubscriptionId.

    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:

Para ejecutar el flujo de trabajo de creación de recursos de Azure:

  1. Abra el archivo infraworkflow.yml en .github/workflows en el repositorio.

  2. Actualice el valor de AZURE_RESOURCE_GROUP al nombre de su grupo de recursos.

  3. Establezca la entrada de region en las acciones de implementación de ARM de su región.

    1. Abra templates/azuredeploy.resourcegroup.parameters.json y actualice la propiedad rgLocation en su región.
  4. Vaya a Acciones y seleccione Ejecutar flujo de trabajo.

    Ejecute el flujo de trabajo de Acciones de GitHub para agregar recursos.

  5. 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.

    Ejecución exitosa de creación de recursos.

  6. Una vez que haya creado los recursos, vaya a Acciones, seleccione Crear recursos de Azure y deshabilite el flujo de trabajo.

    Deshabilite el flujo de trabajo de creación de recursos de Azure.

Creación de un secreto de perfil de publicación

  1. En Azure Portal, abra la nueva instancia de almacenamiento provisional de App Service (ranura) que creó con el flujo de trabajo Create Azure Resources.

  2. Seleccione Obtener perfil de publicación.

  3. Abra el archivo del perfil de publicación en un editor de texto y copie el contenido.

  4. 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:

  1. Abra el archivo workflow.yaml en .github/workflows en el repositorio.

  2. Compruebe que las variables de entorno de AZURE_RESOURCE_GROUP, AZURE_WEBAPP_NAME, SQLSERVER_NAME y DATABASE_NAME coinciden con las de infraworkflow.yml.

  3. 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.

Pasos siguientes