Jenkins在Java11环境下启动报错解决

Jenkins在Java11环境下启动报错解决

  • 背景缘由
  • 安装过程
  • 额外补充

背景缘由

一直以来都没有机会接触jenkins,直到我公司搭建了jenkins自动部署之后,我意识到它的强大和方便,于是抱着自己试一试玩一玩的态度也去用一下这个jenkins吧,本次把我自己遇到的坑以及解决和大家说一下哈。

安装过程

一般安装jenkins我们只需要到官网下载一个war包,然后直接使用如下命令运行即可:

# start jenkins
java -jar jenkins.war --httpPort=8080

但是,此时此刻并不是如我所愿,启动的时候报错了(图没有截下来),但是大概意思是,jenkins版本过低,需要升级才能启动。这时,我检查了我服务器环境的参数:

  • 操作系统:CentOS 7
  • java版本:jdk11

原因总算我可以大概确定,应该是跟jdk版本有关系,通过翻阅jenkins官网文档,发现如下标题:
在这里插入图片描述
于是我下载了最新的jenkins.war,但是运行的时候还是报错,接着往下看文档,原来在java11的环境下启动的命令还不一样!具体官网给出的启动方法如下:
Jenkins在Java11环境下启动报错解决_第1张图片
噢,原来jenkins在java11环境下,需要依赖一些其他的jar包来支持运行,于是我按照官网的步骤,把上面的四个jar包(jaxb-api-2.3.0.jar、jaxb-core-2.3.0.1.jar、jaxb-impl-2.3.0.1.jar、javax.activation v.1.2.0)都下载下来,放到jenkins的目录下,然后按照它下面给的命令再次启动(注意:如果你直接copy官网给的命令,你需要给以上四个jar包改成括号一样的名字,不然你要输入jar包的全称),具体如下:
在这里插入图片描述
OK,再次按照命令运行:

# start jenkins
java -p jaxb-api.jar:javax.activation.jar --add-modules java.xml.bind,java.activation -cp jaxb-core.jar:jaxb-impl.jar -jar jenkins.war --enable-future-java --httpPort=8080 --prefix=/jenkins

好吧~结果还是会报错,我有点奔溃了(为什么要装jdk11啊,装个jdk8不就完事了吗(┬_┬),好吧继续),但是这次报的是另外一个错误,是一个netty的启动错误(jenkins内置netty),明明是按照官方文档的步骤,为什么还是报错呢,于是我google了一下,找到一篇简书的解决办法,安装一下两个东东就好了(参考:https://www.jianshu.com/p/0d7a615165ae):

yum install dejavu-sans-fonts
yum install fontconfig

然后继续运行上面那个命令:

# start jenkins
java -p jaxb-api.jar:javax.activation.jar --add-modules java.xml.bind,java.activation -cp jaxb-core.jar:jaxb-impl.jar -jar jenkins.war --enable-future-java --httpPort=8080 --prefix=/jenkins

耶耶耶!!!此时此刻jenkins可以启动了!好激动!

额外补充

如果单单只运行这个命令的参数的话,的确jenkins可以启动,但是仅仅只在前台启动,当你把xhell退出或者把会话切换的时候,jenkins就会自动关闭了,解决办法如下,在命令最后多加一个参数-detached,这样jenkins就可以在后台运行而不会关掉了,所以完整的jenkins启动命令如下:

# start jenkins
java -p jaxb-api.jar:javax.activation.jar --add-modules java.xml.bind,java.activation -cp jaxb-core.jar:jaxb-impl.jar -jar jenkins.war --enable-future-java --httpPort=8080 --prefix=/jenkins -detached

觉得命令太长记不住的同学可以把命令写到shell脚本当中,这样每次只需要启动.sh文件就好了(__) 嘻嘻。

你可能感兴趣的:(运维工程化,java,jenkins,java)