Compartir a través de


Tutorial: Implementación de ejecutores y agentes de CI/CD autohospedados con trabajos de Azure Container Apps

Acciones de GitHub y Azure Pipelines permiten ejecutar flujos de trabajo de CI/CD con ejecutores y agentes autohospedados. Puede ejecutar ejecutores y agentes autohospedados mediante trabajos de Azure Container Apps controlados por un evento.

Los ejecutores autohospedados son útiles cuando es necesario ejecutar flujos de trabajo que requieren acceso a recursos o herramientas locales que no están disponibles para un ejecutor hospedado en la nube. Por ejemplo, un ejecutor autohospedado en un trabajo de Container Apps permite al flujo de trabajo acceder a los recursos dentro de la red virtual del trabajo que no son accesibles para un ejecutor hospedado en la nube.

La ejecución de ejecutores autohospedados como trabajos controlados por un evento le permite aprovechar la naturaleza sin servidor de Azure Container Apps. Los trabajos se ejecutan automáticamente cuando se desencadena un flujo de trabajo y se cierran cuando se completa el trabajo.

Solo paga por el tiempo en que se está ejecutando el trabajo.

En este tutorial, aprenderá a ejecutar ejecutores de Acciones de GitHub como un trabajo de Container Apps controlado por un evento.

  • Crear un entorno de Container Apps para implementar el ejecutor autohospedado
  • Crear un repositorio de GitHub para ejecutar un flujo de trabajo que use un ejecutor autohospedado
  • Crear una imagen de contenedor que ejecuta un ejecutor de Acciones de GitHub
  • Implementar el ejecutor como trabajo en el entorno de Container Apps
  • Crear un flujo de trabajo que use el ejecutor autohospedado y compruebe que se ejecuta

Importante

Los ejecutores autohospedados solo se recomiendan para repositorios privados. Su uso con repositorios públicos puede permitir que el código peligroso se ejecute en el ejecutor autohospedado. Para obtener más información, consulte Seguridad del ejecutor autohospedado.

En este tutorial, aprenderá a ejecutar agentes de Azure Pipelines como un trabajo de Container Apps controlado por un evento.

  • Crear un entorno de Container Apps para implementar el agente autohospedado
  • Crear una organización y un proyecto de Azure DevOps
  • Crear una imagen de contenedor que ejecuta un agente de Azure Pipelines
  • Uso de un trabajo manual para crear un agente de marcador de posición en el entorno de Container Apps
  • Implementar el agente como trabajo en el entorno de Container Apps
  • Crear una canalización que use el agente autohospedado y compruebe que se ejecuta

Importante

Los agentes autohospedados solo se recomiendan para proyectos privados. Su uso con proyectos públicos puede permitir que el código peligroso se ejecute en el agente autohospedado. Para obtener más información, consulte Seguridad del agente autohospedado.

Nota:

Las aplicaciones y los trabajos de contenedor no admiten la ejecución de Docker en contenedores. Los pasos de los flujos de trabajo que usan comandos de Docker producirán un error cuando se ejecuten en un ejecutor o agente autohospedado en un trabajo de Container Apps.

Requisitos previos

  • Organización de Azure DevOps: si no tiene una organización de DevOps con una suscripción activa, puede crear una de forma gratuita.

Consulte las restricciones de trabajos para obtener una lista de limitaciones.

Configuración

Para iniciar sesión en Azure desde la CLI, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.

az login

Para asegurarse de que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.

az upgrade

Luego, instale o actualice la extensión de Azure Container Apps para la CLI.

Si recibe errores sobre los parámetros que faltan al ejecutar az containerapp comandos en la CLI de Azure o cmdlets del Az.App módulo en Azure PowerShell, asegúrese de que tiene instalada la versión más reciente de la extensión Azure Container Apps.

az extension add --name containerapp --upgrade

Nota:

A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en versión preliminar de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Ahora que la extensión o módulo actualizado está instalado, registre los espacios de nombre Microsoft.App y Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Creación de variables de entorno

Ahora que la configuración de la CLI de Azure está completa, puede definir las variables de entorno que se usan en este artículo.

RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="github-actions-runner-job"
RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="azure-pipelines-agent-job"
PLACEHOLDER_JOB_NAME="placeholder-agent-job"

Creación de un entorno de Container Apps

El entorno de Azure Container Apps actúa como un límite seguro en torno a las aplicaciones y trabajos de contenedor para que puedan compartir la misma red y comunicarse entre sí.

Nota:

Para crear un entorno de Container Apps integrado con una red virtual existente, consulte Proporcionar una red virtual a un entorno de Azure Container Apps.

  1. Cree un grupo de recursos con el siguiente comando.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Cree el entorno de Container Apps mediante el siguiente comando.

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

Crear un repositorio de GitHub para ejecutar un flujo de trabajo

Para ejecutar un flujo de trabajo, debe crear un repositorio de GitHub que contenga la definición del flujo de trabajo.

  1. Vaya a GitHub e inicie sesión.

  2. Para crear un repositorio, escriba los valores siguientes.

    Configuración Valor
    Owner Seleccione el nombre de usuario de GitHub.
    Nombre del repositorio Escriba un nombre para el repositorio.
    Visibilidad Seleccione Private (Privado).
    Inicializar este repositorio con Seleccione Agregar un archivo LÉAME.

    Deje el resto de los valores como su selección predeterminada.

  3. Seleccione Create repository (Crear repositorio).

  4. En el nuevo repositorio, seleccione Acciones.

  5. Busque la plantilla Flujo de trabajo simple y seleccione Configurar.

  6. Seleccione Confirmar cambios para agregar el flujo de trabajo al repositorio.

El flujo de trabajo se ejecuta en el ejecutor hospedado en GitHub ubuntu-latest e imprime un mensaje en la consola. Más adelante, reemplace el ejecutor hospedado en GitHub por un ejecutor autohospedado.

Obtener un token de acceso personal de GitHub

Para ejecutar un ejecutor autohospedado, debe crear un token de acceso personal (PAT) en GitHub. Cada vez que se inicia un ejecutor, el PAT se usa para generar un token para registrar el ejecutor con GitHub. La regla de escalado del ejecutor de Acciones de GitHub también usa el PAT para supervisar la cola de flujo de trabajo del repositorio e iniciar ejecutores según sea necesario.

Nota:

Los tokens de acceso personal (PAT) tienen una fecha de expiración. Rote periódicamente los tokens para asegurarse de que permanecen válidos (sin expirar) para mantener un servicio ininterrumpido.

  1. En GitHub, seleccione la imagen de perfil en la esquina superior derecha y seleccione Configuración.

  2. Seleccione Developer settings (Configuración para desarrolladores).

  3. En Tokens de acceso personal, seleccione Tokens específicos.

  4. Seleccione Generar nuevo token.

  5. En la pantalla Nuevo token de acceso personal específico, escriba los valores siguientes.

    Configuración Value
    Nombre del token Escriba un nombre para el token.
    Expiración Seleccione 30 días.
    Acceso a los repositorios Seleccione Seleccionar solo repositorios y seleccione el repositorio que creó.

    Escriba los valores siguientes para Permisos de repositorio.

    Configuración Valor
    Acciones Seleccione Solo lectura.
    Administración Seleccione Leer y escribir.
    Metadatos Seleccione Solo lectura.
  6. Seleccione Generar token.

  7. Copie el valor del token.

  8. Defina las variables que se usan para configurar el ejecutor y la regla de escalado más adelante.

    GITHUB_PAT="<GITHUB_PAT>"
    REPO_OWNER="<REPO_OWNER>"
    REPO_NAME="<REPO_NAME>"
    

    Reemplace los marcadores de posición por los siguientes valores:

    Marcador Valor
    <GITHUB_PAT> PAT de GitHub que generó.
    <REPO_OWNER> El propietario del repositorio que creó anteriormente. Este valor suele ser el nombre de usuario de GitHub.
    <REPO_NAME> Nombre del repositorio que creó anteriormente. Este valor es el mismo nombre que especificó en el campo Nombre del repositorio.

Compilar la imagen de contenedor del ejecutor de Acciones de GitHub

Para crear un ejecutor autohospedado, debe crear una imagen de contenedor que ejecute el ejecutor. En esta sección, compilará la imagen de contenedor y la insertará en un registro de contenedor.

Nota:

La imagen que se compila en este tutorial contiene un ejecutor autohospedado básico que es adecuado para ejecutarse como un trabajo de Container Apps. Puede personalizarlo para incluir herramientas o dependencias adicionales que requieran los flujos de trabajo.

  1. Defina un nombre para la imagen de contenedor y el registro.

    CONTAINER_IMAGE_NAME="github-actions-runner:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Reemplace <CONTAINER_REGISTRY_NAME> por un nombre único para crear un registro de contenedor. Los nombres del registro de contenedor deben ser únicos en Azure, deben tener entre 5 y 50 caracteres, y solo pueden incluir números y letras en minúscula.

  2. Cree un registro de contenedor.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. El registro de contenedor debe permitir los tokens de audiencia de Azure Resource Manager (ARM) para la autenticación con el fin de usar la identidad administrada para extraer imágenes.

    Use el siguiente comando para comprobar si se permite que los tokens de ARM accedan a Azure Container Registry (ACR).

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    Si se permiten los tokens de ARM, el comando genera lo siguiente.

    {
      "status": "enabled"
    }
    

    Si status es disabled, permita los tokens de ARM con el comando siguiente.

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. El Dockerfile para crear la imagen del ejecutor está disponible en GitHub. Ejecute el siguiente comando para clonar el repositorio y compilar la imagen de contenedor en la nube mediante el comando az acr build.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.github" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    La imagen ya está disponible en el registro de contenedor.

Creación de una identidad administrada asignada por el usuario

Para evitar el uso de credenciales administrativas, extraiga las imágenes de repositorios privados de Microsoft Azure Container Registry mediante identidades administradas para la autenticación. Cuando sea posible, use una identidad administrada asignada por el usuario para extraer las imágenes.

  1. Creación de una identidad administrada asignada por el usuario. Antes de ejecutar los comandos siguientes, elija el nombre de la identidad administrada y reemplace \<PLACEHOLDER\> por el nombre.

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. Obtenga el id. de recurso de la identidad.

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

Implementar un ejecutor autohospedado como trabajo

Ahora puede crear un trabajo que use para usar la imagen de contenedor. En esta sección, creará un trabajo que ejecuta el ejecutor autohospedado y se autentica con GitHub mediante el PAT que generó anteriormente. El trabajo usa la regla de escalado github-runner para crear ejecuciones de trabajos en función del número de ejecuciones de flujo de trabajo pendientes.

  1. Cree un trabajo en el entorno de Container Apps.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type Event \
        --replica-timeout 1800 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --min-executions 0 \
        --max-executions 10 \
        --polling-interval 30 \
        --scale-rule-name "github-runner" \
        --scale-rule-type "github-runner" \
        --scale-rule-metadata "githubAPIURL=https://api.github.com" "owner=$REPO_OWNER" "runnerScope=repo" "repos=$REPO_NAME" "targetWorkflowQueueLength=1" \
        --scale-rule-auth "personalAccessToken=personal-access-token" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$GITHUB_PAT" \
        --env-vars "GITHUB_PAT=secretref:personal-access-token" "GH_URL=https://github.com/$REPO_OWNER/$REPO_NAME" "REGISTRATION_TOKEN_API_URL=https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/runners/registration-token" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --mi-user-assigned "$IDENTITY_ID" \
        --registry-identity "$IDENTITY_ID"
    

    La siguiente tabla describe los principales parámetros que se usan en el comando.

    Parámetro Descripción
    --replica-timeout La duración máxima que se puede ejecutar una réplica.
    --replica-retry-limit Número de veces que se reintenta una réplica con errores.
    --replica-completion-count El número de réplicas que se completan correctamente antes de que la ejecución de un trabajo se considere correcta.
    --parallelism El número de réplicas que se inician por ejecución de trabajo.
    --min-executions El número mínimo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
    --max-executions El número máximo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
    --polling-interval El intervalo de sondeo en el que se evalúa la regla de escalado.
    --scale-rule-name El nombre de la regla de escalado.
    --scale-rule-type El tipo de regla de escalado que se usa. Para obtener más información sobre el escalador de ejecutores de GitHub, consulte la documentación KEDA.
    --scale-rule-metadata Los metadatos de la regla de escalado. Si usa GitHub Enterprise, actualice githubAPIURL con su dirección URL de API.
    --scale-rule-auth La autenticación de la regla de escalado.
    --secrets Los secretos que se usan para el trabajo.
    --env-vars Las variables de entorno que se usan para el trabajo.
    --registry-server El servidor de registro de contenedor que se usa para el trabajo. En el caso de una instancia de Azure Container Registry, el comando configura automáticamente la autenticación.
    --mi-user-assigned El id. de recurso de la identidad administrada asignada por el usuario para asignar al trabajo.
    --registry-identity El id. de recurso de una identidad administrada para autenticarse con el servidor de registro en lugar de utilizar un nombre de usuario y una contraseña. Si es posible, se crea automáticamente una asignación de función "acrpull" para la identidad.

    La configuración de la regla de escalado define el origen del evento que se supervisa. Las reglas se evalúan en cada intervalo de sondeo para determinar cuántas ejecuciones de trabajos deben desencadenarse. Para más información, consulte Establecimiento de reglas de escalado.

El trabajo controlado por eventos ahora se crea en el entorno de Container Apps.

Ejecutar un flujo de trabajo y comprobar el trabajo

El trabajo está configurado para evaluar la regla de escalado cada 30 segundos. Durante cada evaluación, comprueba el número de ejecuciones de flujo de trabajo pendientes que requieren un ejecutor autohospedado e inicia una nueva ejecución de trabajo para el flujo de trabajo pendiente, hasta un máximo configurado de 10 ejecuciones.

Para comprobar que el trabajo se configuró correctamente, modifique el flujo de trabajo para usar un ejecutor autohospedado y desencadene una ejecución de flujo de trabajo. A continuación, puede ver los registros de ejecución del trabajo para ver la ejecución del flujo de trabajo.

  1. En el repositorio de GitHub, vaya al flujo de trabajo que generó anteriormente. Es un archivo YAML en el directorio .github/workflows.

  2. Seleccione Editar en su lugar.

  3. Actualice la propiedad runs-on a self-hosted:

    runs-on: self-hosted
    
  4. Seleccione Confirmar cambios....

  5. Seleccione Commit changes (Confirmar cambios).

  6. Vaya a la pestaña Acciones.

    Ahora se pone en cola un nuevo flujo de trabajo. En un plazo de 30 segundos, se iniciará la ejecución del trabajo y el flujo de trabajo se completará poco después.

    Espere a que se complete la acción antes de continuar con el paso siguiente.

  7. Enumere las ejecuciones del trabajo para confirmar que se ha creado y completado correctamente una ejecución de trabajo.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

Crear un repositorio y un proyecto de Azure DevOps

Para ejecutar una canalización, necesita un repositorio y un proyecto de Azure DevOps.

  1. Vaya a Azure DevOps e inicie sesión en su cuenta.

  2. Seleccione una organización existente o cree una nueva.

  3. En la página de información general de la organización, seleccione Nuevo proyecto y escriba los valores siguientes.

    Configuración Valor
    Nombre del proyecto Escriba un nombre para el proyecto.
    Visibilidad Seleccione Private (Privado).
  4. Seleccione Crear.

  5. En el panel de navegación lateral, seleccione Repositorios.

  6. En Inicializar rama principal con un ARCHIVO LÉAME o .gitignore, seleccione Agregar un ARCHIVO LÉAME.

  7. Deje el resto de los valores como valores predeterminados y seleccione Inicializar.

Crear un nuevo grupo de agentes

Cree un nuevo grupo de agentes para ejecutar el ejecutor autohospedado.

  1. En el proyecto de Azure DevOps, expanda la barra de navegación izquierda y seleccione Configuración del proyecto.

    Captura de pantalla del botón de configuración del proyecto de Azure DevOps.

  2. En la sección Canalizaciones del menú de navegación Configuración del proyecto, seleccione Grupos de agentes.

    Captura de pantalla del botón de grupos de agentes de Azure DevOps.

  3. Seleccione Agregar grupo y escriba los valores siguientes.

    Configuración Valor
    Grupo que se va a vincular Seleccione Nuevo.
    Tipo de grupo Seleccione Autohospedado.
    Nombre Escriba container-apps.
    Concesión de permiso de acceso a todas las canalizaciones Seleccione esta casilla de verificación.
  4. Seleccione Crear.

Obtener un token de acceso personal de Azure DevOps

Para ejecutar un ejecutor autohospedado, debe crear un token de acceso personal (PAT) en Azure DevOps. El PAT se usa para autenticar el ejecutor con Azure DevOps. También lo usa la regla de escalado para determinar el número de ejecuciones de canalización pendientes y desencadenar nuevas ejecuciones de trabajos.

[!NOTE]

Los tokens de acceso personal (PAT) tienen una fecha de expiración. Rote periódicamente los tokens para asegurarse de que permanecen válidos (sin expirar) para mantener un servicio ininterrumpido.

  1. En Azure DevOps, seleccione Configuración de usuario junto a la imagen de perfil en la esquina superior derecha.

  2. Seleccione Personal access tokens (Tokens de acceso personal).

  3. En la página Tokens de acceso personal, seleccione Nuevo token y escriba los valores siguientes.

    Configuración Value
    Nombre Escriba un nombre para el token.
    Organización Seleccione la organización que eligió o creó anteriormente.
    Ámbitos Seleccione Definición personalizada.
    Mostrar todos los ámbitos Seleccione Mostrar todos los ámbitos.
    Grupos de agentes (leer y administrar) Seleccione Grupos de agentes (leer y administrar).

    Deje sin seleccionar todos los demás ámbitos.

  4. Seleccione Crear.

  5. Copie el valor del token en una ubicación segura.

    No se puede recuperar el token después de salir de la página.

  6. Defina las variables que se usan para configurar los trabajos de Container Apps más adelante.

    AZP_TOKEN="<AZP_TOKEN>"
    ORGANIZATION_URL="<ORGANIZATION_URL>"
    AZP_POOL="container-apps"
    REGISTRATION_TOKEN_API_URL="<YOUR_REGISTRATION_TOKEN_API_URL>"
    

    Reemplace los marcadores de posición por los siguientes valores:

    Marcador Valor Comentarios
    <AZP_TOKEN> PAT de Azure DevOps que generó.
    <ORGANIZATION_URL> Dirección URL de la organización de Azure DevOps. Asegúrese de que no haya ningún / final al final de la dirección URL. Por ejemplo, https://dev.azure.com/myorg o https://myorg.visualstudio.com.
    <YOUR_REGISTRATION_TOKEN_API_URL> Dirección URL de la API del token de registro en el archivo entrypoint.sh. Por ejemplo, "https://myapi.example.com/get-token".

Compilar la imagen de contenedor del agente de Azure Pipelines

Para crear un agente autohospedado, debe crear una imagen de contenedor que ejecute el agente. En esta sección, compilará la imagen de contenedor y la insertará en un registro de contenedor.

Nota:

La imagen que se compila en este tutorial contiene un agente autohospedado básico que es adecuado para ejecutarse como un trabajo de Container Apps. Puede personalizarlo para incluir herramientas o dependencias adicionales que requieran las canalizaciones.

  1. De nuevo en el terminal, defina un nombre para la imagen de contenedor y el registro.

    CONTAINER_IMAGE_NAME="azure-pipelines-agent:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Reemplace <CONTAINER_REGISTRY_NAME> por un nombre único para crear un registro de contenedor.

    Los nombres del registro de contenedor deben ser únicos en Azure, deben tener entre 5 y 50 caracteres, y solo pueden incluir números y letras en minúscula.

  2. Cree un registro de contenedor.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. El Dockerfile para crear la imagen del ejecutor está disponible en GitHub. Ejecute el siguiente comando para clonar el repositorio y compilar la imagen de contenedor en la nube mediante el comando az acr build.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.azure-pipelines" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    La imagen ya está disponible en el registro de contenedor.

Crear un agente autohospedado de marcador de posición

Para poder ejecutar un agente autohospedado en el nuevo grupo de agentes, debe crear un agente de marcador de posición. El agente de marcador de posición garantiza que el grupo de agentes está disponible. Las canalizaciones que usan el grupo de agentes producen un error cuando no hay ningún agente de marcador de posición.

Puede ejecutar un trabajo manual para registrar un agente de marcador de posición sin conexión. El trabajo se ejecuta una vez y se puede eliminar. El agente de marcador de posición no consume ningún recurso en Azure Container Apps ni En Azure DevOps.

  1. Cree un trabajo manual en el entorno de Container Apps que cree el agente de marcador de posición.

    az containerapp job create -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
        --trigger-type Manual \
        --replica-timeout 300 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
        --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" "AZP_PLACEHOLDER=1" "AZP_AGENT_NAME=placeholder-agent" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"
    

    La siguiente tabla describe los principales parámetros que se usan en el comando.

    Parámetro Descripción
    --replica-timeout La duración máxima que se puede ejecutar una réplica.
    --replica-retry-limit Número de veces que se reintenta una réplica con errores.
    --replica-completion-count El número de réplicas que se completan correctamente antes de que la ejecución de un trabajo se considere correcta.
    --parallelism El número de réplicas que se inician por ejecución de trabajo.
    --secrets Los secretos que se usan para el trabajo.
    --env-vars Las variables de entorno que se usan para el trabajo.
    --registry-server El servidor de registro de contenedor que se usa para el trabajo. En el caso de una instancia de Azure Container Registry, el comando configura automáticamente la autenticación.

    Establecer la variable de entorno AZP_PLACEHOLDER configura el contenedor del agente para que se registre como un agente de marcador de posición sin conexión sin ejecutar un trabajo.

  2. Ejecute el trabajo manual para crear el agente de marcador de posición.

    az containerapp job start -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    
  3. Enumere las ejecuciones del trabajo para confirmar que se ha creado y completado correctamente una ejecución de trabajo.

    az containerapp job execution list \
        --name "$PLACEHOLDER_JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    
  4. Compruebe que el agente de marcador de posición se creó en Azure DevOps.

    1. En Azure DevOps, vaya al proyecto.
    2. Seleccione Configuración del proyecto>Grupos de agentes>container-apps>Agentes.
    3. Confirme que aparece un agente de marcador de posición denominado placeholder-agent y su estado es sin conexión.
  5. El trabajo no vuelve a ser necesario. Puede eliminarla.

    az containerapp job delete -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    

Crear un agente autohospedado como un trabajo controlado por un evento

Ahora que tiene un agente de marcador de posición, puede crear un agente autohospedado. En esta sección, creará un trabajo controlado por un evento que ejecuta un agente autohospedado cuando se desencadena una canalización.

az containerapp job create -n "$JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
    --trigger-type Event \
    --replica-timeout 1800 \
    --replica-retry-limit 0 \
    --replica-completion-count 1 \
    --parallelism 1 \
    --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
    --min-executions 0 \
    --max-executions 10 \
    --polling-interval 30 \
    --scale-rule-name "azure-pipelines" \
    --scale-rule-type "azure-pipelines" \
    --scale-rule-metadata "poolName=$AZP_POOL" "targetPipelinesQueueLength=1" \
    --scale-rule-auth "personalAccessToken=personal-access-token" "organizationURL=organization-url" \
    --cpu "2.0" \
    --memory "4Gi" \
    --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
    --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" \
    --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"

En la tabla siguiente se describen los parámetros de regla de escalado usados en el comando.

Parámetro Descripción
--min-executions El número mínimo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
--max-executions El número máximo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
--polling-interval El intervalo de sondeo en el que se evalúa la regla de escalado.
--scale-rule-name El nombre de la regla de escalado.
--scale-rule-type El tipo de regla de escalado que se usa. Para obtener más información sobre el escalador de Azure Pipelines, consulte la documentación de KEDA.
--scale-rule-metadata Los metadatos de la regla de escalado.
--scale-rule-auth La autenticación de la regla de escalado.

La configuración de la regla de escalado define el origen del evento que se supervisa. Las reglas se evalúan en cada intervalo de sondeo para determinar cuántas ejecuciones de trabajos deben desencadenarse. Para más información, consulte Establecimiento de reglas de escalado.

El trabajo controlado por eventos ahora se crea en el entorno de Container Apps.

Ejecutar una canalización y comprobar el trabajo

Una vez configurado un trabajo de agente autohospedado, puede ejecutar una canalización y verificar que funciona correctamente.

  1. En el panel de navegación izquierdo del proyecto de Azure DevOps, vaya a Canalizaciones.

  2. Seleccione el botón Crear canalización.

  3. Seleccione GIT de Azure Repos como ubicación del código.

  4. Seleccione el repositorio que ha creado anteriormente.

  5. Seleccione Canalización inicial.

  6. En la canalización YAML, cambie el pool de vmImage: ubuntu-latest a name: container-apps.

    pool:
      name: container-apps
    
  7. Seleccione Guardar y ejecutar.

    La canalización se ejecuta y usa el trabajo del agente autohospedado que creó en el entorno de Container Apps.

  8. Enumere las ejecuciones del trabajo para confirmar que se ha creado y completado correctamente una ejecución de trabajo.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

Sugerencia

¿Tiene problemas? Háganoslo saber en GitHub abriendo una incidencia en el repositorio de Azure Container Apps.

Limpieza de recursos

Cuando haya terminado, ejecute el siguiente comando para eliminar el grupo de recursos que contiene los recursos de Container Apps.

Precaución

El comando siguiente elimina el grupo de recursos especificado y todos los recursos que contiene. Si existen recursos en el grupo de recursos especificado que están fuera del ámbito de este tutorial, también se eliminarán.

az group delete \
    --resource-group $RESOURCE_GROUP

Para eliminar el repositorio de GitHub, consulte Eliminar un repositorio.

Pasos siguientes