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
在我的发布管道中,我正在尝试调用以下命令。
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