Jenkins Pipeline 小试牛刀以及引入指定的环境变量

https://blog.csdn.net/u013066244/article/details/78569229?utm_source=blogxgwz8

环境

操作系统: 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]

1

这句话的意思是,我要编译的项目要求jdk必须是1.7,而我Jenkins构建时,却不是jdk1.7的环境。
这我就更纳闷啦!
我的配置

maven全局配置:
这里写图片描述

jdk配置:

这里写图片描述

git配置:

这里写图片描述

maven 配置:

这里写图片描述

可以看出,我jdk明明配置的就是jdk1.7可是为什么就是不行呢?
猜测一,可能Jenkins启动配置文件读取了其他版本的jdk

于是我把启动文件只保留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,也就是说它可能读取到了这个配置

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

带着欢喜重启Jenkins:

service jenkins stop
service jenkins start

1
    2

但是还是失败啦!
猜测二,是不是服务器上maven读取的Java版本不对

在服务器上执行:

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"

1
    2
    3
    4
    5
    6
    7
    8
    9

可以看出是jdk1.7
正真的原因

这时我纠结了很久,甚至去github上去截图留言;

后来我在命令框里执行了这么一句:

node {
    sh "java -version"
    sh "which java"
}

1
    2
    3
    4

得到的结果:

[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

1
    2
    3
    4
    5
    6
    7
    8

注意看我用井号注释的,可以看出虽然我在配置里配置了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

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

解决办法

找到具体原因后,就知道怎么解决啦!
因为服务器是公司的,所以我不能随便删除文件。
既然在配置上,我们没法解决,那我们就在命令框里引入指定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}"
}

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

// 部分内容
-------------------------------------------------------
 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
————————————————
版权声明:本文为CSDN博主「山鬼谣me」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013066244/article/details/78569229

Jenkins Pipeline 小试牛刀以及引入指定的环境变量相关推荐

  1. 2通过程序获得环境变量,getenv(),setenv()函数和unsetenv()函数,env查看环境变量,echo输出指定的环境变量

     1进程环境 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明.例如: 运行结果: 2.env命令可以查看进程信息 3. ...

  2. Jenkins Pipeline 语法

    目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...

  3. Jenkins Pipeline动态使用Git分支名称的技巧

    前言 在上一篇 Jenkins 使用环境变量 中,帮助大家使用一条 Docker 命令就可以快速玩转 Jenkins,同时用最简单的方式解释了 Jenkins 中让人混乱的环境变量,本文还是接着变量说 ...

  4. gatling 使用_使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...

    gatling 使用 在这篇文章中,我将解释如何使用Gatling项目为您的JAX-RS Java EE端点编写压力测试,以及如何将它们与Gradle和Jenkins Pipeline集成,因此,除了 ...

  5. 使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...

    在这篇文章中,我将解释如何使用Gatling项目为您的JAX-RS Java EE端点编写压力测试,以及如何将它们与Gradle和Jenkins Pipeline集成,因此,除了进行简单的压力测试外, ...

  6. 持续集成:Jenkins pipeline全局变量

    在编写Jenkins Pipeline脚本时,需要使用到一些全局变量,比如环境变量jenkins URL.项目地址,保存在env变量中(字符串类型),可以在Jenkins Pipeline或者其它Je ...

  7. 系统变量与环境变量的关系

    <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-al ...

  8. sudo执行脚本找不到环境变量解决方法

    问题: 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本, 然后再sudo执行脚本,就找不到变量,未能获取到值. 原因 sud ...

  9. Linux环境变量的设置和查看方法

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...

最新文章

  1. 题目1025:最大报销额
  2. Python 爬虫篇-爬取web页面所有可用的链接实战演示,展示网页里所有可跳转的链接地址
  3. 可以用什么代替平面镜
  4. 驱动开发中的常用操作
  5. 【Elasticsearch】我在 Elasticsearch 集群内应该设置多少个分片?
  6. python pso_利用python实现PSO算法优化二元函数
  7. Java疯狂讲义第五章笔记
  8. java 按拼音模糊搜索汉字_C#中拼音模糊匹配汉字智能搜索
  9. 谷歌表格图表 横坐标 滚动_JS图表:Google表格
  10. GAMMA初学笔记三
  11. 手把手教你用 Pygame 复刻游戏
  12. git问题:head detached at xxxx
  13. Ubuntu Server 20.04 安装桌面(图形界面) 以及 远程桌面
  14. synchronized——java同步关键字
  15. 达梦数据库 find_in_set 函数适配
  16. 支付宝公布2019集五福攻略,准备好薅羊毛的正确姿势...
  17. Linux驱动笔试知识
  18. 3.数据挖掘——房价项目预测(三)Pandas学习
  19. 专科云计算的出路在哪里?
  20. Java Web过滤器(Filter)

热门文章

  1. Fastadmin 后台上传视频
  2. C#检查图片是否空白图片
  3. 【CV/Matlab系列】基于matlab GUI的视频监控界面
  4. 海思Hi3519A开发(4.移植OpenCV4.0.1到Hi3519A开发板)
  5. HTTP请求方法、GET和POST的区别
  6. 【Java】三款经典游戏 java版本(开源)提升代码水平
  7. svg+js浴火凤凰js特效
  8. 迁移学习笔记4:ACML-Sinno Jialin Pan
  9. 硬件ecc和软件ecc
  10. director(director)