微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 管道崩溃在本地运行良好的 pwsh 脚本

如何解决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 举报,一经查实,本站将立刻删除。