Tutorial: Implementación de un proyecto de .NET Aspire mediante las acciones de Azure Developer CLI y GitHub
El Azure Developer CLI (azd
) permite implementar proyectos de .NET Aspire mediante acciones de GitHub mediante la configuración automática de la autenticación y el entorno necesarios. En este artículo se explica el proceso de creación e implementación de un proyecto de .NET Aspire en Azure Container Apps mediante acciones de azd
y GitHub. Aprendes los siguientes conceptos:
- Explore cómo funciona la integración de
azd
con proyectos de .NET Aspire y acciones de GitHub - Creación y configuración de un repositorio de GitHub para un proyecto de .NET Aspire mediante
azd
- Agregar un archivo de flujo de trabajo de acciones de GitHub a tu solución de .NET Aspire
- Supervisar y explorar las ejecuciones de los flujos de trabajo de Acciones de GitHub y las implementaciones de Azure
Prerrequisitos
Para trabajar con .NET.NET Aspire, necesita lo siguiente instalado localmente:
- .NET 8.0 o .NET 9.0
- Un entorno de ejecución de contenedor compatible con OCI, como:
- Docker de escritorio o Podman. Para obtener más información, consulte container runtime.
- Un entorno para desarrolladores integrado (IDE) o un editor de código, como:
- Visual Studio 2022 versión 17.9 o posterior (opcional)
-
Visual Studio Code (opcional)
- C# Dev Kit: extensión (opcional)
- JetBrains Rider con el complemento .NET.NET Aspire (opcional)
Para obtener más información, consulte configuración y herramientas de .NET.NET Aspirey sdk de .NET.NET Aspire.
- Azure organización de DevOps o elegir una organización existente
-
Azure de token de acceso personal (PAT) de DevOps y guárdelo para su uso posterior. Configure el token con los permisos siguientes:
- Grupos de agentes (leer, administrar)
- Compilación (lectura y ejecución)
- Código (completo)
- Proyecto y equipo (lectura, escritura y administración)
- Lanzamiento (lectura, escritura, ejecución y administración)
- Conexiones de servicio (lectura, consulta y administración)
También debe instalar localmente Azure Developer CLI (versión 1.5.1 o posterior). Entre las opciones de instalación comunes se incluyen las siguientes:
Creación de una solución de .NET.NET Aspire
Como punto de partida, en este artículo se supone que ha creado una solución de .NET.NET Aspire a partir de la plantilla de aplicación de inicio .NET.NET Aspire de. Para obtener más información, consulte Inicio rápido: Crear tu primera aplicación de .NET.NET Aspire.
Inicialización de la plantilla
Abra una nueva ventana de terminal e
cd
en el directorio de proyecto AppHost de la solución .NET.NET Aspire.Ejecute el comando
azd init
para inicializar el proyecto conazd
, que inspeccionará la estructura del directorio local y determinará el tipo de aplicación.azd init
Para obtener más información sobre el comando
azd init
, vea azd init.Seleccione Usar código en el directorio actual cuando
azd
le pida dos opciones de inicialización de la aplicación.? How do you want to initialize your app? [Use arrows to move, type to filter] > Use code in the current directory Select a template
Después de examinar el directorio,
azd
le pedirá que confirme que encontró el proyecto correcto de .NET.NET AspireAppHost. Seleccione la opción Confirmar y continuar con la inicialización de la aplicación.Detected services: .NET (Aspire) Detected in: D:\source\repos\AspireSample\AspireSample.AppHost\AspireSample.AppHost.csproj azd will generate the files necessary to host your app on Azure using Azure Container Apps. ? Select an option [Use arrows to move, type to filter] > Confirm and continue initializing my app Cancel and exit
Escriba un nombre de entorno, que se usa para asignar un nombre a los recursos aprovisionados en Azure y administrar entornos diferentes, como
dev
yprod
.Generating files to run your app on Azure: (✓) Done: Generating ./azure.yaml (✓) Done: Generating ./next-steps.md SUCCESS: Your app is ready for the cloud! You can provision and deploy your app to Azure by running the azd up command in this directory. For more information on configuring your app, see ./next-steps.md
azd
genera una serie de archivos y los coloca en el directorio de trabajo. Estos archivos son:
- azure .yaml: Describe los servicios de la app, como el proyecto AppHost .NET Aspire, y los asigna a recursos Azure.
-
.azure/config.json: archivo de configuración que informa
azd
cuál es el entorno activo actual. - .azure/aspireazddev/.env: contiene invalidaciones específicas del entorno.
Añadir el archivo de flujo de trabajo de GitHub Actions
Aunque azd
generó algunos archivos de plantilla esenciales para usted, el proyecto todavía necesita un archivo de flujo de trabajo de acciones de GitHub para admitir el aprovisionamiento y las implementaciones mediante CI/CD.
Cree una carpeta github vacía en la raíz de su proyecto.
azd
usa este directorio de forma predeterminada para detectar archivos de flujo de trabajo de acciones de GitHub.Propina
Si estás en macOS y tienes dificultades para crear una carpeta con un
.
inicial, puedes usar la terminal para crear la carpeta. Abra el terminal y vaya a la raíz del proyecto. Ejecute el siguiente comando para crear la carpeta :mkdir .github
Dentro del nuevo .github carpeta, cree otra carpeta denominada flujos de trabajo (terminará con .github/workflows).
Agregue un nuevo archivo de flujo de trabajo de acciones de GitHub a la nueva carpeta denominada azure-dev.yml. La plantilla de inicio
azd
proporciona un archivo de flujo de trabajo de acciones de ejemplo GitHub que puede copiar en su proyecto.Actualice el flujo de trabajo de GitHub Actions de ejemplo para incluir un paso para instalar la carga de trabajo de .NET Aspire. Esto garantiza que las herramientas y los comandos de .NET Aspire estén disponibles para el trabajo que ejecuta las acciones de GitHub. El archivo de flujo de trabajo completado debe coincidir con lo siguiente:
on: workflow_dispatch: push: # Run when commits are pushed to mainline branch (main or master) # Set this to the mainline branch you are using branches: - main permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest env: AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }} AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} steps: - name: Checkout uses: actions/checkout@v4 - name: Install azd uses: Azure/setup-azd@v1.0.0 - name: Install .NET Aspire workload run: dotnet workload install aspire - name: Log in with Azure (Federated Credentials) if: ${{ env.AZURE_CLIENT_ID != '' }} run: | azd auth login ` --client-id "$Env:AZURE_CLIENT_ID" ` --federated-credential-provider "github" ` --tenant-id "$Env:AZURE_TENANT_ID" shell: pwsh - name: Log in with Azure (Client Credentials) if: ${{ env.AZURE_CREDENTIALS != '' }} run: | $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable; Write-Host "::add-mask::$($info.clientSecret)" azd auth login ` --client-id "$($info.clientId)" ` --client-secret "$($info.clientSecret)" ` --tenant-id "$($info.tenantId)" shell: pwsh - name: Provision Infrastructure run: azd provision --no-prompt # Required when # env: # AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }} # Required when provisioning and deploying are defined in separate jobs. # - name: Refresh azd env (pulls latest infrastructure provision) # run: azd env refresh # env: # AZURE_LOCATION: ${{ env.AZURE_LOCATION }} - name: Deploy Application run: azd deploy --no-prompt
Además, puede observar que los pasos de aprovisionamiento e implementación se combinan en un único trabajo. Si prefiere separar estos pasos en distintos trabajos, puede hacerlo creando dos trabajos independientes en el archivo de flujo de trabajo. El trabajo de aprovisionamiento debe ejecutarse primero, seguido del trabajo de implementación. El trabajo de implementación debe incluir el secreto de AZD_INITIAL_ENVIRONMENT_CONFIG
para asegurarse de que el trabajo de implementación tiene acceso a la configuración del entorno. También tendría que descomentar el paso azd env refresh
en el trabajo de implementación para asegurarse de que el trabajo de implementación tenga acceso al último aprovisionamiento de infraestructura.
Crear el repositorio GitHub y la canalización
El Azure Developer CLI permite crear automáticamente canalizaciones de CI/CD con las configuraciones y permisos correctos para aprovisionar e implementar recursos en Azure.
azd
también puede crear un repositorio de GitHub para la aplicación si aún no existe.
Ejecute el comando
azd pipeline config
para configurar la canalización de implementación y conectarla de forma segura a Azure:azd pipeline config
Seleccione la suscripción para aprovisionar e implementar los recursos de la aplicación.
Seleccione la ubicación Azure para utilizar los recursos.
Cuando se le pida que cree un nuevo repositorio de Git en el directorio, escriba y y presione Entrar.
Nota
La creación de un repositorio de GitHub requiere que haya iniciado sesión en GitHub. Hay algunas selecciones que varían en función de sus preferencias. Después de iniciar sesión, se le pedirá que cree un nuevo repositorio en el directorio actual.
Seleccione Crear un nuevo repositorio de GitHub privado para configurar el git remoto.
Escriba un nombre de su elección para el nuevo repositorio de GitHub o presione ENTRAR para usar el nombre predeterminado.
azd
crea un nuevo repositorio en GitHub y lo configura con los secretos necesarios para autenticarse en Azure.Escriba y para continuar cuando
azd
le pida que confirme e inserte los cambios locales para iniciar la canalización configurada.
Explora el flujo de trabajo de acciones de GitHub y su implementación
Vaya al nuevo repositorio de GitHub utilizando el enlace generado por
azd
.Seleccione la pestaña Acciones para ver los flujos de trabajo del repositorio. Debería ver el nuevo flujo de trabajo en ejecución o ya completado. Seleccione el flujo de trabajo para ver los pasos del trabajo y los detalles de los registros de la ejecución. Por ejemplo, puede expandir pasos como Instalar .NET.NET Aspire Workload o Implementar aplicación para ver los detalles de la acción completada.
Seleccione Implementar aplicación para expandir los registros de ese paso. Debería ver dos direcciones URL de punto de conexión impresas para el
apiservice
ywebfrontend
. Seleccione cualquiera de estos vínculos para abrirlos en otra pestaña del explorador y explorar la aplicación implementada.
¡Felicidades! Ha implementado correctamente un proyecto de .NET Aspire mediante las acciones de Azure Developer CLI y GitHub.
Configuración del archivo de flujo de trabajo
Aunque azd
generó algunos archivos de plantilla esenciales para usted, el proyecto todavía necesita un archivo de flujo de trabajo de canalizaciones de Azure para admitir el aprovisionamiento y las implementaciones mediante CI/CD.
Cree una carpeta .azdo vacía en la raíz del proyecto.
azd
utiliza este directorio por defecto para descubrir archivos de flujo de trabajo de Azure Pipelines.Dentro de la nueva carpeta .azdo, cree otra carpeta denominada canalizaciones (terminará con .azdo/pipelines).
Agregue un nuevo archivo de flujo de trabajo de canalizaciones de Azure a la nueva carpeta denominada azure-dev.yml. La plantilla de arranque de
azd
proporciona un archivo de flujo de trabajo de Pipelines de ejemplo Azure que puede copiar en su proyecto.Actualice el flujo de trabajo de Azure Pipelines de ejemplo para incluir un paso para instalar la carga de trabajo de .NET Aspire. El archivo de flujo de trabajo completado debe coincidir con lo siguiente:
trigger:
- main
- master
pool:
vmImage: ubuntu-latest
steps:
- task: Bash@3
displayName: Install azd
inputs:
targetType: 'inline'
script: |
curl -fsSL https://aka.ms/install-azd.sh | bash
# azd delegate auth to az to use service connection with AzureCLI@2
- pwsh: |
azd config set auth.useAzCliAuth "true"
displayName: Configure `azd` to Use AZ CLI Authentication.
- task: Bash@3
displayName: Install .NET Aspire workload
inputs:
targetType: 'inline'
script: |
dotnet workload install aspire
- task: AzureCLI@2
displayName: Provision Infrastructure
inputs:
azureSubscription: azconnection
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
azd provision --no-prompt
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
AZURE_ENV_NAME: $(AZURE_ENV_NAME)
AZURE_LOCATION: $(AZURE_LOCATION)
- task: AzureCLI@2
displayName: Deploy Application
inputs:
azureSubscription: azconnection
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
azd deploy --no-prompt
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
AZURE_ENV_NAME: $(AZURE_ENV_NAME)
AZURE_LOCATION: $(AZURE_LOCATION)
Crea el repositorio y el pipeline de Azure DevOps
Importante
Como se mencionó en los requisitos previos, deberá crear una organización Azure DevOps o seleccionar una organización existente para completar los pasos que se indican a continuación. También deberá crear un token de acceso personal (PAT) con los permisos enumerados en los requisitos necesarios.
El Azure Developer CLI permite crear automáticamente canalizaciones con las configuraciones y permisos correctos para aprovisionar e implementar recursos en Azure.
azd
también puede crear un repositorio de Azure pipelines para tu aplicación si aún no existe.
Ejecute el comando
azd pipeline config
para configurar la canalización de implementación y conectarla de forma segura a Azure. Incluya la opción--provider azdo
para usar canalizaciones de Azure en lugar de la configuración predeterminada GitHub Actions.azd pipeline config --provider azdo
Seleccione la suscripción para aprovisionar e implementar los recursos de la aplicación.
Seleccione la ubicación Azure para utilizar los recursos.
Pegue el token de acceso personal que creó anteriormente.
Escriba el Azure nombre de la organización de DevOps que creó o seleccionó.
Cuando se le pida que cree un nuevo repositorio en el directorio actual, escriba y y presione Intro.
Cuando se le pida que configure el git remoto, seleccione Crear un nuevo Azure Proyecto DevOps.
Escriba un nombre único de su elección para el nuevo repositorio, como
aspireazd
.azd
crea un nuevo repositorio en Azure Repos y lo configura con los secretos necesarios para autenticarse en Azure.Escriba y para continuar cuando
azd
le pida que confirme e inserte los cambios locales para iniciar la canalización configurada.
Exploración de la canalización e implementación de la aplicación
Vaya a su nuevo pipeline de Azure utilizando el enlace de estado generado por
azd
.Seleccione la ejecución de canalización completada para ver el resumen.
Seleccione el vínculo del trabajo en la parte inferior de la vista para ir a los detalles del trabajo.
La página de detalles del trabajo muestra el estado de todas las fases individuales. Seleccione Aprovisionar infraestructura para ver los registros de esa fase, que detallan todos los pasos de aprovisionamiento completados por
azd
. En la parte inferior de los registros, tome nota del mensaje de estado final y vincule al grupo de recursos Azure aprovisionado.Seleccione el vínculo situado en la parte inferior de los registros de salida de aprovisionamiento para ir al nuevo grupo de recursos Azure.
Nota
También puede navegar directamente a su nuevo grupo de recursos buscándolo en el Portal de Azure. El nombre del grupo de recursos será el nombre del entorno que proporcionó a
azd
, prefijado conrg-
.Seleccione la aplicación contenedora webfrontend, que hospeda la parte pública de tu sitio.
En la página de detalles de webfrontend, seleccione el enlace url de la aplicación para abrir el sitio en el navegador.
Importante
Si se produce un error de 403 Forbidden
al ver el sitio en el explorador, asegúrese de que la configuración de entrada está configurada correctamente. En la página aplicación webfrontend del portal de Azure, vaya a entrada en el panel de navegación izquierdo. Asegúrese de que tráfico de entrada esté configurado en Aceptar tráfico desde cualquier lugar y guarde los cambios.
¡Felicidades! Implementó correctamente un proyecto de .NET Aspire utilizando el Azure Developer CLI y los pipelines de Azure.
Limpieza de recursos
Ejecute el siguiente comando Azure CLI para eliminar el grupo de recursos cuando ya no necesite los recursos de Azure que creó. Al eliminar el grupo de recursos también se eliminan los recursos contenidos en él.
az group delete --name <your-resource-group-name>
Para obtener más información, consulte el apartado Limpieza de recursos en Azure.