Ejercicio: Adición de una fase de vista previa a la canalización

Completado

Quiere agregar una fase adicional a la canalización para poder comprobar qué cambios se realizarán en el entorno de Azure.

Durante el proceso, hará lo siguiente:

  • Actualizar el archivo YAML de canalización para agregar una nueva fase de vista previa.
  • Agregar un entorno a Azure Pipelines.
  • Configurar el entorno para exigir una aprobación.
  • Actualice el archivo YAML de canalización a fin de usar el entorno para la fase de implementación.
  • Ver los resultados hipotéticos y aprobar una ejecución de canalización.

Actualización de la definición de canalización para agregar una fase de vista previa

Aquí, agregará una nueva fase a la canalización que ejecuta la operación hipotética.

  1. En Visual Studio Code, abra el archivo azure-pipelines.yml en la carpeta deploy.

  2. Entre las fases Validate (Validación) y Deploy (Implementación), agregue la definición siguiente para la fase Preview (Vista previa):

    - stage: Preview
      jobs:
      - job: PreviewAzureChanges
        displayName: Preview Azure changes
        steps:
          - task: AzureCLI@2
            name: RunWhatIf
            displayName: Run what-if
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group what-if \
                  --resource-group $(ResourceGroupName) \
                  --template-file deploy/main.bicep \
                  --parameters environmentType=$(EnvironmentType)
    
  3. Guarde los cambios en el archivo.

Adición de un entorno

  1. En el explorador, vaya a Canalizaciones>Entornos.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra el menú Canalizaciones, con el elemento Entornos resaltado.

  2. Seleccione Crear entorno.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra la página Entornos, con el botón para crear un entorno resaltado.

  3. Escriba Website como nombre de entorno.

    Deje la descripción en blanco. En Recurso, seleccione Ninguno.

    Nota:

    En Azure Pipelines, los entornos se usan para habilitar características de implementación. Algunas de estas características solo se aplican cuando la implementación se realiza en Kubernetes o en máquinas virtuales. En este módulo, estas características no se usan y puede omitirlas.

  4. Seleccione Crear.

    Captura de pantalla de la página de un entorno nuevo en Azure DevOps, con los detalles completados y el botón Crear resaltado.

Adición de una comprobación de aprobación al entorno

  1. Seleccione la pestaña Aprobaciones y comprobaciones en la parte superior izquierda de la pantalla.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra el entorno Website, con la pestaña Aprobaciones y comprobaciones resaltada.

  2. Seleccione Aprobaciones.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra la página para agregar una comprobación, con el elemento Aprobaciones resaltado.

  3. En el cuadro de texto Aprobadores, escriba su nombre y selecciónelo.

  4. Seleccione el botón de flecha situado junto a Avanzado.

    Tenga en cuenta que, de forma predeterminada, los aprobadores pueden aprobar las ejecuciones que han desencadenado. Como es la única persona que trabajará con esta canalización, deje activada esta casilla.

  5. Seleccione Crear.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra la página para agregar una comprobación de aprobación, con los detalles completados y el botón Crear resaltado.

Actualización de la definición de canalización para requerir un entorno y una aprobación

Aquí, configurará la fase Implementación para que se ejecute en el entorno Website que ha creado antes. Convertirá la fase Implementación para ejecutar un trabajo de implementación en lugar de un trabajo estándar y lo configurará para implementarlo en el entorno.

  1. En el archivo azure-pipelines.yml de Visual Studio Code, reemplace la definición de la fase Deploy (Implementación) por el código siguiente:

    - stage: Deploy
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        environment: Website
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: $(ServiceConnectionName)
                    deploymentName: $(Build.BuildNumber)
                    location: $(deploymentDefaultLocation)
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
    

    Observe que ha definido un nuevo paso checkout. A diferencia de los trabajos normales, los trabajos de implementación se deben configurar para que extraigan del repositorio (descarguen) los archivos del repositorio de Git. Si no lleva a cabo este paso, el trabajo de implementación no podrá leer el archivo de Bicep. En su lugar, podría considerar la posibilidad de usar artefactos de canalización para enviar archivos entre fases de canalización. En el resumen se incluye un vínculo a más información sobre los artefactos.

  2. Guarde el archivo.

Comprobación y confirmación de la definición de canalización

  1. Compruebe que el archivo azure-pipelines.yml es similar al código siguiente:

    trigger:
      batch: true
      branches:
        include:
        - main
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      - name: deploymentDefaultLocation
        value: westus3
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Validate
      jobs:
      - job: ValidateBicepCode
        displayName: Validate Bicep code
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: RunPreflightValidation
            displayName: Run preflight validation
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              location: $(deploymentDefaultLocation)
              deploymentMode: Validation
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    
    - stage: Preview
      jobs:
      - job: PreviewAzureChanges
        displayName: Preview Azure changes
        steps:
          - task: AzureCLI@2
            name: RunWhatIf
            displayName: Run what-if
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group what-if \
                  --resource-group $(ResourceGroupName) \
                  --template-file deploy/main.bicep \
                  --parameters environmentType=$(EnvironmentType)
    
    - stage: Deploy
      jobs:
      - deployment: DeployWebsite
        displayName: Deploy website
        environment: Website
        strategy:
          runOnce:
            deploy:
              steps:
                - checkout: self
    
                - task: AzureResourceManagerTemplateDeployment@3
                  name: DeployBicepFile
                  displayName: Deploy Bicep file
                  inputs:
                    connectedServiceName: $(ServiceConnectionName)
                    deploymentName: $(Build.BuildNumber)
                    location: $(deploymentDefaultLocation)
                    resourceGroupName: $(ResourceGroupName)
                    csmFile: deploy/main.bicep
                    overrideParameters: >
                      -environmentType $(EnvironmentType)
    

    Si no es así, actualícelo para que coincida con este ejemplo y después guárdelo.

  2. Confirme e inserte los cambios en el repositorio de Git mediante la ejecución de los comandos siguientes en el terminal de Visual Studio Code:

    git add .
    git commit -m "Add preview stage"
    git push
    

Ejecución de la canalización y revisión de las salidas hipotéticas

  1. En el explorador, vaya a la canalización.

  2. Seleccione la ejecución más reciente de la canalización.

    Espere hasta que la canalización complete las fases Lint, Validate (Validación) y Preview (Vista previa). Aunque Azure Pipelines actualiza de forma automática la página con el estado más reciente, es recomendable actualizarla ocasionalmente.

  3. Si se le pide que conceda permiso para acceder a un recurso, seleccione Ver y, a continuación, seleccione Permitir.

  4. Observe que Azure Pipelines le pide una aprobación. También recibirá un correo electrónico en el que se le informa de que la canalización necesita su aprobación.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra la ejecución de canalización, con el requisito de aprobación resaltado.

    Antes de aprobar la continuación de la canalización, revisará los resultados hipotéticos para asegurarse de que coincidan con las expectativas.

  5. Seleccione la fase Preview (Vista previa).

  6. Seleccione el paso Run what-if (Ejecutar hipótesis) para inspeccionar los cambios sobre los que informa el comando hipotético.

  7. Observe que el registro de canalización proporciona resultados hipotéticos similares al código siguiente:

    Resource and property changes are indicated with these symbols:
      + Create
      ~ Modify
      = Nochange
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyWebsiteTest
    
      ~ Microsoft.Web/sites/toy-website-nbfnedv766snk [2021-01-15]
        + properties.siteConfig.localMySqlEnabled:   false
        + properties.siteConfig.netFrameworkVersion: "v4.6"
    
      = Microsoft.Insights/components/toywebsite [2020-02-02]
      = Microsoft.Storage/storageAccounts/mystoragenbfnedv766snk [2021-04-01]
      = Microsoft.Web/serverfarms/toy-website [2021-01-15]
    
    Resource changes: 1 to modify, 3 no change.
    

    La operación hipotética ha detectado un cambio en el recurso del sitio web. Pero los cambios que ha detectado son ruido. No representan cambios reales en el recurso. Con el tiempo, el equipo de Azure trabaja para reducir el ruido. Mientras tanto, para estas dos propiedades específicas, puede omitir los cambios detectados.

    Es posible que también vea un elemento en la salida hipotética para el tipo de recurso microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite. Application Insights crea este recurso automáticamente. El comando hipotético detecta que no se realizará ningún cambio en el recurso.

Aprobación de la ejecución de canalización

  1. Seleccione la flecha izquierda para volver a los detalles de ejecución de canalización.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra el menú de registro de la canalización, con la flecha Atrás resaltada.

  2. Seleccione el botón Revisar en el panel de aprobación.

  3. En el cuadro Comentario, escriba Resultados hipotéticos revisados.

  4. Seleccione Aprobar.

    Captura de pantalla de la interfaz de Azure DevOps en la que se muestra la página de aprobación de la canalización, con el botón Aprobar resaltado.

Observación de la implementación correcta

  1. Después de aprobar la ejecución de canalización, observe que la fase Deploy (Implementación) empieza a ejecutarse.

    Espere a que finalice la fase.

  2. Observe que la ejecución de canalización finaliza correctamente.