如何在Azure Pipeline任务间保留.m2目录缓存
Azure Pipeline Maven缓存复用问题
初始问题
尝试让Azure Pipeline中的多个任务复用第一个任务下载的Maven缓存(.m2目录),但发现每个任务执行前文件会被删除。在第二个任务中执行tree $(MAVEN_CACHE_FOLDER)命令时,返回错误:
/home/vsts/work/1/a/.m2/repository [error opening dir]
对应的azure-pipeline.yml配置:
pool: vmImage: ubuntu-latest variables: MAVEN_CACHE_FOLDER: $(Build.ArtifactStagingDirectory)/.m2/repository MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' stages: - stage: validate displayName: VALIDATE jobs: - job: java_validations displayName: Java Validations workspace: clean: outputs steps: - checkout: self clean: false - task: Cache@2 displayName: Cache Maven local repo inputs: key: 'maven | $(Agent.OS) | **/pom.xml, !**/target/**' restoreKeys: | maven | $(Agent.OS) maven path: $(MAVEN_CACHE_FOLDER) - script: | mvn validate $(MAVEN_OPTS) displayName: Maven Validate - script: | mvn checkstyle:check $(MAVEN_OPTS) displayName: Maven Checkstyle - script: | tree $(MAVEN_CACHE_FOLDER) displayName: show MAVEN_CACHE_FOLDER tree - job: unit_tests displayName: Unit Tests dependsOn: - java_validations workspace: clean: outputs steps: - checkout: none clean: false - script: | tree $(MAVEN_CACHE_FOLDER) displayName: show MAVEN_CACHE_FOLDER tree - task: Maven@3 inputs: mavenPomFile: 'pom.xml' options: 'test-compile failsafe:integration-test -Dcheckstyle.skip -Pun-tests $(MAVEN_OPTS)' publishJUnitResults: false mavenVersionOption: 'Default' mavenAuthenticateFeed: true effectivePomSkip: false sonarQubeRunAnalysis: true sqMavenPluginVersionChoice: 'latest' env: JAVA_HOME: $(JAVA_HOME_17_X64) PATH: $(JAVA_HOME_17_X64)/bin:$(PATH)
更新后的问题
在调整配置后,现在遇到新的Maven缓存问题:即使已成功下载缓存且能看到m2/repository文件夹存在,但调用Maven任务时仍会重新下载依赖,导致缓存完全失效。
更新后的azure-pipeline.yml配置:
pool: vmImage: ubuntu-latest variables: MAVEN_CACHE_FOLDER: $(HOME)/.m2/repository MAVEN_OPTS: '-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)' stages: - stage: validate displayName: VALIDATE jobs: - job: java_validations displayName: Java Validations workspace: clean: outputs steps: - checkout: self clean: false - task: Cache@2 displayName: 'Cache Maven local repo' inputs: key: '"funcs" | maven | "$(Agent.OS)" | pom.xml' restoreKeys: | path: $(MAVEN_CACHE_FOLDER) - script: | mvn validate $(MAVEN_OPTS) displayName: Maven Validate - script: | mvn checkstyle:check $(MAVEN_OPTS) displayName: Maven Checkstyle - script: | tree $(MAVEN_CACHE_FOLDER) displayName: show MAVEN_CACHE_FOLDER tree - job: unit_tests displayName: Unit Tests dependsOn: - java_validations workspace: clean: outputs steps: - checkout: self clean: false - task: Cache@2 displayName: 'Cache Maven local repo' inputs: key: '"funcs" | maven | "$(Agent.OS)" ' restoreKeys: | path: $(MAVEN_CACHE_FOLDER) - script: | tree $(MAVEN_CACHE_FOLDER) displayName: show MAVEN_CACHE_FOLDER tree - task: Maven@3 inputs: mavenPomFile: 'pom.xml' options: 'test-compile failsafe:integration-test -Dcheckstyle.skip -Pun-tests $(MAVEN_OPTS)' publishJUnitResults: false mavenVersionOption: 'Default' mavenAuthenticateFeed: true effectivePomSkip: false sonarQubeRunAnalysis: true sqMavenPluginVersionChoice: 'latest' env: JAVA_HOME: $(JAVA_HOME_17_X64) PATH: $(JAVA_HOME_17_X64)/bin:$(PATH) - script: | tree $(MAVEN_CACHE_FOLDER) displayName: show MAVEN_CACHE_FOLDER tree
内容的提问来源于stack exchange,提问作者Diego Cândido da Silva
相关产品推荐
相关产品推荐

