【问题标题】:Extract files: to process "no files were found" warning提取文件:处理“未找到文件”警告
【发布时间】:2020-10-23 16:21:00
【问题描述】:

Extract files 任务找不到要解压的文件时如何处理?

如果没有提取文件,是否可以将Extract files 任务设置为失败? 这是一个示例任务

steps:
- task: ExtractFiles@1
  displayName: 'Extract files '
  inputs:
    archiveFilePatterns: '$(System.ArtifactsDirectory)\*.zip'
    destinationFolder: '$(System.ArtifactsDirectory)\bin'

如果没有找到文件,它不会失败

2020-10-01T14:25:23.1175947Z 在目录下搜索:*.zip:E:\ba\n1_work\r16\a
2020-10-01T14:25:23.1287445Z 找到:0 个要提取的文件:

然后一个 ftp 上传任务什么都不做

2020-10-01T14:25:36.4142531Z ##[警告]找不到要上传的文件

发布管道很简单

  • 解压文件
  • 停止 azure 应用服务
  • 通过 ftp 上传文件
  • 启动 Azure 应用服务

我添加了 powershell 脚本来检查文件是否被提取

if (-not (Test-path $(System.ArtifactsDirectory)\bin\*) )
{
Throw New-Object System.ArgumentException("no files were extracted")
}

但想知道如果没有提取或上传任何内容,是否有可能使 ExtractFiles@1 或 FtpUpload@2 任务失败?

问候

【问题讨论】:

  • 嗨@oleksa,刚刚签到看看这个问题是否仍然阻碍你?这个问题有更新吗?
  • @VitoLiu-MSFT 我试图了解为什么 QueryAzureDevOpsExtensionVersion 任务无法连接到 VS 市场。我生成的令牌启用了读取获取和发布市场范围,但错误是 401 unauthorized
  • 嗨@oleksa,您需要选择所有可访问的组织选项来创建 PAT。请尝试一下,然后在这里分享结果。

标签: azure-devops


【解决方案1】:

没有简单的方法可以做到这一点,因为该任务不支持这种情况。 (所以请考虑在 github 上添加功能请求)。但是,您可以使用 REST API 调用来获取日志分析它们并在没有文件时抛出异常。它可能看起来像这样:


variables:
  devopsAccount : 'thecodemanual'
  projectName : 'DevOps Manual'
  logId: "6"


steps:
- task: ExtractFiles@1
  displayName: 'Extract files '
  inputs:
    archiveFilePatterns: '$(System.ArtifactsDirectory)\*.zip'
    destinationFolder: '$(System.ArtifactsDirectory)\bin'

- task: PowerShell@2
  name: testDetails
  condition: always()
  inputs:
    targetType: 'inline'
    script: |
        # Encode the Personal Access Token (PAT)
        $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(System.AccessToken)")) }

        # Get a list of releases
        $uri = "https://dev.azure.com/$(devopsAccount)/$(projectName)/_apis/build/builds/$(Build.BuildId)/logs/$(logId)?api-version=5.1"

        Write-Host $uri

        # Invoke the REST call
        $result = Invoke-RestMethod -Uri $uri -Method Get -Headers $AzureDevOpsAuthenicationHeader

        Write-Host $result

        $lines = $result.Split([Environment]::NewLine)

        $passed = 0;
        $failed = 0;

        foreach($line in $lines) {
            if ($line -match "Found: 0 files to extract") { 
              throw 'There is no files to extract'

            }
        }

在我的例子中,Log id 是 6,因为 Azure DevOps 在运行列表中的第一个任务之前添加了 5 个步骤。

【讨论】:

  • 谢谢,但日志分析器让我更害怕 :) 我创建了 the feature request
  • 我完全同意 :) 我证明这是可能的 :) (即使它不是很好 :))如果它对你有帮助,你可以考虑接受我的回复作为答案并点赞吗?
【解决方案2】:

任务ExtractFiles@1FtpUpload@2代码在GitHub上是开源的,我们可以下载并更新.ts文件然后Publish it到Visual Studio Marketplace。

例如,如果没有上传任何内容,则使任务 FtpUpload@2 失败。

2020-10-01T14:25:36.4142531Z ##[警告]找不到要上传的文件

此警告消息在task.json 文件中定义NoFilesFound,然后通过此代码tl.warning(tl.loc("NoFilesFound")); 在文件ftpuploadtask.ts 中调用。

我们可以把代码改成tl.setResult(tl.TaskResult.Failed, tl.loc("NoFilesFound"));,然后我们可以看到任务中的错误信息而不是警告信息,任务结果会显示失败。

我们可以对任务 ExtractFiles@1 做同样的事情

【讨论】:

  • PackageAzureDevOpsExtension 引发错误 No manifests found from the following glob patterns: vss-extension.json 看起来很奇怪,因为原始 MS 源中没有 vss-extension.json 文件,我已经定义了 task.json
  • 我创建了最小的vss-extension.json,如here(但使用我自己的值),现在 PackageAzureDevOpsExtension 错误为'/opt/hostedtoolcache/tfx/0.7.11/x64/node_modules/.bin/tfx' failed with exit code 255。很遗憾,找不到其他信息
  • 嗨@oleksa,你介意在这里分享你的步骤和错误信息吗?上传扩展,我们需要您拥有发布 ID 并更改版本 ID。
  • 我已经成功构建并安装了upload the extension。然而问题是在Add task 模式下任务是不可见的。我尝试将ftpcustomftpuploadftpuploadm 放在过滤器字符串中。
  • 嗨@oleksa,我将自定义此扩展并在此处分享完整步骤,请稍候。谢谢。
【解决方案3】:

您可以使用市场上的其他任务来解压缩包。您可以尝试使用Unzip TaskZip and unzip directory build task 代替提取文件任务。

我使用 Unzip TaskZip and unzip directory build task 进行了测试。当没有找到要解压缩的文件时,它们都工作得很好并且按预期失败。见下文

对于 FTP 上传,您可以查看FTP Uploader task

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 2017-07-06
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多