任务自定义条件:给定文件是否存在?

时间:2019-02-28 18:08:40

标签: azure-devops

我要做什么

我有一个要执行的任务,只有在存在某个配置文件时才有意义。因此,我想对返回true(如果该文件存在)的任务设置自定义条件。我认为这样的语法很有意义:

condition: exists('$(projectPath)\myconfigfile.xml')

这似乎是自定义条件的合理用例。

Microsoft提供的文件

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#functions

Microsoft说,以下功能始终可用:andcoalescecontainsendsWitheqformat,{{ 1}},gegtinleltnenot,{{1} },notInor。而且:

"Depending on context, other functions may be available..."

我的实际问题

我发现这有点令人沮丧。有哪些“其他功能”?我如何研究它们?特别是是否有一个文件名可以告诉我该文件是否存在?

3 个答案:

答案 0 :(得分:11)

丹尼尔(Daniel)的答案是正确的,因此仅举一个例子:

创建一个PowerShell任务来设置管道变量:

$fileExists = Test-Path -Path "$(System.DefaultWorkingDirectory)/file.txt"
Write-Output "##vso[task.setvariable variable=FileExists]$fileExists"

创建在自定义条件下使用变量的辅助任务:

eq(variables['FileExists'], True)

答案 1 :(得分:3)

没有内置条件或功能可以根据文件的存在或不存在进行操作。

您可以编写并运行设置变量的脚本,然后检查变量的内容。

答案 2 :(得分:-1)

此技巧对我有用,只需将文件复制到临时文件夹中(如果不存在,则取消管道)

- task: CopyFiles@2
  inputs:
     sourceFolder: '$(projectPath)\myconfigfile.xml' 
     contents: '**/*' 
  targetFolder: '$(Agent.TempDirectory)'
  displayName: 'If file not exist, pipeline is cancel'