【问题标题】:Fixing PowerShell in the Yaml Pipeline在 Yaml 管道中修复 PowerShell
【发布时间】:2021-06-13 18:13:34
【问题描述】:

我有一个现有的 Yaml 管道,我正在尝试理解和修复某些问题。由于我对此不熟悉,因此在现有管道中几乎没有什么我无法理解的。我想知道下面的任务在做什么。我在这里看不到任何内联 PowerShell 脚本,那么为什么它被创建为 PowerShell。任务是在 ABC_x64-$(osSuffix)\bin 文件夹中添加 POMLXX dll,但是下面的脚本是如何做到的

- 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 脚本

标签: powershell azure-devops yaml azure-pipelines-yaml


【解决方案1】:

这块是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),包括从代理下来的路径环境变量,然后将其导出回代理(带有特殊命令字符串的Write-Host)重新设置 Azure Pipelines PATH 变量。该变量将在后续任务的上下文中设置,以便他们可以找到工具。

将环境更改保留到同一作业上下文中的新任务有点像 hack。

另见:

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 环境变量
  • 是的。这是正确的。而且您在工作期间坚持这些路径。虽然有点老套。
  • 我明白了,我现在在问题中添加了额外的脚本,您能否告诉我该脚本是否试图将文件从一个文件夹复制到另一个文件夹。我正在尝试将 .../bin/nodes 文件夹中的一个文件复制到 .../bin/ 并想知道这是否是这样做的方法
  • 不,那个 bash 块正试图做与 Powershell 脚本相同的事情,但随后在 Linux 和 Mac 代理中。
【解决方案2】:

对于您问题的第一部分(“我没有看到任何内联 PowerShell 脚本”),语法

- powershell: |

是内联脚本的简写。对于问题的第二部分,该任务似乎首先尝试将目录添加到任务中的 PATH 环境变量,然后“导出”(通过task.setvariable)将该值作为释放变量到其他任务/作业/阶段。

如果不进一步澄清您的问题和/或作业运行的输出,我不能说更多。

【讨论】:

    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 2020-08-27
    • 2022-01-15
    • 2020-11-07
    • 1970-01-01
    • 2022-11-04
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多