gpt4 book ai didi

azure - 使用表达式作为 Azure yml 管道中缓存键的一部分

转载 作者:行者123 更新时间:2023-12-03 00:40:22 24 4
gpt4 key购买 nike

我想从位于步骤模板中的缓存步骤中的表达式创建缓存键。由于缓存是不可变的,我想每周或每月都从一个干净的缓存开始。我的模板文件如下所示:

# steps-tpl.yml
steps:
- task: Cache@2
inputs:
key: compiler-cache | "<expression>" | "$(Agent.JobName)" | "$(Build.SourceBranch)" | "$(Build.SourceVersion)"
restoreKeys: |
compiler-cache | "<expression>" | "$(Agent.OS)" | "$(Agent.JobName)" | "$(Build.SourceBranch)" | "$(Build.SourceVersion)"
compiler-cache | "<expression>" | "$(Agent.OS)" | "$(Agent.JobName)" | "$(Build.SourceBranch)"
compiler-cache | "<expression>" | "$(Agent.OS)" | "$(Agent.JobName)" | "refs/heads/master"
path: $(Pipeline.Workspace)/ccache
displayName: 'ccache/clcache: Warm up cache'

该表达式应为我提供一年中的每周不同的值,或者为了简单起见,应为当前月份的数字。

我尝试了不同的表达方式,但没有一个有效。首先,我尝试将表达式放入参数默认值中,但这不起作用。然后我尝试将表达式直接放在适当的位置,如下所示:

"${{ format('{0:MM}', pipeline.startTime) }}"

这也不起作用。这也不是:

"$[format('{0:MM}', pipeline.startTime)]"

我猜运行时表达式在脚本上下文之外不可用。

我什至尝试在缓存之前的步骤中设置环境变量:

    echo '##vso[task.setvariable variable=COMPILER_CACHE_KEY_PREFIX,isOutput=true]$[ counter(format("{0:yyyMMdd}", pipeline.startTime), 7) ]'

并将其与 $(previousStep.COMPILER_CACHE_KEY_PREFIX) 一起使用,但也不起作用。

如何将这样的表达式放入缓存键中?这可能吗?

最佳答案

我必须做类似的事情。对我有用的是在 Powershell 任务中设置一个变量,然后将其与运行时扩展的语法一起使用:

variables:        
- name: projectFolder
value: ''


# assign temporary variable resultfolder to variable projectFolder
- powershell: |
Write-Host "##vso[task.setvariable variable=projectFolder]$(resultfolder)"
displayName: Save project folder path

# refer to projectFolder, not the temporary variable resultfolder
- task: Cache@2
inputs:
key: 'nuget | "$(Agent.OS)" | $(projectFolder)/packages.lock.json'
restoreKeys: |
nuget | "$(Agent.OS)"
path: $(NUGET_PACKAGES)
displayName: Cache NuGet packages

缓存任务输出以下内容:

Resolving key:
- nuget [string]
- "Windows_NT" [string]
- D:\a\1\s\PTS_Tasks/packages.lock.json [file] --> 811E162D4016AFBA61F7850XXXXXXXXXXXXX366DFAC37C757FC4D4F49992
Resolved to: nuget|"Windows_NT"|/9Pr8Jh9L66tny00XXXXXXXXXXnL23DoLKFCDGhG8=

显示变量 projectFolder 已正确展开。

因此,也许可以在 Powershell 脚本内执行表达式,然后将结果分配给变量。

关于azure - 使用表达式作为 Azure yml 管道中缓存键的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67483131/

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