操作系统: win7
虚拟机:centos6.5
工具:CRT
最近在公司想研究下Jenkins
的Pipeline
。
在参考官方教程时,
每次构建我总是失败:
上面错误主要是这句:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project simple-maven-project-with-tests: Fatal error compiling: 无效的目标版本: 1.7 -> [Help 1]
这句话的意思是,我要编译的项目要求jdk
必须是1.7
,而我Jenkins
构建时,却不是jdk1.7
的环境。
这我就更纳闷啦!
jdk配置:
git配置:
maven 配置:
可以看出,我jdk
明明配置的就是jdk1.7
可是为什么就是不行呢?
于是我把启动文件只保留jdk1.7
的路径:
# 打开配置文件
vim /etc/init.d/jenkins
# 修改后的结果
for candidate in /usr/java/jdk1.7.0_51/bin/java /usr/java/jdk1.7.0_51/jre/bin/java
do
[ -x "$JENKINS_JAVA_CMD" ] && break
JENKINS_JAVA_CMD="$candidate"
done
# 原本是
/etc/alternatives/java /usr/lib/jvm/java-1.6.0/bin/java /usr/lib/jvm/jre-1.6.0/bin/java /usr/lib/jvm/java-1.5.0/bin/java /usr/lib/jvm/jre-1.5.0/bin/java /usr/bin/java
# 其中/etc/alternatives/java,在服务器上指向的Java版本却是1.6,也就是说它可能读取到了这个配置
带着欢喜重启Jenkins
:
service jenkins stop
service jenkins start
但是还是失败啦!
在服务器上执行:
mvn -v
[root@master01 pipeline_test]# mvn -v
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00)
Maven home: /home/activemq/apache-maven-3.2.3
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /usr/java/jdk1.7.0_51/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.29.2.el6.x86_64", arch: "amd64", family: "unix"
可以看出是jdk1.7
这时我纠结了很久,甚至去github
上去截图留言;
后来我在命令框里执行了这么一句:
node {
sh "java -version"
sh "which java"
}
得到的结果:
[pipeline_test] Running shell script
+ java -version
# java version "1.6.0_32"
OpenJDK Runtime Environment (IcedTea6 1.13.4) (rhel-7.1.13.4.el6_5-x86_64)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)
[pipeline_test] Running shell script
+ which java
# /usr/bin/java
注意看我用井号注释的,可以看出虽然我在配置里配置了jdk
的路径是1.7
的,但是在pipeline
里读取到的环境变量却是/usr/bin/java
,而这个指向正好是jdk1.6
的。
[root@master01 pipeline_test]# cd /usr/bin
[root@master01 bin]# ll | grep "java"
lrwxrwxrwx 1 root root 22 Sep 26 2014 java -> /etc/alternatives/java
lrwxrwxrwx 1 root root 23 Sep 26 2014 javac -> /etc/alternatives/javac
lrwxrwxrwx 1 root root 25 Sep 26 2014 javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx 1 root root 23 Sep 26 2014 javah -> /etc/alternatives/javah
lrwxrwxrwx 1 root root 23 Sep 26 2014 javap -> /etc/alternatives/javap
lrwxrwxrwx. 1 root root 28 Oct 30 2013 javaws -> /usr/java/default/bin/javaws
lrwxrwxrwx. 1 root root 30 Oct 30 2013 jcontrol -> /usr/java/default/bin/jcontrol
[root@master01 bin]# cd /etc/alternatives
[root@master01 alternatives]# ll | grep "java"
lrwxrwxrwx 1 root root 55 Sep 26 2014 appletviewer -> /usr/lib/jvm/java-1.6.0-openjdk.x86_64/bin/appletviewer
找到具体原因后,就知道怎么解决啦!
因为服务器是公司的,所以我不能随便删除文件。
既然在配置上,我们没法解决,那我们就在命令框里引入指定jdk
就行了。
node {
git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'
def mvnHome = tool 'M3.2.3'
// 这里就是引入我们在全局配置中配置的jdk;写法:tool 名称
def jdk77 = tool 'jdk1.7'
// 再把变量加入到环境变量中
env.PATH = "${jdk77}/bin:${mvnHome}/bin:${env.PATH}"
sh "mvn -B verify"
sh "echo '$PATH'"
sh "which java"
//sh "echo ${JOB_NAME}"
//sh "echo ${env.JOB_NAME}"
}
// 部分内容
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running test.SomeTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.002 sec - in test.SomeTest
Running test.OtherTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec - in test.OtherTest
Results :
Tests run: 7, Failures: 0, Errors: 0, Skipped: 1
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ simple-maven-project-with-tests ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /home/jenkins/dataspace/workspace/pipeline_test/target/simple-maven-project-with-tests-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.660 s
[INFO] Finished at: 2017-11-17T18:10:51+08:00
[INFO] Final Memory: 22M/964M
[INFO] ------------------------------------------------------------------------
[Pipeline] sh
[pipeline_test] Running shell script
+ which java
/usr/java/jdk1.7.0_51/bin/java
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
参考地址:
https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md