Ejercicio: Actualización del desencadenador de la canalización

Completado

Un compañero le pide que active la característica Always On de App Service en el sitio web de la empresa, para que la aplicación del sitio web siempre se esté ejecutando.

En este ejercicio, actualizará la canalización que creó para que se ejecute automáticamente cada vez que cambie un archivo en la rama principal. Usará la canalización actualizada para implementar el cambio de configuración solicitado en el sitio web.

Durante el proceso, hará lo siguiente:

  • Actualice la canalización para que se desencadene automáticamente cada vez que cambie algún archivo en la carpeta deploy de la rama principal.
  • Realice un cambio en el archivo de Bicep.
  • Compruebe que la canalización se ejecuta automáticamente.

Actualización del desencadenador para que se base en ramas

  1. En Visual Studio Code, abra el archivo deploy/azure-pipelines.yml.

  2. Quite el desencadenador manual en la primera línea.

  3. Agregue la siguiente definición de desencadenador en la primera línea:

    trigger:
      batch: true
      branches:
        include:
        - main
    

    Tenga en cuenta que también habilita el control de simultaneidad, para evitar que la canalización se ejecute varias veces simultáneamente.

  4. Guarde los cambios en el archivo.

  5. Confirme los cambios, pero no los inserte aún. Los insertará en breve.

    git add .
    git commit -m 'Add branch trigger'
    

Actualización del archivo de Bicep

  1. En Visual Studio Code, abra el archivo main.bicep.

  2. En la propiedad siteConfig de la definición de recurso appServiceApp, agregue la propiedad alwaysOn con el valor true:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Guarde los cambios en el archivo.

  4. En el terminal de Visual Studio Code, ejecute el siguiente código para confirmar los cambios e inserte ambas confirmaciones:

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

Comprobación de que la canalización da error

  1. En el explorador, seleccione Canalizaciones y elija la canalización.

  2. Seleccione la ejecución más reciente para ver que la canalización se ha ejecutado automáticamente. La canalización se ha ejecutado porque ha insertado los cambios en una rama que el desencadenador de rama supervisa. Si la canalización todavía se está ejecutando, espere un minuto y actualice la página.

    Captura de pantalla de Azure DevOps que muestra la ejecución de la canalización que ha dado error.

    La canalización muestra una implementación que ha dado error.

  3. Para diagnosticar el error, en Trabajos, seleccione el trabajo y elija la tarea AzureResourceManagerTemplateDeployment que ha dado error. Desplace el texto para ver el mensaje de error completo. El mensaje de error incluye lo siguiente:

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails

    Este mensaje de error indica que se produjo un error en la implementación porque la aplicación de App Service está implementada con el nivel gratuito F1, que no admite la característica Always On.

    Importante

    Este ejemplo muestra la importancia de probar los archivos de Bicep, incluidos todos los valores de parámetros que use. Es fácil incluir errores sutiles en la configuración de los recursos u otro código. Es posible que no detecte un problema hasta que la canalización implemente el código y dé error. En un próximo módulo, aprenderá algunas estrategias que puede usar para comprobar y probar el código de Bicep.

Corregir el archivo de Bicep y ver que la canalización se desencadena de nuevo

Hable con su compañero sobre la implementación con errores. Juntos, deciden que la opción Always On solo debe aplicarse al entorno de producción. Aquí, corrige el problema que provocó el error de implementación con la aplicación de la nueva regla que han decidido usar.

  1. En Visual Studio Code, agregue nuevas propiedades para cada tipo de entorno a la variable environmentConfigurationMap:

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. Cambie el valor de configuración alwaysOn de la aplicación para usar el valor de asignación de configuración adecuado para el tipo de entorno:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. Guarde los cambios en el archivo.

  4. En el terminal de Visual Studio Code, confirme los cambios e insértelos:

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

Comprobación de que la canalización funciona correctamente

  1. En Azure DevOps, vuelva a la lista Canalizaciones, elija la canalización y seleccione la ejecución más reciente.

  2. Seleccione la ejecución más reciente. Si la canalización todavía se está ejecutando, espere un minuto y actualice la página.

    Captura de pantalla de Azure DevOps que muestra la ejecución de la canalización que ha funcionado correctamente.

    La canalización muestra una implementación correcta. Esta vez, ha funcionado correctamente porque ha usado un archivo de Bicep válido.

Limpiar los recursos

Ahora que ha completado el ejercicio, puede quitar los recursos para que no se le facturen.

En el Terminal de Visual Studio Code, ejecute el siguiente comando:

az group delete --resource-group ToyWebsite --yes --no-wait

El grupo de recursos se elimina en segundo plano.

Remove-AzResourceGroup -Name ToyWebsite -Force