Solución de problemas de ejecuciones de canalización

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

En este tema se proporcionan instrucciones generales para la solución de problemas. Para obtener una solución de problemas específica sobre .NET Core, consulte Solución de problemas de .NET Core.

Nota:

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Puede usar las siguientes secciones de solución de problemas para ayudar a diagnosticar problemas con la canalización. La mayoría de los errores de canalización se divide en una de estas categorías.

La canalización no se desencadenará

Si una canalización no se inicia en absoluto, compruebe los siguientes problemas comunes relacionados con los desencadenadores.

Nota:

Una razón adicional por la que es posible que las ejecuciones no se inicien es que la organización queda inactiva cinco minutos después de que el último usuario cierra sesión Azure DevOps. Después, cada una de las canalizaciones de compilación se ejecutará una vez más. Por ejemplo, mientras la organización está inactiva:

  • Una compilación nocturna de código en la organización se ejecutará solo una noche hasta que alguien vuelva a empezar.
  • Las compilaciones de CI de un repositorio de Git otro dejarán de ejecutarse hasta que alguien vuelva a abrir sesión.

Configuración de la interfaz de usuario que invalida la configuración del desencadenador YAML

Las canalizaciones YAML pueden invalidar su configuración de desencadenador y y en la interfaz de usuario triggerpr de configuración de canalización. Si los triggerpr desencadenadores o no parecen activarse, compruebe esa configuración. Al editar la canalización, elija ... y, a continuación, Desencadenadores.

Interfaz de usuario de configuración de canalización

Compruebe la opción Invalidar el desencadenador YAML desde aquí para ver los tipos de desencadenador (integración continua o validación de solicitudes de incorporación de incorporación de recursos) disponibles para el repositorio.

Invalide el desencadenador YAML desde aquí.

Los desencadenadores de solicitud de extracción no se admiten con Azure Repos

Si el desencadenador no se activa y usa Azure Repos, se debe a que los desencadenadores no se admiten prpr para Azure Repos. En Azure Repos Git, las directivas de rama se usan para implementar la validación de compilación de solicitudes de extracción. Para más información, consulte Directiva de rama para la validación de solicitudes de extracción.

Filtros de rama mal configurados en desencadenadores de CI y PR

Al definir un desencadenador de PR o CI de YAML, puede especificar las include cláusulas y exclude para las ramas y las rutas de acceso. Asegúrese de que la cláusula coincide con los detalles de la confirmación y de que la cláusula includeexclude no los excluye.

Importante

Al definir un desencadenador de PR o CI de YAML, solo las ramas configuradas explícitamente para incluirse desencadenarán una ejecución. Las incluyeciones se procesan primero y, a continuación, se quitan de la lista. Si especifica una exclusión pero no especifica ninguna incluye, no se desencadenará nada. Para más información, consulte Desencadenadores.

Al definir un desencadenador de PR o CI de YAML, puede especificar las cláusulas y para includeexclude ramas, etiquetas y rutas de acceso. Asegúrese de que la cláusula coincide con los detalles de la confirmación y de que la cláusula includeexclude no los excluye. Para más información, consulte Desencadenadores.

Nota:

Si especifica una exclude cláusula sin una cláusula , es equivalente a especificar en la cláusula include*include .

Conversiones de zona horaria de desencadenador programadas

Los desencadenadores programados de YAML se establecen mediante la zona horaria UTC. Si los desencadenadores programados no parecen activarse a la hora adecuada, confirme las conversiones entre utc y la zona horaria local, teniendo en cuenta también la configuración del día. Para obtener más información, vea Desencadenadores programados.

La configuración de la interfaz de usuario invalida los desencadenadores programados de YAML

Si la canalización de YAML tiene desencadenadores programados yaml y desencadenadores programados definidos por la interfaz de usuario, solo se ejecutan los desencadenadores programados definidos por la interfaz de usuario. Para ejecutar los desencadenadores programados definidos por YAML en la canalización de YAML, debe quitar los desencadenadores programados definidos en la interfaz de usuario de configuración de canalización.

Para acceder a la interfaz de usuario de configuración de canalización desde una canalización yaml, edite la canalización, elija ... y, a continuación, Desencadenadores.

Interfaz de usuario de configuración de canalización

Quite todos los desencadenadores programados.

Elimine los desencadenadores programados en la interfaz de usuario configuración de canalización.

Una vez que se quitan todos los desencadenadores programados de la interfaz de usuario, se debe realizar una inserción para que los desencadenadores programados de YAML empiecen a ejecutarse. Para obtener más información, vea Desencadenadores programados.

Colas de canalización, pero nunca obtiene un agente

Si la canalización se pone en cola pero nunca obtiene un agente, compruebe los siguientes elementos.

Nota:

Los escenarios siguientes no consumirán un trabajo paralelo:

  • Si usa canalizaciones de versión o canalizaciones YAML de varias fases, una ejecución consume un trabajo paralelo solo cuando se implementa activamente en una fase. Mientras la versión está esperando una aprobación o una intervención manual, no consume un trabajo paralelo.
  • Cuando se ejecuta un trabajo de servidor o se implementa en un grupo de implementación mediante canalizaciones de versión, no se consume ningún trabajo paralelo.

Más información: Cómo una canalizaciónconsume un trabajo paralelo, agregar aprobaciones previasa la implementación, trabajosde servidor, grupos de implementación

Límites de trabajos paralelos: no hay agentes disponibles o se han alcanzado los límites gratuitos.

Si actualmente ejecuta otras canalizaciones, es posible que no tenga ningún trabajo paralelo restante o que haya alcanzado los límites gratuitos.

Para comprobar los límites, vaya a Project configuración de, Trabajos paralelos.

Pipelines trabajos simultáneos

Después de revisar los límites, compruebe la simultaneidad para ver cuántos trabajos se están ejecutando actualmente y cuántos están disponibles.

Si actualmente ejecuta otras canalizaciones, es posible que no tenga ningún trabajo paralelo restante o que haya alcanzado los límites gratuitos.

No se puede acceder a Azure Key Vault detrás del firewall desde Azure DevOps

Si no puede acceder a Azure Key Vault desde la canalización, es posible que el firewall esté bloqueando la dirección IP Azure DevOps Services agente. Las direcciones IP publicadas en el archivo JSON semanal deben estar en la lista de permitidos. Para obtener más información, vea Agentes hospedados por Microsoft: Redes.

No tiene suficiente simultaneidad

Para comprobar cuánta simultaneidad tiene:

  1. Para comprobar los límites, vaya a Project configuración de, Trabajos paralelos.

    Límites de canalización simultáneos

    También puede acceder a esta página; para ello, vaya a o elija administrar https://dev.azure.com/{org}/_settings/buildqueue?_a=concurrentJobshttps://dev.azure.com/{org}/_settings/buildqueue?_a=concurrentJobs desde los registros.

    Administración de trabajos paralelos

  2. Determine en qué grupo desea comprobar la simultaneidad (grupos hospedados o auto hospedados por Microsoft) y elija Ver trabajos en curso.

  3. Verá texto que indica Trabajos X/Xen ejecución actualmente. Si ambos números son iguales, los trabajos esperarán hasta que se completen los trabajos que se están ejecutando actualmente.

    Visualización de trabajos en curso

    Puede ver todos los trabajos, incluidos los trabajos en cola, seleccionando Grupos de agentes en la Project configuración.

    Visualización de trabajos en cola

    En este ejemplo, el límite de trabajos simultáneos es uno, con un trabajo en ejecución y otro en cola. Cuando todos los agentes están ocupados ejecutando trabajos, como en este ejemplo, se muestra el mensaje siguiente cuando se ponen en cola trabajos adicionales: The agent request is not running because all potential agents are running other requests. Current position in queue: 1 . En este ejemplo, el trabajo está a continuación en la cola, por lo que su posición es una.

Es posible que el trabajo esté esperando aprobación

Es posible que la canalización no pase a la siguiente fase porque está esperando aprobación. Para obtener más información, vea Definir aprobaciones y comprobaciones.

Todos los agentes disponibles están en uso

Los trabajos pueden esperar si todos los agentes están ocupados actualmente. Para comprobar los agentes:

  1. Vaya a https://dev.azure.com/{org}/_settings/agentpools.

  2. Seleccione el grupo de agentes que se va a comprobar, en este ejemplo FabrikamPool,y elija Agentes.

    Estado del agente

    En esta página se muestran todos los agentes actualmente en línea o sin conexión y en uso. También puede agregar agentes adicionales al grupo desde esta página.

Demandas que no coinciden con las funcionalidades de un agente

Si la canalización tiene demandas que no cumplen las funcionalidades de ninguno de los agentes, la canalización no se iniciará. Si solo algunos de los agentes tienen las funcionalidades deseadas y actualmente están ejecutando otras canalizaciones, la canalización se detendrá hasta que uno de esos agentes esté disponible.

Para comprobar las funcionalidades y demandas especificadas para los agentes y las canalizaciones, consulte la sección Funcionalidades.

Nota:

Las funcionalidades y las demandas se usan normalmente solo con agentes auto hospedados. Si la canalización tiene demandas que no coinciden con las funcionalidades del sistema del agente, a menos que haya etiquetado explícitamente los agentes con funcionalidades de coincidencia, las canalizaciones no tendrán un agente.

Problemas de conexión del agente de TFS

Se produce un error en la configuración al probar la conexión del agente (solo TFS local)

Testing agent connection.
VS30063: You are not authorized to access http://<SERVER>:8080/tfs

Si se recibe el error anterior al configurar el agente, inicie sesión en el equipo TFS. Inicie el administrador Internet Information Services (IIS). Asegúrese de que la autenticación anónima está habilitada.

está habilitada la autenticación anónima de TFS

Comunicación perdida del agente

Este problema se caracteriza por el mensaje de error:

The job has been abandoned because agent did not renew the lock. Ensure agent is running, not sleeping, and has not lost communication with the service.

Este error puede indicar que el agente perdió la comunicación con el servidor durante un intervalo de varios minutos. Compruebe lo siguiente para descartar la red u otras interrupciones en el equipo del agente:

  • Compruebe que las actualizaciones automáticas están desactivadas. Un reinicio de la máquina desde una actualización provocará un error en una compilación o versión con el error anterior. Aplique actualizaciones de forma controlada para evitar este tipo de interrupción. Antes de reiniciar la máquina del agente, el agente debe marcarse primero como deshabilitado en la página de administración del grupo y dejar que finalice cualquier compilación en ejecución.
  • Compruebe que la configuración de suspensión está desactivada.
  • Si el agente se ejecuta en una máquina virtual, evite cualquier migración en vivo u otra operación de mantenimiento de máquina virtual que pueda afectar gravemente al estado de la máquina durante varios minutos.
  • Si el agente se ejecuta en una máquina virtual, se aplican las mismas recomendaciones de actualización del sistema operativo y de configuración de suspensión a la máquina host. Y también cualquier otra operación de mantenimiento que varias afectan al equipo host.
  • El registro del monitor de rendimiento u otro registro de métricas de estado puede ayudar a correlacionar este tipo de error con la disponibilidad de recursos restringida en la máquina del agente (disco, memoria, archivo de página, procesador, red).
  • Otra manera de correlacionar el error con problemas de red es hacer ping a un servidor indefinidamente y volcar la salida en un archivo, junto con marcas de tiempo. Use un intervalo correcto, por ejemplo, 20 o 30 segundos. Si usa Azure Pipelines, le gustaría hacer ping a un dominio de Internet, por ejemplo, bing.com. Si usa un servidor TFS local, le gustaría hacer ping a un servidor en la misma red.
  • Compruebe que el rendimiento de red de la máquina es adecuado. Puede realizar una prueba de velocidad en línea para comprobar el rendimiento.
  • Si usa un proxy, compruebe que el agente está configurado para usar el proxy. Consulte el tema implementación del agente.

Agente de trabajo de TFS no iniciado

Esto puede caracterizarse por un mensaje en la consola web "Esperando a que se solicite un agente". Compruebe que TFSJobAgent (nombre para mostrar: Visual Studio agentede trabajo en segundo plano de Team Foundation) Windows se inicia el servicio.

Dirección URL de notificación mal configurada (versión del agente 1.x)

Esto puede caracterizarse por un mensaje en la consola web "Waiting for console output from an agent" (Esperando la salida de la consola de un agente) y el proceso finalmente se termina.

Una dirección URL de notificación que no coincide puede hacer que el trabajo no pueda conectarse al servidor. Consulte Consola de administración de Team Foundation, nivel de aplicación. El agente 1.x escucha la cola de mensajes mediante la dirección URL con la que se configuró. Sin embargo, cuando se extrae un mensaje de trabajo de la cola, el proceso de trabajo usa la dirección URL de notificación para comunicarse de nuevo con el servidor.

Comprobar Azure DevOps estado de una degradación del servicio

Compruebe el portal Azure DevOps estado del servicio para ver si hay problemas que puedan provocar una degradación del servicio, como un aumento del tiempo de cola para los agentes. Para obtener más información, vea Azure DevOps Service Status.

No se puede completar la canalización

Si la canalización obtiene un agente pero no se completa, compruebe los siguientes problemas comunes. Si el problema no parece coincidir con uno de estos, consulte Obtener registros para diagnosticar problemas.

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 esté utilizando. Los agentes hospedados de Microsoft gratuitos tienen un tiempo de espera máximo de 60 minutos por trabajo para un repositorio privado y de 360 minutos para un repositorio público. Para aumentar el tiempo de espera máximo de un trabajo, puede optar por cualquiera de las opciones siguientes.

  • Compre un agente hospedado por Microsoft que le dará 360 minutos para todos los trabajos, independientemente del repositorio usado.
  • Usar un agente auto hospedado para descartar los problemas de tiempo de espera debidos al agente

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

Nota:

Si se agota el tiempo de espera de los trabajos del agente hospedado por Microsoft, 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

Mi canalización está fallando en un paso de desprotección

Si usa un 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 configuración Limitar el ámbito de autorización de trabajo 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 checkout repositorio. checkout

Cuando la canalización no pueda acceder al repositorio debido a un ámbito limitado de autorización de trabajo, recibirá el error y los registros contendrán una entrada Git fetch failed with exit code 128 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 está fallando inmediatamente con , asegúrese de que el nombre del proyecto y el repositorio son correctos en el paso o en la Could not find a project that corresponds with the repository declaración de recursos del checkout repositorio.

Control de versiones de Team Foundation (TFVC)

Obtener orígenes que no descargan algunos archivos

Esto puede caracterizarse por un mensaje en el registro "Todos los archivos actualizados" del comando tf get. Compruebe que la identidad de servicio integrada tiene permiso para descargar los orígenes. El servicio de compilación Project recopilación de identidades o Project Build Service necesitará 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 del control de versiones, puede examinar los archivos del proyecto en cualquier nivel de la jerarquía de carpetas y comprobar la configuración de seguridad.

Obtener 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 un proxy de Team Foundation es establecer una variable de entorno que apunte al servidor proxy TFVC para que el agente se ejecute TFSPROXY 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

Mi canalización está fallando en un paso de 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 Azure Pipelines/TFS (agente o tareas). Los errores de compilación y versión también pueden deber a comandos externos.

Compruebe los registros de la línea de comandos exacta ejecutada por la tarea con errores. Si intenta 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 MSBuild parte de la canalización de compilación (por ejemplo, usa la tarea de compilación MSBuild o Visual Studio compilación)? Si es así, intente ejecutar el mismo comando MSBuild en una máquina local con los mismos argumentos. Si puede reproducir el problema en un equipo local, los pasos siguientes son investigar el problema MSBuild problema.

Diseño de archivo

La ubicación de las herramientas, las bibliotecas, los encabezados y otras cosas necesarias 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 scripts siguientes para inspeccionar el diseño en el agente. Esto puede ayudarle a realizar un seguimiento del 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 y como se ha escrito, el script busca directorios en la ruta de acceso. 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 hay algunas diferencias en vigor al ejecutar un comando en un equipo local y cuando se ejecuta una compilación o una versión en un agente. Si el agente está configurado para ejecutarse como un servicio en Linux, macOS o Windows, no se ejecuta dentro de una sesión interactiva de sesión iniciada. Sin una sesión interactiva de sesión iniciada, existe interacción con la interfaz de usuario y otras limitaciones.

Errores de archivos o carpetas en uso

Los errores de archivos o carpetas en uso 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, herramientas como Monitor de procesos pueden ser capturar un seguimiento de eventos de archivo en un directorio específico. O bien, para una instantánea a tiempo, se pueden usar herramientas como explorador de procesos o identificador.

Exclusión antivirus

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

MSBuild y /nodeReuse:false

Si invoca MSBuild durante la compilación, asegúrese de pasar el argumento /nodeReuse:false (forma corta /nr:false ). De lo MSBuild los procesos seguirán ejecutándose 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 del MSBuild procesos.

Las MSBuild y Visual Studio build 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 MSBuild y Visual Studio compilación se MSBuild con el modificador . En algunos casos, esto puede causar problemas como varios problemas de acceso a archivos de proceso.

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

Los problemas de archivo en uso pueden producirse al aprovechar la característica de proceso simultáneo de MSBuild. No especificar el argumento (forma corta) indica a /maxcpucount:[n] MSBuild que use un solo /m:[n] proceso. Si usa las tareas de compilación 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 un solo proceso. Los errores intermitentes o incoherentes pueden indicar que la configuración de destino no es compatible 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:

Esperando la entrada

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

La ejecución del agente desde la línea de comandos de una sesión interactiva que ha iniciado sesión puede ayudar a identificar si un proceso solicita entradas con un cuadro de diálogo.

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

Volcado de proceso

Analizar un volcado del proceso puede ayudar a identificar en qué espera un proceso interbloqueado.

Proyecto de WiX

La creación de un proyecto de WiX cuando MSBuild personalizados están habilitados, puede hacer que WiX interbloquee la espera en el flujo de salida. Si agrega el argumento MSBuild /p:RunWixToolsOutOfProc=true adicional, se solucionará el problema.

Finales de línea para varias plataformas

Al ejecutar canalizaciones en varias plataformas, a veces puede encontrar problemas con distintos finales de línea. Históricamente, Linux y macOS usaban caracteres de linefeed (LF) mientras que Windows un retorno de carro más un linefeed (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 Windows herramientas están bien con los finales solo LF, y este comportamiento automático puede causar más problemas de los que resuelve. Si tiene problemas basados en finales de línea, se recomienda configurar Git para que prefiera LF en todas partes. Para ello, agregue un archivo a .gitattributes la raíz del repositorio. En ese archivo, agregue la línea siguiente:

* text eol=lf

Variables que tienen anexado ' (comilla simple)

Si la canalización incluye un script de Bash que establece variables mediante el comando , es posible que vea un adicional anexado al valor de ##vso' la variable que estableció. Esto se produce debido a una interacción con set -x . La solución es deshabilitar set -x temporalmente antes de establecer una variable. La sintaxis de Bash para hacerlo 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 set -x el comando para ayudar con la depuración. Bash realizará un seguimiento exacto del comando que se ejecutó y lo hará eco en stdout. Esto hará que el agente vea el comando dos veces y, la segunda ##vso 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 ve la primera línea, MY_VAR se establecerá en el valor correcto, "my_value". Sin embargo, cuando vea 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 App Service de implementación. 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.

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.

Obtener registros para diagnosticar problemas

Si ninguna de las sugerencias anteriores coincide con el problema, puede usar la información de los registros para diagnosticar la canalización con errores.

Empiece por ver los registros de la compilación o versión completadas. Para ver los registros, vaya al resumen de ejecución de canalización y seleccione el trabajo y la tarea. Si se ha generado un error en una tarea determinada, compruebe los registros de esa tarea.

Además de ver los registros en el resumen de la compilación de la canalización, puede descargar registros completos que incluyen información de diagnóstico adicional y puede configurar registros más detallados para ayudar con la solución de problemas.

Para obtener instrucciones detalladas sobre cómo configurar y usar registros, consulte Revisión de registros para diagnosticar problemas de canalización.

Necesito más ayuda. He encontrado un error. Tengo una sugerencia. ¿Dónde puedo ir?

Obtener suscripción, facturación y soporte técnico

Informe de cualquier problema o envíe comentarios en Developer Community.

Agradecemos sus sugerencias: