Azure中的增量渐变构建Devops CI嗨



我正在尝试了解如何使用gradle作为构建工具在Azure Devops中设置增量构建。

到目前为止,我已经尝试使用--build-cache运行gradle,并且我正在缓存$gradle_HOME/catches目录。根据我的理解,这应该包括构建缓存。

然而,它不起作用。当我在本地运行gradle构建时,删除所有构建目录,gradle将能够在使用构建缓存时跳过70/200个任务,从而跳过大约80%的构建时间。

然而,当我在azure devops上运行相同的配置时,gradle不会跳过一个任务,因此需要相当长的时间。

我确信,我一定错过了什么——但那是什么?

我认为这方面的问题是,当我们在管道中构建缓存时,缓存可能会在正在运行的代理中创建,一旦清理了代理,缓存可能就会被删除。为了进一步添加";Cache@2"任务和设置"$(Pipeline.Workspace(/.gradle";作为GRADLE_USER_HOME的路径。

;高速缓存";任务有效吗
缓存是使用"缓存"任务添加到管道中的。此任务与任何其他任务一样工作,并添加到作业的步骤部分。

当在运行过程中遇到缓存步骤时,任务会根据提供的输入恢复缓存。如果找不到缓存,则该步骤将完成,并运行作业中的下一个步骤。

在作业中的所有步骤都已运行并假定作业状态成功之后;后作业:缓存";步骤被自动添加并针对每个"步骤"被触发;恢复高速缓存";没有跳过的步骤。此步骤负责保存缓存。

示例代码
以下是如何使用gradle的内置缓存设置缓存

variables:
GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
steps:
- task: Cache@2
inputs:
key: 'gradle | "$(Agent.OS)" | **/build.gradle.kts' # Swap build.gradle.kts for build.gradle when using Groovy
restoreKeys: |
gradle | "$(Agent.OS)"
gradle
path: $(GRADLE_USER_HOME)
displayName: Configure gradle caching
- task: Gradle@2
inputs:
gradleWrapperFile: 'gradlew'
tasks: 'build'
options: '--build-cache'
displayName: Build
- script: |   
# stop the Gradle daemon to ensure no files are left open (impacting the save cache operation later)
./gradlew --stop    
displayName: Gradlew stop

的主要输入Cache@2任务:

  1. 键:应设置为要恢复或保存的缓存的标识符。键由字符串值、文件路径或文件模式的组合组成,其中每个段由|字符分隔
  2. 路径:要缓存的文件夹的路径。可以是绝对路径,也可以是相对路径。相对路径是根据$(System.DefaultWorkingDirectory(解析的。对我来说,当我设置与管道相对应的GRADLE_USER_HOME时,此任务就可以工作。Workspace是运行管道的代理上的本地路径,所有目录都是在该代理上创建的
  3. restoreKeys:如果要查询多个精确的密钥或密钥前缀,则可以使用。这用于在一个键没有命中的情况下回退到另一个键。恢复密钥将按前缀搜索密钥,并由此产生最新创建的缓存条目

参考:本文档中提到了其他不同的方法。但上面的一个对我有效https://learn.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops

最新更新