gpt4 book ai didi

npm - 在 Azure 管道中缓存 NPM 依赖项以获取内置 Windows 最新镜像

转载 作者:行者123 更新时间:2023-12-04 04:20:30 25 4
gpt4 key购买 nike

我正在尝试缓存管道中的 npm 依赖项,下面是 yaml 代码

jobs:
- job: Cypress_e2e_tests
pool:
vmImage: 'windows-latest'
variables:
npm_config_cache: C:\Users\VssAdministrator\AppData\Local\npm-cache


steps:
- task: NodeTool@0
inputs:
versionSpec: '10.x'
- task: CacheBeta@1
inputs:
key: npm | $(Agent.OS) | package-lock.json
path: $(npm_config_cache)
restoreKeys: npm | $(Agent.OS) | package-lock.json
displayName: Cache NPM packages

- task: CacheBeta@1
inputs:
key: 'cypress | $(Agent.OS) | package-lock.json'
path: 'C:\Users\VssAdministrator\AppData\Local\Cypress'
restoreKeys: 'cypress | $(Agent.OS) | package-lock.json'
displayName: Cache cypress binary

- script: npm cache verify
displayName: 'NPM verify'

- script: npm ci
displayName: 'Install NPM dependencies'

- script: npm run cy:verify
displayName: 'Cypress verify'

- script: |
npx cypress run --browser chrome
displayName: 'Run Cypress tests'
workingDirectory: $(System.DefaultWorkingDirectory)


- task: PublishPipelineArtifact@0
displayName: 'Publish Screenshots (Cypress)'
condition: failed()
inputs:
artifactName: 'screenshots'
targetPath: '$(Build.SourcesDirectory)/cypress/screenshots'

- task: PublishPipelineArtifact@0
displayName: 'Publish Videos (Cypress)'
condition: failed()
inputs:
artifactName: 'videos'
targetPath: '$(Build.SourcesDirectory)/cypress/videos'


- task: PublishTestResults@2
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
failTaskOnFailedTests: true
testRunTitle: 'Cypress Test Results'
publishRunAttachments: true
condition: succeededOrFailed()

但是在第二次运行中,我得到了以下信息,似乎缓存没有按预期工作,

Information, There is a cache miss.

最佳答案

Information, There is a cache miss.



作为设计,缓存完成的同时,也生成了相应的 key (指纹)在您构建 Cache 后为这个缓存第一次。

key唯一根据文件内容确定哪个: 哈希由文件路径/文件模式标识的文件内容,然后是 生产 对应的键。

The contents of any file identified by a file path or file pattern is hashed to produce a dynamic cache key. This is useful when your project has file(s) that uniquely identify what is being cached.



所以,根据消息 There is a cache miss ,第二次构建应该没有使用 指纹第一个构建生成的。

如果这 2 个构建都是基于同一个分支构建的,那么唯一可能的情况是,文件模式标识的文件发生了一些更改。

例如,如果此标识的文件是 package-lock.json ,在第一次构建完成后,我对它做了一些修改。

这时候会自动触发YAML管道( 第二次构建)->recache->为它重新生成一个新的key:因为文件的hash有 重新计算 因为文件内容更新了。

正常情况下,在这种情况下,您会发现缓存的指纹并不相同。

所以,由于第二次构建时指纹不一样, There is a cache miss的消息是预期的 Action 。这是设计使然,因为我们使用 hash表示缓存的内容,内容唯一,不受任何影响。

您可以加入这 2 期的讨论: #1 , #2

关于npm - 在 Azure 管道中缓存 NPM 依赖项以获取内置 Windows 最新镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59487604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com