Podfile.lock 哈希缓存密钥在 pod 安装后发生变化,即使 pod 都是最新的 azure devops pipeline

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

每次通过我的 azure devops 管道运行构建时,我都会收到此错误:

给定的缓存键在恢复和保存步骤之间的解析值已更改

我正在尝试缓存我的 React Native 项目中使用的 cocoapods。我在缓存键字符串中使用 Podfile.lock 的哈希值(如果 Podfile.lock 发生更改,则缓存键将更改,并且在缓存未命中后将上传新缓存)

在本地,如果我删除 Podfile.lock 和 ios/Pods 文件夹,然后运行 pod install,则不会发生任何变化。当构建管道运行 pod install 时,Podfile.lock 哈希确实会发生变化,这意味着永远无法检索缓存,因为密钥始终被修改。

我已经尝试过:

  • 将 vmImage 更改为 10.14,而不是 macOS 最新版
  • 确保本地所有 pod 都是最新的
  • 确保 cocoapods 版本在本地和构建管道中相同

我想不出还能尝试什么,微软文档中没有 cocoapods 缓存的示例,而且似乎没有人遇到过同样的问题

ios caching azure-devops cocoapods podfile-lock
3个回答
3
投票

您可以尝试以下方法:

# Podfile.lock and project.pbxproj are changed during the build process, so we make copies
- script: |
   cp ./ios/Podfile.lock ./ios/podfile_key
   cp ./ios/AwesomeProject.xcodeproj/project.pbxproj ./ios/project_key
  displayName: Create pod cache keys

- task: Cache@2
  inputs:
    key: 'pods | "$(Agent.OS)" | ./ios/podfile_key | ./ios/Podfile | ./ios/AwesomeProject.xcworkspace/contents.xcworkspacedata | ./ios/project_key'
    path: './ios/Pods'
    cacheHitVar: 'PODS_CACHE_RESTORED'
  displayName: Cache pods

- task: CocoaPods@0
  displayName: 'pod install using the CocoaPods task with defaults'
  condition: ne(variables.PODS_CACHE_RESTORED, 'true')
  inputs:
   workingDirectory: './ios/'
   forceRepoUpdate: false

0
投票

该错误表明您需要确保缓存和作业后缓存步骤之间的任何构建步骤都不会更改缓存键值。您可以删除导致更改的步骤或从密钥中删除 Podfile.lock。


0
投票

我遇到了同样的问题,问题是我本地安装的 Cocoapod 版本与 MacOS 运行程序映像附带的预安装版本不匹配。当您在本地计算机上进行 pod 安装时,Podfile.lock 哈希值将与在运行器上安装后的 Podfile.lock 哈希值不同。

解决问题:

  1. 检查您正在使用的运行器映像上安装的 Cocoapods 版本。例如,Mac OS Sonoma可以在跑步者列表

    中找到
  2. 在终端中
  3. pod --version
    检查本地 Pod 版本。

  4. 安装正确的版本

    sudo gem install cocoapods -v {DESIRED_VERSION}

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