Configurar una canalización e insertar actualizaciones
En este artículo, aprenderá a usar la CLI para desarrolladores de Azure (azd
) para insertar cambios de plantilla a través de una canalización de CI/CD, como Acciones de GitHub o Azure DevOps. En este ejemplo, usará la plantilla Aplicación web de React con la API Node.js y MongoDB en Azure, pero puede aplicar los principios que se recogen en este artículo a cualquiera de las plantillas de la CLI para desarrolladores de Azure.
Nota:
El comando azd pipeline config
todavía está en versión beta. Consulte más información sobre la compatibilidad con características alfa y beta en la página de estrategias de versiones y control de versiones de características.
Requisitos previos
- Instale la CLI para desarrolladores de Azure.
- Implemente la plantilla de Node.js.
- Visual Studio Code instalado.
Es posible que las plantillas de azd
incluyan o no un archivo de configuración de las canalizaciones Acciones de GitHub y/o Azure DevOps, llamado azure-dev.yml
, que es necesario con configurar los procedimientos CI/CD. Este archivo de configuración aprovisiona los recursos de Azure e implementa el código en la rama principal. Puede encontrar azure-dev.yml
:
- Acciones de GitHub: en el directorio
.github/workflows
. - Azure DevOps: en el directorio
.azdo/pipelines
.
Puede utilizar el archivo de configuración tal cual o modificarlo para adaptarlo a sus necesidades.
Nota:
Compruebe que la plantilla tiene una definición de canalización (azure-dev.yaml
) antes de llamar a azd pipeline config
. azd
no crea automáticamente este archivo.
Consulte Creación de una definición de canalización para azd más adelante.
Para configurar una canalización de CI/CD, use el comando azd pipeline config
, que se encarga de las siguientes tareas:
- Creará y configurará una entidad de servicio para la aplicación en la suscripción de Azure. El usuario debe tener el rol
Owner
o los rolesContributor + User Access Administrator
en la suscripción de Azure, para permitir que azd cree y asigne roles a la entidad de servicio. - Se le guiará a través de un flujo de trabajo para crear y configurar un repositorio de GitHub o Azure DevOps y confirmarle el código del proyecto. También puede optar por utilizar un repositorio existente.
- Permite crear una conexión segura entre Azure y el repositorio.
- Ejecuta la acción de GitHub al proteger el archivo del flujo de trabajo.
Para tener un control más granular sobre este proceso o si el usuario no tiene los roles correspondientes, puede configurar manualmente una canalización.
Seleccione el proveedor de canalización deseado para continuar:
Autorizar a GitHub para la implementación en Azure
Para configurar el flujo de trabajo, debe autorizar a una entidad de servicio para que se implemente en Azure en su nombre, a través de una acción de GitHub. azd
crea la entidad de servicio y una credencial federada para ella.
Ejecute el comando siguiente para crear una entidad de servicio de Azure y configurar la canalización:
azd pipeline config
Opcionalmente, este comando crea un repositorio de GitHub e inserta código en el nuevo repositorio.
Nota:
De forma predeterminada,
azd pipeline config
utiliza OpenID Connect (OIDC), conocido como credenciales federadas. Si prefiere no usar OIDC, ejecuteazd pipeline config --auth-type client-credentials
.OIDC o las credenciales federadas no son compatibles con Terraform.
Indique la información de GitHub solicitada.
Cuando se le pida que confirme e inserte los cambios locales para iniciar una nueva ejecución de Acciones de GitHub, indique
y
.En la ventana del terminal, vea los resultados del comando
azd pipeline config
. El comandoazd pipeline config
generará el nombre del repositorio de GitHub para el proyecto.En el explorador, abra el repositorio de GitHub del proyecto.
Seleccione Acciones para ver cómo se ejecuta el flujo de trabajo.
Realizar e insertar un cambio de código
En el directorio
/src/web/src/layout
del proyecto, abraheader.tsx
.Busque la línea
<Text variant="xLarge">ToDo</Text>
.Cambie el literal
ToDo
pormyTodo
.Guarde el archivo.
Confirme el cambio. Si se confirmar el cambio, se iniciará la canalización de la acción de GitHub para implementar la modificación.
En el explorador, abra el repositorio de GitHub del proyecto para ver lo siguiente:
- La aplicación de los cambios
- La confirmación aplicada de Acciones de GitHub.
Seleccione Acciones para ver el cambio de prueba reflejado en el flujo de trabajo.
Visite la URL web del front-end para inspeccionar la modificación.
azd
como una acción de GitHub
Agregue azd
como una acción de GitHub. Al hacer esto, se instalará azd
. Para usarlo, puede agregar lo siguiente a .github\workflows\azure-dev.yml
:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Limpieza de recursos
Cuando ya no necesite los recursos de Azure creados en este artículo, ejecute el comando siguiente:
azd down
Características avanzadas
Puede ampliar el uso del comando azd pipeline config
según los usos o requisitos de plantillas específicos, tal como se describe en las secciones siguientes.
Secretos o variables adicionales
De forma predeterminada, azd
crea las variables y los secretos para la canalización. Por ejemplo, el comando azd pipeline config
crea la subscription id
, el environment name
y la region
como variables de la canalización cada vez que se ejecuta. La definición de canalización hace referencia a esas variables:
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
Cuando se ejecuta la canalización, azd
obtiene los valores del entorno, que se asigna a las variables y secretos. En función de la plantilla, puede haber configuraciones que se pueden controlar mediante variables de entorno. Por ejemplo, podría crearse una variable de entorno denominada KEY_VAULT_NAME
para definir el nombre de un recurso de almacén de secretos dentro de la infraestructura de la plantilla. En estos casos, la plantilla puede definir la lista de variables y secretos mediante azure.yaml
. Por ejemplo, imagine que usa la siguiente configuración de azure.yaml
:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Con esta configuración, azd
comprueba si alguna de las variables o secretos tiene un valor no vacío en el entorno. Luego, azd
crea una variable o un secreto para la canalización con el nombre de la clave en la configuración como el nombre de la variable o el secreto, así como el valor que no sea cadena del entorno para el valor.
Después, la definición de canalización azure-dev.yaml
puede hacer referencia a las variables o secretos:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
STORAGE_NAME: ${{ variables.STORAGE_NAME }}
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
Nota:
Debe ejecutar azd pipeline config
después de actualizar la lista de secretos o variables en azure.yaml
para que azd restablezca los valores de la canalización.
Parámetros de infraestructura
Parta del ejemplo siguiente de Bicep:
@secure()
param BlobStorageConnection string
El parámetro BlobStorageConnection
no tiene ningún valor predeterminado asignado, por lo que azd
solicita al usuario que escriba un valor. Sin embargo, no hay ninguna solicitud interactiva durante la canalización de CI/CD. azd
debe solicitar el valor del parámetro al ejecutar azd pipeline config
, guardar el valor en la canalización y finalmente recuperar el valor de nuevo cuando se ejecute la canalización.
azd
usa un secreto de canalización llamado AZD_INITIAL_ENVIRONMENT_CONFIG
para guardar y aplicar automáticamente el valor de todos los parámetros necesarios en la canalización. Solo debe hacer referencia a este secreto en la canalización:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
Cuando se ejecuta la canalización, azd
toma los valores de los parámetros del secreto, lo que no hace necesario realizar una solicitud interactiva.
Nota:
Si agrega un nuevo parámetro, debe volver a ejecutar azd pipeline config
.
Creación de una definición de canalización
Si la plantilla azd
aún no tiene un archivo de definición de canalización de CI/CD, puede crear uno. Una definición de canalización de CI/CD suele tener 4 secciones principales:
- desencadenador
- permisos
- sistema operativo o grupo
- pasos que se van a realizar
En los ejemplos siguientes se muestra cómo crear un archivo de definición y las configuraciones relacionadas para Acciones de GitHub y Azure Pipelines.
Para ejecutar azd
en Acciones de GitHub se necesitan las siguientes configuraciones:
- Conceda los niveles de acceso
id-token: write
ycontents: read
. - Instale la acción azd, a menos que use una imagen de Docker donde
azd
ya está instalado.
Puede usar la plantilla siguiente como punto de partida para su propia definición de canalización:
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
- master
# Set this permission if you are using a Federated Credential.
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
# azd build-in variables.
# This variables are always set by `azd pipeline config`
# You can set them as global env (apply to all steps) or you can add them to individual steps' environment
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
## Define the additional variables or secrets that are required globally (provision and deploy)
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
steps:
- name: Checkout
uses: actions/checkout@v4
# using the install-azd action
- name: Install azd
uses: Azure/setup-azd@v1.0.0
# # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
# # use the next one:
# - name: Install azd - daily or from PR
# # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
# run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
# shell: pwsh
# azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
- 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
## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
# - 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
# env:
# AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
# # uncomment this if you are using infrastructure parameters
# AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
## Define the additional variables or secrets that are required only for provision
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
## Define the additional variables or secrets that are required only for deploy
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}