在Azure Devops中增量构建Gradle CI Hi

6yoyoihd  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(133)

我正在尝试了解如何使用Gradle作为构建工具在Azure Devops中设置增量构建。
到目前为止,我已经尝试使用--build-cache运行gradle,并且正在缓存$GRADLE_HOME/caches目录。在我的理解中,这应该包括构建缓存。
但是它不起作用。当我在本地运行gradle构建时,删除所有构建目录,gradle将能够跳过大约80%的构建时间,在使用构建缓存时跳过70/200个任务。
然而,当我在azure devops上运行相同的配置时,gradle不会跳过任何一个任务,因此需要相当长的时间。
我想我一定是错过了什么,但那是什么呢?一种

0lvr5msh

0lvr5msh1#

我认为这样做的问题在于,当我们在管道中构建缓存时该高速缓存可能会在正在运行的代理中创建,一旦代理被清理,缓存可能会被删除。添加“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.**键:**应设置为要恢复或保存该高速缓存的标识符。键由字符串值、文件路径或文件模式的组合组成,其中每个段由|性格
1.**path:**缓存文件夹的路径。可以是绝对路径或相对路径。根据$(System.DefaultWorkingDirectory)解析相对路径。对我来说,当我设置GRADLE_USER_HOME与Pipeline对应时,这个任务就起作用了。Workspace是运行管道的代理上创建所有目录的本地路径
1.restoreKeys:如果需要查询多个精确的键或键前缀,可以使用。这用于在某个键没有命中的情况下回退到另一个键。还原键将按前缀搜索键,并生成最新创建的缓存条目。

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

相关问题