小白7码-拾遗笔记-基于OpenJDK的Jenkins Ubuntu安装部署

725 阅读4分钟

Jenkins是当下比较流行的一款DevOps工具,常用于软件及服务应用等产品的持续集成和自动化部署工作。尤其是在现有微服务概念大流行的情况下,DevOps和CI工具变得越来越炙手可热,也因此催生很多新的岗位和职业。所以Jenkins之类的工具在软件开发工作中也越来越常见,也越来越重要。小白之所以写下这篇小白文,因为小白公司项目开始大的底层环境迁移工作,将从Oracle JDK 8 迁移至OpenJDK 11下。其中不仅包括zookeeper,jenkins等重要软件,也包括项目代码本身。OpenJDK和Oracle官方JDK 8 版本之间的差异,不得不让小白为之慎重。所以记录一下特定的步骤以及遇到的难题以及相应的解决方案以备不时之需。

环境以及软件:

OS:Ubuntu 18.04 lts (目前最新为 20.04 lts)

Java: OpenJDK 11 (受限项目中Kafka消息队列的环境要求)

Jenkins:2.249.3 LTS War版本

Tomcat 9

Maven

Git

NodeJS

安装Jenkins

安装Jenkins之前,需要大家下载安装好OpenJDK 11以及Tomcat 9. 安装OpenJDK 11以及Tomcat 9的步骤小白不再细说,只能说大家耳熟能详了。记得配置好相应的环境变量例如JAVA_HOME等。对于Tomcat在ubuntu之类Linux环境运行需要特别提到一点。如果你是以非root账号登录的,那么要么将Tomcat程序目录的用户和用户组切换到当前帐号下,要么在Tomcat的bin目录的catalina.sh 添加上JAVA_HOME环境变量,并用sudo启动脚本。

安装Jenkins时,只需要将Jenkins的War包放入Tomcat的webapps目录下即可:

启动Jenkins

在Jenkins的War放入Tomcat的webapps目录后,Tomcat就会自动解压并编译运行Jenkins目录下的程序。然后你就可以通过网页地址去访问Jenkins:https://xxxx:8080/jenkins

然后你就可以看到jenkins的初始化页面:

Oh, Shit!!!这是什么鬼?!!好吧,终于碰到一个坑了。先看一下错误信息吧:

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://jenkins.io/redirect/troubleshooting/java.awt.headless
java.lang.NullPointerException
	at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
	at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
	at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
	at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
	at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312)
	at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
	at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)

貌似是AWT组件中FontConfiguration组件出现一些问题。隐约记得好想OpenJDK的某一个坑。OpenJDK和Oracle JDK之间其中一个差别是:OpenJDK对某一些组件类似上面的字体组件不是必要包含,需要用户自主选择安装配置。

然后就是google,度娘balabala之类的,大体归结四种方式:

  1. 在运行jenkins是添加jvm参数。

  2. 在Linux的环境变量中添加font相关环境变量。

  3. 在OpenJDK的module目录下配置fontconfiguration的property的配置文件。

  4. 在linux服务器上安装特定的字体包。

小白尝试了其中的几种,目前在ubuntu下只有第4中方式是可行的。需要安装fontconfig和ttf-dejavu:

sudo apt-get install fontconfig ttf-dejavu

安装完之后很重要一点是重启****Tomcat,重启Tomcat,重启Tomcat。因为已经运行的jvm进程不会应用后面的配置修改。所以需要重启jvm进程来让其生效。

好了,终于出现熟悉而正常的页面了。稍等片刻就可以继续了。

配置Jenkins插件

正常运行后,在输入初始化密码后,我们就可以开始安装配置Jenkins,其中很重要的一环就是选择你需要的插件,如下图所示。基于特定的需要,我们“选择插件来安装”。

必要的插件:

  1. Git

  2. Publish Over SSH

  3. Role-Based Authorization Strategy

  4. Maven Integration (初始化中未出现,装好后插件管理器中安装)

选择必要和默认的插件,然后等待安装即可。

在安装插件过程中,有时候会出现插件安装失败,因为插件依赖的部分组件没有安装成功。比如说小白遇到过依赖echart-api的组件的所有插件没有安装成功。这个时候可以选择手动下载对应的插件组件。下面是一个jenkins的一个公开插件库,大家可以从中找到对应的插件:http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/plugins/。 从库中找到对应的插件并下载,最后将其放入jenkins的plugins目录下即可。然后重新安装插件就可以成功。

结论

在OpenJDK下安装运行Jenkins相对来说又些小麻烦。因为OpenJDK受限版权困扰而不能包含完整的JDK实现确实带了一些不确定性。但是从目前来说这些还不是大问题,都能够得到有效的解决。希望Java还是能够得到好的发展。