【DEBUG】 Jenkins Pipeline Build 不下载最新的包

问题

我改了 moudule_A 和 module_B。
并且,moudule_A 依赖于 module_B。
在本地测试通过了。

但是,提交代码之后,自动 build 的 Jenkins pipeline 挂了。

报错信息提炼如下,前面是一堆 plugin job 正常跑,然后到 compile 这一步就报错: CLASS NOT FOUND。

[INFO] Scanning for projects...
[INFO] 
[INFO] Building MY_APP
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ MY_APP ---
[INFO] --- buildnumber-maven-plugin:1.4:create (generate-timestamp) @ MY_APP ---
[INFO] --- buildnumber-maven-plugin:1.4:create (generate-buildnumber) @ MY_APP ---
[INFO] --- jacoco-maven-plugin:0.7.9:prepare-agent (default-prepare-agent) @ MY_APP ---
[INFO] --- buildnumber-maven-plugin:1.4:create-metadata (create-metadata) @ MY_APP ---
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MY_APP ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ MY_APP ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 122 source files to /home/gdevopsc/jenkins-am/workspace/MY_APP/target/classes
[INFO] -------------------------------------------------------------
[WARNING] COMPILATION WARNING : SOME XXX CLASS NOT FOUND

解决1

我首先猜想的是,module_B 没有 upload 到 nexus 上去。

因为 pipeline 只配置了自动 build ,而不会自动 deploy 。(否则 nexus 空间很快就会爆满。)

于是,我手动 trigger 了一个单独的 module_B 的 deploy job。保证 nexus 上有最新的 module_B 。

但是,回去再跑 pipeline 还是失败。

解决2

于是,我看了一眼 moudule_A 的 Jenkinsfile,如下:

pipeline {
 agent { label ‘linux && jdk-8-zulu‘ }

	tools
	{
		git ‘Git‘
		maven ‘Maven 3‘
		jdk ‘Zulu JDK 8‘
	}

  environment{
    MAVEN_OPTS="-Xmx1024m -Xss512m"
  }
  stages{
    stage(‘Build and test‘){

      steps{
        script{
          withMaven (maven: ‘Maven‘) {
            sh("mvn clean install")
          }
        }
      }
    }
  }

问题出在 mvn build 命令。

因为服务器上 maven 的 local repo 有 module_B 的 snapshot 缓存,且 version 没有变,所以它没有下载最新的,而是直接使用了缓存。

这里,需要加一个 -U 参数,使得 maven 每次都会尝试下载最新的 snapshot versions 。

即,需要改成如下:mvn -U clean install

参考

【DEBUG】 Jenkins Pipeline Build 不下载最新的包

上一篇:04-任务控制


下一篇:AssertionError