得到'缺少一个任务。管道引用了一个名为“缓存”的任务。 Azure 管道中的错误

Posted

技术标签:

【中文标题】得到\'缺少一个任务。管道引用了一个名为“缓存”的任务。 Azure 管道中的错误【英文标题】:Getting 'A task is missing. The pipeline references a task called 'Cache'.' error in Azure Pipeline得到'缺少一个任务。管道引用了一个名为“缓存”的任务。 Azure 管道中的错误 【发布时间】:2020-12-21 15:13:15 【问题描述】:

我正在尝试将我的 npm 包缓存在 Azure Pipeline YAML 中。我使用了微软的这段代码:https://docs.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops#nodejsnpm

这是我的 YAML 文件的一部分:

steps:
  - task: NodeTool@0
    displayName: 'Use Node 12.x'
    inputs:
        versionSpec: 12.18.3
        checkLatest: false
  
  - task: Npm@1
    displayName: 'npm install'
    inputs:
        workingDir: WebApp
        verbose: false

  - task: Cache@2
    inputs:
        key: 'npm | "$(Agent.OS)" | package-lock.json'
        restoreKeys: npm | "$(Agent.OS)"
        path: $(npm_config_cache)
    displayName: Cache NPM packages

当我运行管道时,它会失败并显示以下消息:

A task is missing. The pipeline references a task called 'Cache'. This usually indicates the task isn't installed, and you may be able to install it from the Marketplace: https://marketplace.visualstudio.com. 

我尝试从 Microsoft Marketplace 安装缓存任务,但它不可用。我正在使用带有 6 月更新的 Azure DevOps Server 2019。缓存任务尚未被弃用,应该可以根据此页面使用我的 Azure DevOps 服务器版本:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/cache?view=azure-devops。如何安装缓存任务?

更新:

我在 Microsoft 开发人员论坛上发现了一篇涉及相同问题的帖子:https://developercommunity.visualstudio.com/content/problem/1092245/cache-task-not-available-on-azure-devops-server.html。显然,缓存任务当前在 Azure DevOps Server 2019 上不可用。我将不得不寻找解决方法。谈笑风生。 Microsoft 没有提供缓存任务,并且在他们的网站上没有发布任何关于它的内容。

【问题讨论】:

CacheBeta@0 有效吗? 我尝试了 CacheBeta 并得到了同样的错误。 我猜 ado server 2019 中还没有缓存 使用私有代理时不需要缓存——代理已经维护了缓存。缓存的唯一目的是让 Microsoft 托管的代理避免在每次构建时都从 NuGet/NPM 恢复。 @DanielMann 谢谢。我不知道。有没有办法加快 npm 安装?我的 npm install 构建步骤大约需要 5 分钟才能完成,这似乎很长。 【参考方案1】:

如果您使用的是自托管代理。您可以在管道中添加checkout 步骤并将clean 属性设置为false(如果未指定,默认为true)。这样源文件夹中已安装的依赖项将不会被清理以进行下一次构建。它会加速 npm install 任务。见下文:

steps:
  - checkout: self
    clean: false

  - task: NodeTool@0
    displayName: 'Use Node 12.x'
    inputs:
        versionSpec: 12.18.3
        checkLatest: false
  
  - task: Npm@1
    displayName: 'npm install'
    inputs:
        workingDir: WebApp
        verbose: false

查看here了解更多信息。

【讨论】:

以上是关于得到'缺少一个任务。管道引用了一个名为“缓存”的任务。 Azure 管道中的错误的主要内容,如果未能解决你的问题,请参考以下文章

缺少 Azure Maven 任务输出

谷歌地图 API 导致页面速度命中

Azure Pipeline - 构建中缺少一个 csproj

Azure管道 - 通过json导入任务组总是创建一个新的而不是更改现有的

如何使用构建管道部署 Azure 数据工厂资源?

构建时的ASP.NET Core错误 - 缺少一个或多个编译引用