修复 YAML 管道中的 PowerShell。

3

我有一个现有的Yaml管道,我正在尝试理解并修复其中的某些问题。由于我是新手,因此在这个现有的管道中有一些我无法理解的事情。我想知道下面的任务正在做什么。我没有看到任何内联的PowerShell脚本,那么为什么它被创建为PowerShell?该任务的目标是将POMLXX dll添加到ABC_x64-$(osSuffix)\bin文件夹中,但下面的脚本是如何实现的

- powershell: |
            Set-Variable -Name PATH -Value "$env:PATH;$(IppRoot)\redist\intel64_win\ipp;$(Build.SourcesDirectory)\ABC_x64-$(osSuffix)\bin;$(Build.BinariesDirectory);$(PuLib)/imports/Pulib67/dll/amd64;$(POMLXX)/runtimes/win-x64/native"
            Write-Host "##vso[task.setvariable variable=PATH]$PATH"
          displayName:  'Add AbcRoot, IPP binaries, Pulib67 and POMLXX to PATH on Win'
          condition:    eq(variables['Agent.OS'], 'Windows_NT')

- bash: |
            export LD_LIBRARY_PATH="$(IppRoot)/redist/intel64_win/ipp:$(Build.SourcesDirectory)/MyProject_x64-$(osSuffix)/lib"
            echo "##vso[task.setvariable variable=LD_LIBRARY_PATH]$LD_LIBRARY_PATH"
            echo "##vso[task.setvariable variable=DYLD_LIBRARY_PATH]$LD_LIBRARY_PATH"
          displayName:  'Add OrzRoot, IPP binaries and LibFT4222 to (DY)LD_LIBRARY_PATH on Linux and Mac'
          condition:    in(variables['Agent.OS'], 'Darwin', 'Linux')

我这里没有看到任何内联的PowerShell脚本 - Set-VariableWrite-Host都是PowerShell cmdlet,对我来说看起来像是一个PowerShell脚本。 - Mathias R. Jessen
2个回答

2
这段文字是PowerShell:
Set-Variable -Name PATH -Value "$env:PATH;$(IppRoot)\redist\intel64_win\ipp;$(Build.SourcesDirectory)\ABC_x64-$(osSuffix)\bin;$(Build.BinariesDirectory);$(PuLib)/imports/Pulib67/dll/amd64;$(POMLXX)/runtimes/win-x64/native"
Write-Host "##vso[task.setvariable variable=PATH]$PATH"

它向PATH powershell变量(set-variable -Name PATH)添加了一堆路径,包括从代理传递下来的环境变量路径,并通过重新设置Azure Pipelines PATH变量将其导出回代理(Write-Host与特殊命令字符串)。该变量将在后续任务的上下文中设置,以便它们可以找到工具。
这是一种有点不正当的方法,以保留对新任务的环境更改的影响。
另请参见: |后面的powershell:指示YAML解析器将下一个缩进块解释为多行字符串。
另请参见:

更好的解决方案

有一个更好的解决方案,它看起来非常相似:
powershell: |
  write-host "##vso[task.prependpath]$(IppRoot)\redist\intel64_win\ipp"
  write-host "##vso[task.prependpath]$(Build.SourcesDirectory)\ABC_x64-$(osSuffix)\bin"
  ... etc

此命令专门用于向PATH环境变量添加路径,即使在您的脚本部分之后运行其他工具安装程序任务也可以使用。
另请参阅:

所以基本上我们在将5个不同的路径添加到环境变量Path中。 - ZZZSharePoint
是的,没错。而且你正在以一种有点hacky的方式持续这些路径,直到工作完成。 - jessehouwing
我看到了,我现在已经在问题中添加了额外的脚本,请问你能否告诉我这个脚本是否在尝试从一个文件夹复制文件到另一个文件夹。我正在尝试将位于.../bin/nodes文件夹中的一个文件复制到.../bin/,想知道这样是否正确。 - ZZZSharePoint
不,那个Bash块试图在Linux和Mac代理中执行与Powershell脚本相同的操作。 - jessehouwing

1
针对您问题的第一部分(“我没有看到任何内联 PowerShell 脚本”),语法如下:
- powershell: |

这是内联脚本的速记方式。至于第二个问题的部分,似乎任务试图首先将目录添加到任务中的PATH环境变量中,然后通过task.setvariable“导出”(作为发布变量)该值以供其他任务/作业/阶段使用。

除此之外,如果没有额外的问题澄清或作业运行的输出,我无法再做更多解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接