Ejercicio: Adición de una tarea de implementación de Bicep a la canalización
Ha creado una canalización básica y ha configurado los entornos de Azure y Azure Pipelines para que se conecten entre sí. Ahora está listo para implementar el archivo de Bicep del sitio web en Azure desde la canalización.
En este ejercicio, aprenderá a:
- Agregue un archivo de Bicep al repositorio.
- Agregue un paso de canalización para implementar el archivo de Bicep.
- Vuelva a ejecutar la canalización y compruebe que se ha implementado correctamente el sitio web.
Adición del archivo de Bicep del sitio web al repositorio de Git
Ya ha preparado el archivo de Bicep del sitio web. Puede usar ese archivo para implementar diferentes configuraciones de los recursos del sitio web, en función del entorno y la configuración. Aquí, se agrega el archivo de Bicep al repositorio.
Abra el Explorador de Visual Studio Code.
En la carpeta deploy, cree un nuevo archivo de nombre main.bicep. Asegúrese de crear el archivo en la carpeta deploy, no en la raíz del repositorio:
Copie el siguiente código en el archivo main.bicep:
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The type of environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string @description('Indicates whether to deploy the storage account for toy manuals.') param deployToyManualsStorageAccount bool @description('A unique suffix to add to resource names that need to be globally unique.') @maxLength(13) param resourceNameSuffix string = uniqueString(resourceGroup().id) var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website-plan' var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}' // Define the SKUs for each component based on the environment type. var environmentConfigurationMap = { nonprod: { appServicePlan: { sku: { name: 'F1' capacity: 1 } } toyManualsStorageAccount: { sku: { name: 'Standard_LRS' } } } prod: { appServicePlan: { sku: { name: 'S1' capacity: 2 } } toyManualsStorageAccount: { sku: { name: 'Standard_ZRS' } } } } var toyManualsStorageAccountConnectionString = deployToyManualsStorageAccount ? 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' : '' resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = { name: appServicePlanName location: location sku: environmentConfigurationMap[environmentType].appServicePlan.sku } resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } } } resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (deployToyManualsStorageAccount) { name: toyManualsStorageAccountName location: location kind: 'StorageV2' sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku }
Guarde los cambios en el archivo.
En el terminal de Visual Studio Code, ejecute este código para agregar los cambios al “stage”, confirmarlos e insertarlos en el repositorio:
git add deploy/main.bicep git commit -m 'Add Bicep file' git push
Reemplazo de los pasos de canalización
A continuación, actualice la definición de la canalización para implementar el archivo de Bicep en Azure usando la conexión de servicio.
En Visual Studio Code, abra el archivo deploy/azure-pipelines.yml.
Antes de la línea
jobs:
, agreguevariables:
para definir una variable denominadadeploymentDefaultLocation
:trigger: none pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 jobs:
Para quitar el paso
script
de la definición de la canalización, elimine las dos últimas líneas del archivo.Sugerencia
Al trabajar en Visual Studio Code después de instalar la extensión de Azure Pipelines, pruebe a usar la combinación de teclas Ctrl + Espacio. Muestra un menú contextual con elementos sugeridos para agregar en la posición actual del cursor.
En la parte inferior del archivo, agregue una tarea que use la tarea
AzureResourceManagerTemplateDeployment
para implementar el archivo de Bicep:jobs: - job: steps: - task: AzureResourceManagerTemplateDeployment@3 inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(deploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
Nota:
Es recomendable que escriba este código en lugar de copiarlo y pegarlo desde este módulo. Preste atención a la sangría del archivo. Si la sangría no es correcta, el archivo YAML no será válido. Visual Studio Code indica los errores con líneas onduladas.
En este paso, se usa la variable del sistema
$(Build.BuildNumber)
para dar nombre a la implementación. La variable puede ayudar a ver fácilmente a qué canalización corresponde una implementación.La tarea
AzureResourceManagerTemplateDeployment
requiere la propiedad de tarealocation
. Especifica la región de Azure en la que se debe crear un grupo de recursos. En este ejercicio, ya ha creado un grupo de recursos, por lo que la ubicación que especifique aquí no importa. Pero debe proporcionar el valor de todos modos. En este caso, se establece en el valor de la variabledeploymentDefaultLocation
que estableció en un paso anterior.Guarde los cambios en el archivo. El archivo debería tener un aspecto similar al de este ejemplo:
trigger: none pool: vmImage: ubuntu-latest variables: - name: deploymentDefaultLocation value: westus3 jobs: - job: steps: - task: AzureResourceManagerTemplateDeployment@3 inputs: connectedServiceName: $(ServiceConnectionName) deploymentName: $(Build.BuildNumber) location: $(deploymentDefaultLocation) resourceGroupName: $(ResourceGroupName) csmFile: deploy/main.bicep overrideParameters: > -environmentType $(EnvironmentType) -deployToyManualsStorageAccount $(DeployToyManualsStorageAccount)
En el terminal de Visual Studio Code, agregue los cambios al “stage”, confírmelos en el repositorio e insértelos en Azure Repos:
git add deploy/azure-pipelines.yml git commit -m 'Add deployment task to pipeline' git push
Adición de variables de canalización
En el explorador, seleccione Pipelines.
Seleccione su canalización.
Seleccione Editar.
Seleccione Variables.
Seleccione Nueva variable.
En Nombre, escriba ServiceConnectionName. En Valor, escriba ToyWebsite.
Deje las casillas desactivadas y seleccione Aceptar.
Para crear más variables, seleccione +.
Cree las siguientes variables de la misma manera que creó la variable ServiceConnectionName:
Nombre de la variable Valor ResourceGroupName ToyWebsite EnvironmentType nonprod Realice los pasos de nuevo para crear una variable denominada DeployToyManualsStorageAccount con el valor true. Para esta variable, seleccione la casilla Permitir que los usuarios invaliden este valor al ejecutar esta canalización.
Cuando haya creado las cuatro variables, seleccione Guardar.
Ejecución de la canalización
Ya está listo para ejecutar la canalización.
La plantilla incluye una cuenta de almacenamiento que el equipo del sitio web utiliza para almacenar los manuales de instrucciones de los juguetes. Puesto que sigue probando el entorno, no es necesario implementar la cuenta de almacenamiento cada vez que implemente el sitio web. Por eso, ha creado un parámetro de Bicep para controlar si la cuenta de almacenamiento está implementada. En este caso se ejecuta la canalización y se invalida la implementación para no tener que implementar la cuenta de almacenamiento esta vez.
Seleccione Run (Ejecutar).
Aparece el panel Ejecutar canalización. En este panel, puede configurar las opciones de esta ejecución específica de la canalización.
Seleccione Variables.
Seleccione la variable DeployToyManualsStorageAccount y cámbiele el valor a false. Después, seleccione Actualizar.
Seleccione la flecha atrás.
Para iniciar una nueva ejecución de la canalización, seleccione Ejecutar. La canalización puede tardar unos minutos en iniciarse. Una vez que se inicia la canalización, la implementación puede tardar unos minutos en finalizar.
Para abrir el trabajo, en la sección Trabajos, seleccione Trabajo. Puede supervisar el trabajo mientras se ejecuta, o bien esperar hasta que se complete para revisar su historial.
espere a que el trabajo finalice.
Seleccione Trabajo.
Seleccione 1 variable de tiempo de cola utilizada.
Se muestra el valor invalidado de esta ejecución de canalización. El valor de la variable
DeployToyManualsStorageAccount
es false porque invalidó el valor original.Inspeccione el resto de la salida de la canalización.
La canalización muestra una implementación correcta.
Comprobación de la implementación
Vaya a Azure Portal.
En el menú de la izquierda, seleccione Grupos de recursos.
Seleccione ToyWebsite.
Mire el estado de la implementación en Información general. Como puede ver, una implementación se ha realizado correctamente.
Seleccione 1 correcta para ver los detalles de la implementación.
El nombre de la implementación es el mismo que el de la ejecución de la canalización.
Para ver qué recursos se han implementado, seleccione la implementación. Para expandir la implementación y ver más detalles, seleccione Detalles de la implementación. En este caso, hay un plan de Azure App Service y una aplicación.