如何将 powershell 函数的输出传递到 YAML 管道中的 Bash 脚本

问题描述 投票:0回答:1

在我的 YAML 管道中,我有以下顺序

  • 通过powershell功能检查更改的包 我将文件夹的路径作为参数传递并运行 git diff 到 查找退出代码 0 或 1
  • 然后我想在我的 yaml 中的 Bash@3 中接收输出 0 或 1 管道并运行“if 条件”来跳过或构建包

这是我的powershell功能

function packageChangeChecker {
    param(
        [Parameter(Mandatory = $true)]
        [string] $pathToPackage    
        )
    git diff HEAD~:src/$pathToPackage HEAD:src/$pathToPackage  --exit-code --quiet    
     if($LastExitCode -eq 1) {
variable=filesChanged;isOutput=False]$false"
        return $false
     }      
    elseif($LastExitCode -eq 0) {
        return $true
    }
    }

这是我的 Bash@3

- task: Bash@3
        displayName: 'detectChanges'
        inputs:
          targetType: 'inline'
          script: |
              pathToPackage="docker-dotnet-app-aks2/"
              export filesChanged = "powershell.exe "& { . .\package-change-checker.ps1; packageChangeChecker $pathToPackage}""

然后,我想在调用模板构建包之前使用在 YAML 管道中的 If 条件下更改的文件的输出

- ${{ if eq(stageDependencies.Deploy.preBuildChecks.outputs['detectChanges.filesChanged'], true) }}

我尝试传递 powershell 函数的输出,如下所示

filesChanged = "powershell.exe "& { . .\package-change-checker.ps1; packageChangeChecker $pathToPackage}""

我使用上述方法在管道中遇到错误

将 powershell 函数的输出传递回 Bash 以便在 YAML 文件中的 If 条件下使用的最佳方法是什么

bash powershell azure-devops
1个回答
0
投票

请参阅:如何从 Azure Devops Powershell YAML 获取输出

以及:如何使用 powershell 命令的输出作为 Azure 管道中的参数?

Azure DevOps 为此目的预定义了变量:

function packageChangeChecker {
    param(
        [Parameter(Mandatory = $true)]
        [string] $pathToPackage    
    )
    git diff HEAD~:src/$pathToPackage HEAD:src/$pathToPackage  --exit-code --quiet    
    if($LastExitCode -eq 1) {
        Write-Output "##vso[task.setvariable variable=filesChanged;isOutput=true]$false"
        return $false
    }      
    elseif($LastExitCode -eq 0) {
        Write-Output "##vso[task.setvariable variable=filesChanged;isOutput=true]$true"
        return $true
    }
}
- task: Bash@3
  displayName: 'detectChanges'
  inputs:
    targetType: 'inline'
    script: |
        pathToPackage="docker-dotnet-app-aks2/"
        filesChanged=$(powershell.exe -Command "& { . .\package-change-checker.ps1; packageChangeChecker $pathToPackage}")
        echo "##vso[task.setvariable variable=filesChanged;isOutput=true]$filesChanged"

现在尝试在 YAML 中使用

filesChanged
变量。让我知道这是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.