在我的 YAML 管道中,我有以下顺序
这是我的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 条件下使用的最佳方法是什么
请参阅:如何从 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
变量。让我知道这是否有帮助。