Azure 发布管道 - 构建代理 运行 SSH 命令 returns 奇怪的错误代码

Azure release pipeline - Build agent running SSH command returns weird error codes

在我的发布管道中,我正在尝试调用以下命令。

echo 'Bring down all dockers'
cd /usr/src/project
sudo docker-compose down
echo 'Setting the ownership of /usr/src/project to $(serviceuser)'
sudo chown -R $(serviceuser) /usr/src/project
sudo chmod -R 777 /usr/src/project

一切都在远程机器上正常执行。但是,它会向代理报告奇怪的响应。如下

2020-05-31T04:16:18.7284676Z Bring down all dockers
2020-05-31T04:16:18.7285634Z 
2020-05-31T04:16:19.3872061Z ##[error]Stopping gateway_1   ... 
Stopping web_1         ... 
Stopping service_1          ... 
Stopping service_2 ... 

2020-05-31T04:16:19.8215312Z ##[error][13A[2K
Stopping gateway_1   ... [32mdone[0m
[13B
2020-05-31T04:16:21.0904515Z ##[error][5A[2K
Stopping service_1 ... [32mdone[0m
[5B
2020-05-31T04:16:21.8607668Z ##[error][7A[2K
Stopping service_2    ... [32mdone[0m
[7B
2020-05-31T04:16:22.9615503Z ##[error][4A[2K
Removing web_1       ... [32mdone[0m
[4B
2020-05-31T04:16:22.9665540Z ##[error][5A[2K
Removing service_1 ... [32mdone[0m
[5B
2020-05-31T04:16:22.9682527Z ##[error][11A[2K
Removing service_2          ... [32mdone[0m
[11B
2020-05-31T04:16:23.1683671Z Delete everything under  /usr/src/project/
2020-05-31T04:16:23.1684185Z 
2020-05-31T04:16:23.1993484Z Creating new folder /usr/src/project/
2020-05-31T04:16:23.1994279Z 
2020-05-31T04:16:23.2195927Z Setting the ownership of /usr/src/project to builduser
2020-05-31T04:16:23.2196728Z 
2020-05-31T04:16:23.2584025Z ##[error]Command failed with errors on remote machine.

因此,这会使作业显示为失败。任何建议都会有所帮助。

构建机器:RHEL 8 服务虚拟机:RHEL 8 Azure Agenet:自托管

谢谢!

这是因为 docker 将这些消息写入 stderr 而不是 stdout。在 SSH 任务中的 Azure DevOps 管道中,有选项 Fail on STDERR 默认情况下选中。 您可以尝试取消选中此选项以查看它是否有效。

你可以参考这个类似的问题。

作为解决方法,可以通过将 STDERR 和 STDOUT 重定向到变量并处理命令的退出代码来解决该问题

示例:

# Suppress STDERR messages,  

OUTPUT_MESSAGE=$(sudo docker-compose  up --force-recreate -d  2>&1)

#Handle exit code

if [ $? -eq 0 ]
then
  echo $OUTPUT_MESSAGE
  echo "Deployed successfully"
  exit 0
else
  echo "Deployment failed" 
  echo $OUTPUT_MESSAGE
  exit 1
fi