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, puede usar la información de diagnóstico y los registros proporcionados por la página de resumen de ejecución de canalización para ayudar a solucionar el problema.

Captura de pantalla de la página de resumen de ejecución de la canalización.

Visualización de registros

Seleccione el mensaje de error para ver los registros de la tarea que no se pudo completar.

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

Se muestra la página de registros, con el error seleccionado. En este ejemplo, se produce un error en la tarea cmd-line, donde el comando echose escribe como ech.

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

Para ver el registro sin procesar de la tarea, elija Ver registro sin procesar. Además, 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 para obtener información sobre los errores y averiguar por qué se produce un error en la tarea. De forma predeterminada, una ejecución de canalización genera registros no detallados. Si los registros predeterminados no indican la causa del problema, puede obtener más información mediante la configuración de registros detallados.

Página de análisis de errores

La página Análisis de errores le ayuda a solucionar problemas. Mueva el mouse 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 de 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 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 siguiente Detalles en tiempo de ejecución para ver información sobre la tarea.

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

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

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

Problemas comunes

Información de tareas para ejecuciones de canalización con errores

Azure DevOps proporciona una configuración de Conclusiones de tareas para ejecuciones de canalización con errores 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 tareas.

Para configurar esta opción, vaya a Características en vista previa, busque Conclusiones de tareas para ejecuciones de canalización con errores y elija la configuración que desee.

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

Agotamiento del tiempo de espera del trabajo

Una canalización se puede ejecutar 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 usa. 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.

  • Comprar un agente hospedado de Microsoft que le proporcionará 360 minutos para todos los trabajos, independientemente del repositorio usado
  • Use un agente autohospedado para descartar problemas de tiempo de espera debido al agente.

Obtenga más información sobre el tiempo de espera de un trabajo.

Nota:

Si los trabajos del agente hospedado por Microsoft están agotando el tiempo de espera, asegúrese de que no ha especificado un tiempo de espera de canalización menor que el tiempo de espera máximo de un trabajo. Para comprobarlo, consulte Tiempos de espera.

Problemas al descargar código

Se produce un error en la canalización en un paso de la restauración

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

Cuando la canalización no pueda 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 la canalización produce un error inmediatamente con Could not find a project that corresponds with the repository, asegúrese de que el nombre del proyecto y del repositorio sean correctos en el paso checkout o en la declaración de recursos del repositorio.

Problemas de Control de versiones de Team Foundation (TFVC)

Obtención de orígenes que no descargan algunos archivos

Esto podría incluir un mensaje en el registro "Todos los archivos están actualizados" del comando tf get. Compruebe que la identidad de servicio integrada tenga permiso para descargar los orígenes. El servicio de compilación de colección de proyectos de identidad o el servicio de compilación de proyectos necesitarán 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 fácil de configurar el agente para obtener orígenes a través de Team Foundation Proxy es establecer la variable de entorno TFSPROXY que apunta al servidor proxy 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 la canalización en un paso de la línea de comandos, como MSBUILD

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

Compruebe los registros de la línea de comandos exacta ejecutada por la tarea con errores. Intentar ejecutar el comando localmente desde la línea de comandos puede reproducir el problema. Puede resultar útil ejecutar el comando localmente desde su propia máquina o iniciar sesión en la máquina y ejecutar el comando como cuenta de servicio.

Por ejemplo, ¿el problema se produce durante la parte de MSBuild de la canalización de compilación (por ejemplo, está usando la tarea MSBuild o Visual Studio Build)? 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 pasos siguientes son investigar el problema de MSBuild.

Diseño del archivo

La ubicación de herramientas, bibliotecas, 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 encuentra uno de estos archivos, puede usar los siguientes scripts para inspeccionar el diseño en el agente. Esto puede ayudarle a rastrear el archivo que falta.

Cree una canalización YAML en una ubicación temporal (por ejemplo, un nuevo repositorio creado para solucionar problemas). Como se ha escrito, el script busca directorios en la ruta de acceso. Opcionalmente, puede editar la línea de SEARCH_PATH= 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 algunas diferencias están en vigor al ejecutar 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 ejecuta en una sesión de inicio de sesión interactiva. Sin una sesión de inicio de sesión interactiva, existe la interacción de la interfaz de usuario y otras limitaciones.

Errores de archivos o carpetas en uso

Los errores File or folder in use a menudo 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, las herramientas como Monitor de procesos pueden ser para capturar un seguimiento de eventos de archivo en un directorio específico. O bien, para una instantánea en el tiempo, se pueden usar herramientas como Explorador de procesos o Identificador.

Exclusión antivirus

El análisis de software antivirus de los archivos puede provocar errores en archivos o carpetas en uso durante una compilación o versión. Agregar una exclusión antivirus para el directorio del agente y configurar la "carpeta de trabajo" puede ayudar a identificar el software antivirus como proceso de interferencia.

MSBuild y /nodeReuse:false

Si invoca MSBuild durante la compilación, asegúrese de pasar el argumento /nodeReuse:false (formato corto /nr:false). De lo contrario, los procesos de MSBuild permanecerán en ejecución una vez completada la compilación. Los procesos permanecen durante algún tiempo en previsión de una posible compilació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 MSBuild y Visual Studio Build ya 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 modificador /m. En algunos casos, esto puede causar problemas de tipo de acceso a archivos de proceso.

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

Al aprovechar la característica de proceso simultáneo de MSBuild, pueden aparecer problemas de archivos en uso. No especificar el argumento /maxcpucount:[n] (formato corto /m:[n]) indica a MSBuild que use un solo proceso. Si usa las tareas MSBuild o Visual Studio Build, es posible que tenga que especificar "/m:1" para invalidar el argumento "/m" que se agrega de forma predeterminada.

Errores intermitentes o incoherentes de MSBuild

Si experimenta errores intermitentes o incoherencias de MSBuild, intente indicar a MSBuild que use un solo proceso. Si nota errores intermitentes o incoherencias, puede ser que la configuración de destino no sea compatible con la característica de proceso simultáneo de MSBuild. Consulte MSBuild y /maxcpucount:[n].

El proceso deja de responder

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

Esperando entrada

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

Ejecutar el agente desde la línea de comandos de una sesión interactiva donde se haya iniciado sesión puede ayudar a identificar si un proceso se solicita con un cuadro de diálogo para la entrada.

La ejecución del agente como servicio puede ayudar a eliminar los programas para solicitar entrada. Por ejemplo, en .NET, los programas pueden depender del 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 memoria del proceso

Analizar un volcado de memoria del proceso puede ayudar a identificar en qué espera un proceso de interbloqueo.

Proyecto de WiX

La creación de un proyecto de WiX cuando los registradores de MSBuild personalizados están habilitados, puede hacer que WiX sufra un interbloqueo esperando en el flujo de salida. Al agregar el argumento /p:RunWixToolsOutOfProc=true adicional de MSBuild, se solucionará el problema.

Finales de línea para varias 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 finalicen automáticamente en LF en el repositorio, pero en 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 lo que resuelve. Si encuentra problemas basados en finales de línea, se recomienda configurar Git para que prefiera LF en todas partes. Para habilitarla, agregue un archivo .gitattributes a la raíz del repositorio. En ese archivo, agregue la siguiente línea:

* text eol=lf

Variables que tienen ' (comilla simple) anexada

Si la canalización incluye un script de Bash que establece variables mediante el comando ##vso, es posible que vea un ' adicional anexado al valor de la variable establecida. 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 set -x para ayudar con la depuración. Bash rastreará exactamente qué comando se ejecutó y lo repetirá en stdout. Esto hará que el agente vea el comando ##vso 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 verá 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 procesará todo hasta el final de la línea. MY_VAR se establecerá en "my_value".

Las bibliotecas no se instalan para la aplicación de 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 usar 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.

La canalización ha detenido la escucha 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 el uso de recursos del agente para comprobar si la máquina del agente se está quedando sin recursos. A partir del Sprint 228, , los registros de Azure Pipelines incluirán métricas de uso de recursos en cada paso.

Cuando utilice Azure DevOps Services, puede ver la utilización de recursos en los registros, incluido el uso del disco, la memoria y la CPU, activando los registros detallados. Cuando finalice la canalización, busque en los registros las entradas de Agent environment resources en 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 uso de recursos adicionales, consulte Captura de detalles de utilización de recursos.

Habilite 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