Compartir a través de


Solución de problemas de ejecuciones de canalización

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Si la ejecución de la canalización no se completa, use la información de diagnóstico y los registros de la página de resumen de ejecución de la canalización para solucionar el problema. En esta guía se proporcionan instrucciones para diagnosticar errores de canalización mediante registros, herramientas de análisis de errores y técnicas comunes de solución de problemas. Aprenda a identificar las causas raíz e implementar soluciones para que sus canalizaciones funcionen sin problemas.

Captura de pantalla de la página de resumen de ejecución de la canalización con información de diagnóstico.

Visualización de registros

Seleccione el mensaje de error para ver los registros de la tarea que no se completó.

Captura de pantalla de un mensaje de error de tarea en la página de resumen de ejecución de la canalización.

La página de registros muestra el error seleccionado. En este ejemplo, hay un error en la cmd-line tarea, donde el echo comando se escribe como ech.

Captura de pantalla del registro de diagnóstico de la ejecución de la canalización.

Para ver el registro sin procesar de la tarea, elija Ver registro sin procesar y puede buscar en el registro mediante Buscar.

Captura de pantalla de las opciones de vista de registros en Azure DevOps.

Examine los registros de la tarea con errores en busca de información de error y pistas sobre por qué se produce un error en la tarea. De forma predeterminada, los registros no detallados se generan mediante una ejecución de canalización. Si los registros predeterminados no indican la causa del problema, puede obtener más información configurando registros detallados.

Página de análisis de errores

La asistencia para la solución de problemas está disponible mediante la página Análisis de errores . Mueva el ratón sobre la línea de información de error y elija el icono Ver análisis .

Captura de pantalla del icono de análisis de vista en la página de resumen de ejecución de la canalización.

Captura de pantalla del icono de análisis de vista para Azure DevOps Server.

Elija Ver agente para agentes autohospedados (o Acerca de la imagen del agente hospedado para agentes hospedados por Microsoft) para ver más información sobre el agente usado para ejecutar la canalización y Ver registro para ver los registros de ejecución de la canalización.

Captura de pantalla de la página de análisis de errores en el portal de Azure DevOps.

Elija el nombre de la tarea en Detalles en tiempo de ejecución para ver información sobre la tarea.

Captura de pantalla de los detalles de la tarea del análisis de errores.

En este ejemplo, puede ver que hay un error en el ValueScriptarchivo . Elija Acerca de esta tarea para ver la documentación de la tarea.

Si el problema no es evidente en la página de resumen de ejecución de la canalización o en la exploración de los registros, consulte la siguiente sección Problemas comunes y consulte Revisión de registros para diagnosticar problemas de canalización para obtener información sobre cómo descargar registros completos que incluyen más información de diagnóstico.

Problemas comunes

Información de tareas para ejecuciones de canalización fallidas

Azure DevOps proporciona una configuración de Task Insights for Failed Pipeline Runs que , cuando está habilitada, proporciona notificaciones emergentes de errores de compilación con un vínculo para ver un informe.

Captura de pantalla de las métricas de información de la tarea.

Para configurar esta configuración, vaya a Vista previa de características, busque Información de tareas para ejecuciones de canalización con errores y elija la configuración deseada.

Captura de pantalla de la configuración de información de tareas para ejecuciones de canalización fallidas.

Notificaciones de ejecuciones fallidas

Azure DevOps incluye notificaciones integradas para las ejecuciones de canalizaciones con errores. Para habilitar las notificaciones:

  1. Ve a Configuración del> proyecto:Notificaciones de tu proyecto.
  2. Elija el tipo de notificación que desea recibir. Para recibir una notificación cada vez que se produzca un error en la ejecución de una canalización, seleccione Se produce un error en una compilación.

Captura de pantalla de las notificaciones en la configuración del proyecto.

Esta canalización necesita permiso para acceder a un recurso antes de que esta ejecución pueda continuar

Si parece que la canalización no se inicia o recibe un mensaje de error como This pipeline needs permission to access a resource before this run can continue, compruebe si la canalización está esperando una autorización para que un recurso, como una conexión de servicio o un grupo de agentes, la ejecute.

  1. Vaya a la canalización e inicie manualmente una ejecución.
  2. Aparece el mensaje Esta canalización necesita permiso para acceder a un recurso antes de que esta ejecución pueda continuar . Seleccione Ver junto al mensaje.
  3. En la pantalla Esperando revisión, seleccione Permitir y, en la pantalla de confirmación, vuelva a seleccionar Permitir.

Esta acción agrega explícitamente la canalización como usuario autorizado del recurso.

Hay dos formas de autorizar a las canalizaciones para que accedan al grupo de agentes.

Autorizar canalizaciones específicas

Puede autorizar individualmente canalizaciones específicas para que se ejecuten en un grupo de agentes siguiendo el procedimiento de la sección anterior cuando reciba un mensaje como This pipeline needs permission to access a resource before this run can continue.

También puede agregar y quitar manualmente canalizaciones de la lista autorizada mediante el siguiente procedimiento. Este procedimiento se realiza en el nivel de proyecto de la organización de Azure DevOps.

  1. En Azure DevOps, vaya a Configuración del proyecto, Grupos de agentes, elija el grupo autohospedado y elija Seguridad.
  2. Elija + agregar una canalización a la lista autorizada.
  3. Elija X(Revocar acceso) para eliminar una canalización de la lista autorizada.

Configurar el acceso abierto

Algunos recursos permiten configurar el acceso abierto para que cada nueva definición de canalización no requiera autorización explícita.

La configuración del acceso abierto requiere permisos de administrador del proyecto .

Para configurar el acceso abierto para grupos de agentes:

  1. En Azure DevOps, vaya a Configuración del proyecto, Grupos de agentes, elija el grupo autohospedado y elija Seguridad.
  2. Elija Más acciones, Acceso abierto, para habilitar el acceso abierto y elija Acceso abierto de nuevo para confirmar.
  3. Para revocar el acceso abierto, elija Restringir permiso.

Para comprobar si el acceso abierto está disponible para otros tipos de recursos, consulte Administración de la seguridad en Azure Pipelines y busque Acceso abierto.

Para obtener más información sobre el acceso abierto para grupos de agentes, consulte Establecer permisos de canalización para un grupo de agentes individual y Permisos de canalización.

Tiempo de espera del trabajo

Una canalización puede ejecutarse durante mucho tiempo y, a continuación, producir un error debido al tiempo de espera del trabajo. El tiempo de espera del trabajo depende en gran medida del agente que se utilice. Los agentes hospedados de Microsoft gratuitos tienen un tiempo de espera máximo de 60 minutos por trabajo para un repositorio privado y 360 minutos para un repositorio público.

Para aumentar el tiempo de espera máximo de un trabajo, puede optar por cualquiera de las siguientes opciones.

  • Compre un agente alojado de Microsoft que le brinde 360 minutos para todos los trabajos, independientemente del repositorio utilizado
  • Use un agente autohospedado para descartar problemas de tiempo de espera debido al agente.

Obtén más información sobre el tiempo de espera del trabajo.

Nota:

Si se agota el tiempo de espera de los trabajos de agente hospedados por Microsoft, compruebe que el tiempo de espera de la canalización esté establecido en un valor mayor que el tiempo de espera máximo de un trabajo. Para comprobarlo, consulte Tiempos de espera.

Problemas al descargar el código

Mi canalización falla en un paso de pago

Si usa un checkout paso en un repositorio de Git de Azure Repos de su organización que se encuentra en un proyecto diferente al de la canalización, asegúrese de que la opción Limitar el ámbito de autorización de trabajos al proyecto actual esté deshabilitada o siga los pasos descritos en Identidades de compilación con ámbito para asegurarse de que la canalización tiene acceso al repositorio.

Cuando la canalización no puede acceder al repositorio debido a un ámbito de autorización de trabajo limitado, recibirá el error Git fetch failed with exit code 128 y los registros contendrán una entrada similar a Remote: TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting.

Si se produce un error en la canalización inmediatamente con Could not find a project that corresponds with the repository, asegúrese de que el proyecto y el nombre del repositorio sean correctos en el checkout paso o en la declaración de recursos del repositorio.

Problemas de Control de versiones de Team Foundation (TFVC)

Obtener fuentes que no descargan algunos archivos

Es posible que vea un mensaje en el registro "Todos los archivos actualizados" del tf get comando. Compruebe que la identidad del servicio integrado tiene permiso para descargar los orígenes. El servicio de compilación de la colección de proyectos de identidad o el servicio de compilación de proyectos necesitan permiso para descargar los orígenes, en función del ámbito de autorización seleccionado en la pestaña General de la canalización de compilación. En la interfaz de usuario web de control de versiones es posible examinar los archivos del proyecto en cualquier nivel de la jerarquía de carpetas y comprobar la configuración de seguridad.

Obtención de orígenes a través de Team Foundation Proxy

La manera más sencilla de configurar el agente para obtener orígenes a través de un proxy de Team Foundation es establecer una variable TFSPROXY de entorno que apunte al servidor proxy de TFVC para la ejecución del agente como usuario.

Windows:

    set TFSPROXY=http://tfvcproxy:8081
    setx TFSPROXY=http://tfvcproxy:8081 // If the agent service is running as NETWORKSERVICE or any service account you can't easily set user level environment variable

macOS y Linux:

    export TFSPROXY=http://tfvcproxy:8081

Se produce un error en mi canalización en un paso de la línea de comandos, como MSBUILD

Es útil limitar si un error de compilación o versión es el resultado de un problema de producto de Azure Pipelines (agente o tareas). Los errores de compilación y versión también pueden deberse a comandos externos.

Compruebe los registros para ver la línea de comandos exacta ejecutada por la tarea que ha fallado. Si se intenta ejecutar el comando localmente desde la línea de comandos, es posible que se reproduzca el problema. Puede ser útil ejecutar el comando localmente desde su propio equipo o iniciar sesión en el equipo y ejecutar el comando como la cuenta de servicio.

Por ejemplo, ¿el problema se produce durante la parte de MSBuild de la canalización de compilación (por ejemplo, usa la tarea de compilación de MSBuild o Visual Studio)? Si es así, intente ejecutar el mismo comando de MSBuild en un equipo local con los mismos argumentos. Si puede reproducir el problema en un equipo local, los siguientes pasos son investigar el problema de MSBuild .

Diseño de archivos

La ubicación de las herramientas, las bibliotecas, los encabezados y otros elementos necesarios para una compilación puede ser diferente en el agente hospedado que en el equipo local. Si se produce un error en una compilación porque no puede encontrar uno de estos archivos, puede usar los siguientes scripts para inspeccionar el diseño en el agente. Esto podría ayudarte a localizar el archivo que falta.

Cree una nueva canalización de YAML en una ubicación temporal (por ejemplo, un nuevo repositorio creado con el fin de solucionar problemas). Tal como está escrito, el script busca directorios en su ruta. Opcionalmente, puede editar la SEARCH_PATH= línea para buscar en otros lugares.

# Script for Linux and macOS
pool: { vmImage: ubuntu-latest } # or whatever pool you use
steps:
- checkout: none
- bash: |
    SEARCH_PATH=$PATH  # or any colon-delimited list of paths
    IFS=':' read -r -a PathDirs <<< "$SEARCH_PATH"
    echo "##[debug] Found directories"
    for element in "${PathDirs[@]}"; do
        echo "$element"
    done;
    echo;
    echo;  
    echo "##[debug] Found files"
    for element in "${PathDirs[@]}"; do
        find "$element" -type f
    done
# Script for Windows
pool: { vmImage: windows-2019 } # or whatever pool you use
steps:
- checkout: none
- powershell: |
    $SEARCH_PATH=$Env:Path
    Write-Host "##[debug] Found directories"
    ForEach ($Dir in $SEARCH_PATH -split ";") {
      Write-Host "$Dir"
    }
    Write-Host ""
    Write-Host ""
    Write-Host "##[debug] Found files"
    ForEach ($Dir in $SEARCH_PATH -split ";") {
      Get-ChildItem $Dir -File -ErrorAction Continue | ForEach-Object -Process {
        Write-Host $_.FullName
      }
    }

Diferencias entre el símbolo del sistema local y el agente

Tenga en cuenta que existen algunas diferencias cuando se ejecuta un comando en un equipo local y cuando se ejecuta una compilación o versión en un agente. Si el agente está configurado para ejecutarse como un servicio en Linux, macOS o Windows, no se está ejecutando dentro de una sesión interactiva con inicio de sesión. Sin una sesión interactiva con sesión iniciada, existe la interacción con la interfaz de usuario y otras limitaciones.

Errores de archivo o carpeta en uso

File or folder in use Los errores se indican mediante mensajes de error como:

  • Access to the path [...] is denied.
  • The process cannot access the file [...] because it is being used by another process.
  • Access is denied.
  • Can't move [...] to [...]

Pasos para solucionar problemas:

Detección de archivos y carpetas en uso

En Windows, herramientas como Process Monitor pueden ser para capturar un rastro de eventos de archivos en un directorio específico. O bien, para obtener una instantánea en el tiempo, se pueden usar herramientas como Process Explorer o Handle .

Exclusión de antivirus

El software antivirus que escanea sus archivos puede causar errores de archivo o carpeta en uso durante una compilación o versión. Agregar una exclusión de antivirus para el directorio de agentes y la "carpeta de trabajo" configurada puede ayudar a identificar el software antivirus como el proceso que interfiere.

MSBuild y /nodeReuse:false

Si invoca MSBuild durante la compilación, asegúrese de pasar el argumento /nodeReuse:false (forma /nr:falseabreviada ). De lo contrario, los procesos de MSBuild continúan ejecutándose una vez completada la compilación. Los procesos permanecen durante algún tiempo en previsión de una posible construcción posterior.

Esta característica de MSBuild puede interferir con los intentos de eliminar o mover un directorio, debido a un conflicto con el directorio de trabajo de los procesos de MSBuild.

Las tareas de compilación de MSBuild y Visual Studio ya se agregan /nr:false a los argumentos pasados a MSBuild. Sin embargo, si invoca MSBuild desde su propio script, deberá especificar el argumento.

MSBuild y /maxcpucount:[n]

De forma predeterminada, las tareas de compilación, como MSBuild y Visual Studio Build , ejecutan MSBuild con el /m modificador. En algunos casos, esto puede causar problemas, como problemas de acceso a varios archivos de proceso.

Intente agregar el argumento a las tareas de /m:1 compilación para obligar a MSBuild a ejecutar solo un proceso a la vez.

Es posible que se produzcan problemas de archivo en uso al aprovechar la característica de proceso simultáneo de MSBuild. Si no se especifica el argumento /maxcpucount:[n] (forma /m:[n]abreviada), se indica a MSBuild que use un único proceso. Si usa las tareas de compilación de MSBuild o Visual Studio, es posible que tenga que especificar "/m:1" para invalidar el argumento "/m" que se agrega de forma predeterminada.

Errores de MSBuild intermitentes o incoherentes

Si experimenta errores de MSBuild intermitentes o incoherentes, intente indicar a MSBuild que use solo un proceso único. Los errores intermitentes o incoherentes pueden indicar que la configuración de destino es incompatible con la característica de proceso simultáneo de MSBuild. Vea MSBuild y /maxcpucount:[n].

El proceso deja de responder

El proceso deja de responder a las causas y a los pasos de solución de problemas:

A la espera de la entrada

Un proceso que deja de responder puede indicar que un proceso está esperando entradas.

La ejecución del agente desde la línea de comandos de una sesión interactiva iniciada puede ayudar a identificar si un proceso está solicitando una entrada con un cuadro de diálogo.

La ejecución del agente como servicio puede ayudar a eliminar los programas para que no soliciten entradas. Por ejemplo, en .NET, los programas pueden basarse en el valor booleano System.Environment.UserInteractive para determinar si se debe solicitar. Cuando el agente se ejecuta como un servicio de Windows, el valor es false.

Volcado de procesos

El análisis de un volcado del proceso puede ayudar a identificar lo que está esperando un proceso interbloqueado.

Proyecto WiX

La compilación de un proyecto de WiX cuando los registradores personalizados de MSBuild están habilitados puede hacer que WiX se bloquee en espera en el flujo de salida. Agregar el argumento /p:RunWixToolsOutOfProc=true MSBuild adicional soluciona el problema.

Finales de línea para múltiples plataformas

Al ejecutar canalizaciones en varias plataformas, a veces puede encontrar problemas con diferentes finales de línea. Históricamente, Linux y macOS usaban caracteres de salto de línea (LF), mientras que Windows usaba un retorno de carro más un salto de línea (CRLF). Git intenta compensar la diferencia haciendo que las líneas terminen automáticamente en LF en el repositorio pero CRLF en el directorio de trabajo en Windows.

La mayoría de las herramientas de Windows están bien con finales de solo LF, y este comportamiento automático puede causar más problemas de los que resuelve. Si encuentra problemas basados en finales de línea, le recomendamos que configure Git para que prefiera LF en todas partes. Para hacer esto, agregue un .gitattributes archivo a la raíz de su repositorio. En ese archivo, agregue la siguiente línea:

* text eol=lf

Variables que tienen ' (comilla simple) anexado

Si la canalización incluye un script de Bash que establece variables mediante el ##vso comando, es posible que vea otro ' anexado al valor de la variable que estableció. Esto se produce debido a una interacción con set -x. La solución consiste en deshabilitar set -x temporalmente antes de establecer una variable. La sintaxis Bash para hacer esta operación es set +x.

set +x
echo ##vso[task.setvariable variable=MY_VAR]my_value
set -x

¿Por qué ocurre esto?

Muchos scripts de Bash incluyen el comando para ayudar con la set -x depuración. Bash rastrea exactamente qué comando se ejecutó y lo repite en stdout. Esto hace que el agente vea el ##vso comando dos veces, y la segunda vez, Bash habrá agregado el ' carácter al final.

Por ejemplo, considere esta canalización:

steps:
- bash: |
    set -x
    echo ##vso[task.setvariable variable=MY_VAR]my_value

En stdout, el agente ve dos líneas:

##vso[task.setvariable variable=MY_VAR]my_value
+ echo '##vso[task.setvariable variable=MY_VAR]my_value'

Cuando el agente vea la primera línea, MY_VAR se establecerá en el valor correcto, "my_value". Sin embargo, cuando ve la segunda línea, el agente procesa todo hasta el final de la línea. MY_VAR se establece en "my_value".

Las bibliotecas no se instalan para la aplicación Python cuando se ejecuta el script

Cuando se implementa una aplicación de Python, en algunos casos, se ejecuta una canalización de CI/CD y el código se implementa correctamente, pero el archivo requirements.txt responsable de instalar todas las bibliotecas de dependencias no se ejecuta.

Para instalar las dependencias, use un script posterior a la implementación en la tarea de implementación de App Service. En el ejemplo siguiente se muestra el comando que debe utilizar en el script posterior a la implementación. Puede actualizar el script para su escenario.

D:\home\python364x64\python.exe -m pip install -r requirements.txt

Para solucionar problemas relacionados con las conexiones de servicio, consulte Solución de problemas de conexión de servicio. Para solucionar problemas específicos de conexiones de servicio mediante la identidad de carga de trabajo para la autenticación, consulte Solución de problemas de conexiones de servicio de identidad de carga de trabajo.

Pipeline dejó de recibir noticias del agente

Si se produce un error en la canalización con un mensaje como We stopped hearing from agent <agent name>. Verify the agent machine is running and has a healthy network connection., compruebe la utilización de recursos del agente para ver si el equipo del agente se está quedando sin recursos. A partir de Sprint 228, los registros de Azure Pipelines contienen métricas de uso de recursos para cada paso.

Al usar Azure DevOps Services, puede ver el uso de recursos en los registros, incluido el uso del disco, el uso de memoria y el uso de la CPU, habilitando los registros detallados. Cuando se complete la canalización, busque en losAgent environment resources registros las entradas de cada paso.

2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%

Para obtener información sobre cómo capturar registros de utilización de recursos adicionales, consulte Capturar detalles de utilización de recursos.

Habilitación del Explorador de Storage para implementar contenido estático como .css y .js en un sitio web estático desde Azure DevOps a través de Azure Pipelines

En este escenario, puede usar la tarea Copia de archivos de Azure para cargar contenido en el sitio web. Puede usar cualquiera de las herramientas descritas en Carga de contenido para cargar contenido en el contenedor web.

Pasos siguientes