如何解决Azure 管道崩溃在本地运行良好的 pwsh 脚本
我正在尝试使用可构建、测试和推送 docker 映像的 Azue 管道创建 CI 管道。构建和推送部分适用于 Azure 任务。
我一直在运行我的 Powershell 脚本来获取 docker 日志。 (省略了变量声明以使其更具可读性。我知道它们可以工作,因为 docker 容器检查命令在脚本中没有问题。)
docker-compose --file="$ComposeFilePath" `
--project-name="$ComposeProjectName" `
up --detach
Start-Sleep -s 10
foreach ($ComposeService in $ComposeServices)
{
Write-Output "__________ LOGS FOR $($ComposeService.ServiceName) __________"
$InfoMessage = docker logs "$($ComposeService.ContainerId)" 2>&1 | %{ "$_" }`
| Select-String -Pattern "error" -Context 2,2
Write-Output $InfoMessage
$InfoMessage = docker logs "$($ComposeService.ContainerId)" 2>&1 | %{ "$_" }`
| Select-String -Pattern "Traceback" -CaseSensitive -Context 5,40
Write-Output $InfoMessage
}
这是脚本的基本部分。在我的本地 Powershell 7 终端中运行它就像一个魅力,我得到了指定的所有日志输出。
但是,当我启动管道时出现错误:
__________ LOGS FOR rabbitmq __________
Configuring logger redirection
##[error]PowerShell exited with code '1'.
如果我查看本地启动脚本的 docker 日志,我发现“配置记录器重定向”对应于应该打印的第一行,因为错误出现在 2 行之后(因为它应该基于 -Context 标志)。但是,我不明白错误的来源。请注意,该错误对应于该行脚本中未使用的管道语法“##vso[task.LogIssue type=error;]”。
让事情变得更有趣:我在我的本地机器上运行一个自托管的 Windows 代理。因此,本地脚本以及 Azure 代理管道访问完全相同的 Powershell。
到目前为止我发现了什么:docker logs 将输出打印到 stdout 和 stderr,并且由于许多感兴趣的东西都在 stderr 中,我必须重定向它,因此我使用 2>&1。但是,在使用此重定向时,我遇到了 Powershell 使用对象而不是字符串的问题,因此 | %{ "$_" }。每次我手动运行脚本时,这些解决方案都可以正常工作,但每次管道运行脚本时都会失败。
为了完整起见,Azure 管道任务:
- task: PowerShell@2
inputs:
pwsh: true
targettype: 'filePath'
filePath: '$(Build.sourcesDirectory)/docker_compose_error_checks.ps1'
感谢您的帮助。最坏的情况是我会切换到 bash 并在那里碰碰运气。
最好的问候
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。