Ejercicio: Publicación de una especificación de plantilla

Completado

El equipo ha creado algunos archivos de Bicep protegidos por la seguridad que son compatibles con el nuevo modelo de gobernanza de su empresa. Uno de los archivos de Bicep protegidos implementa una aplicación de Azure App Service basada en Linux. En este ejercicio usará un flujo de trabajo de implementación para publicar el archivo de Bicep como especificación de plantilla.

Durante el proceso, hará lo siguiente:

  • Agregue un trabajo de lint al flujo de trabajo.
  • Agregue un trabajo de flujo de trabajo para publicar la especificación de plantilla.
  • Ejecute manualmente el flujo de trabajo y compruebe que finaliza correctamente.
  • Compruebe la especificación de plantilla publicada en Azure.

Añade un trabajo de lint al flujo de trabajo

El repositorio contiene un borrador de un flujo de trabajo que puede usar como punto de partida.

  1. En Visual Studio Code expanda la carpeta .github/workflows en la raíz del repositorio.

  2. Abra el archivo template-spec-linux-app-service.yml.

    Captura de pantalla de Visual Studio Code que muestra la ubicación del archivo de definición de flujo de trabajo.

    La definición del flujo de trabajo incluye dos desencadenadores. En este ejercicio no modifica el archivo de Bicep para la especificación de plantilla, por lo que el desencadenador push nunca se activa. Para probar el flujo de trabajo, invóquelo manualmente mediante el desencadenador workflow_dispatch.

  3. En la parte inferior del archivo, donde se ve el comentario # To be added, agregue la siguiente definición de trabajo de lint:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    

    El repositorio contiene un archivo bicepconfig.json que configura el linter para que emita errores en lugar de advertencias. Cualquier error durante el trabajo de lint hará que se produzca un error en el flujo de trabajo.

    Sugerencia

    Los archivos YAML son sensibles a la sangría. Tanto si escribe o pega este código, asegúrese de que la sangría es correcta. Más adelante en este ejercicio, verá la definición de flujo de trabajo de YAML completa para que pueda comprobar que el archivo coincide.

Agregación de un trabajo de publicación al flujo de trabajo

Ahora puede agregar un segundo trabajo para publicar la especificación de plantilla en Azure.

  1. Agregue el código siguiente al final del archivo template-spec-linux-app-service.yml:

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/cli@v1
        name: Publish template spec
        with:
          inlineScript: |
            az ts create \
              --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
              --name ${{ env.TEMPLATE_SPEC_NAME }} \
              --version ${{ github.run_number }} \
              --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
              --location ${{ env.AZURE_REGION }} \
              --yes
    

    Este trabajo extrae el código del repositorio e inicia sesión en Azure mediante los secretos de GitHub que ha creado. A continuación, ejecuta el comando az ts create para publicar la especificación de plantilla en Azure.

    Sugerencia

    Para simplificar las cosas, el flujo de trabajo usa el número de ejecución del flujo de trabajo como número de versión de la especificación de plantilla. En la unidad siguiente obtendrá información sobre un sistema de control de versiones más complejo.

  2. Guarde los cambios en el archivo.

Comprobación y confirmación de la definición de flujo de trabajo

  1. Compruebe que el archivo template-spec-linux-app-service.yml tiene un aspecto similar al del ejemplo siguiente:

    name: template-spec-linux-app-service
    concurrency: template-spec-linux-app-service
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'template-specs/linux-app-service/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyReusable
      AZURE_REGION: westus3
      TEMPLATE_SPEC_NAME: linux-app-service
      TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/cli@v1
          name: Publish template spec
          with:
            inlineScript: |
              az ts create \
                --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
                --name ${{ env.TEMPLATE_SPEC_NAME }} \
                --version ${{ github.run_number }} \
                --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
                --location ${{ env.AZURE_REGION }} \
                --yes
    

    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 lint and publish jobs to Linux App Service template spec workflow"
    git push
    
  3. Esta es la primera vez que inserta contenido este repositorio, por lo que es posible que se le pida que inicie sesión.

    En Windows escriba 1 para autenticarse mediante un explorador web y seleccione Entrar.

    En macOS, seleccione Autorizar.

  4. Aparece una ventana del explorador. Puede que tenga que volver a iniciar sesión en GitHub. Seleccione Autorizar.

Desencadenador del flujo de trabajo

  1. En el explorador, seleccione la pestaña Acciones.

    Captura de pantalla de GitHub que muestra la pestaña Acciones.

    Las ejecuciones de flujo de trabajo con errores ya aparecen en la lista, pero debe preocuparse por ellas. Las ejecuciones no se pudieron realizar porque las definiciones de flujo de trabajo aún no estaban completas cuando se creó el repositorio.

  2. Seleccione el flujo de trabajo template-spec-linux-app-service, seleccione el botón Ejecutar flujo de trabajo y, a continuación, seleccione Ejecutar flujo de trabajo.

    Captura de pantalla de GitHub que muestra las selecciones para ejecutar el flujo de trabajo de la especificación de plantilla.

    GitHub comienza una nueva ejecución de un flujo de trabajo. Es posible que tenga que actualizar la ventana del explorador para ver que aparece la ejecución.

  3. Seleccione la última ejecución de la lista.

    Captura de pantalla de GitHub que resalta la ejecución más reciente del flujo de trabajo de la especificación de plantilla.

    Espere a que finalice la ejecución del flujo de trabajo. La especificación de plantilla se publica en Azure.

  4. Observe el número de ejecución del flujo de trabajo, que probablemente sea 2.

    Captura de pantalla de GitHub que muestra una ejecución correcta del flujo de trabajo y resalta el número de ejecución.

Revisar la especificación de plantilla en Azure

También puede ver la especificación de plantilla publicada en el Portal de Azure.

  1. En el explorador, vaya a Azure Portal.

  2. Vaya al grupo de recursos ToyReusable y seleccione la especificación de plantilla linux-app-service.

    Captura de pantalla de Azure Portal que muestra el grupo de recursos, con la especificación de plantilla resaltada.

  3. Examine los detalles de la especificación de plantilla.

    Captura de pantalla de Azure Portal que muestra detalles de la especificación de plantilla.

    Observe que la versión más reciente y el número de versión son los mismos que el número de ejecución del flujo de trabajo. El flujo de trabajo usa el número de ejecución para el número de versión de la especificación de plantilla.