情景描述
- 使用jenkins的分布式构建
- 设置ubuntu分别作为jenkins master service以及slave service
- 使用java web start的方式进行slave connect master
- 此时在ubunut的slave node上执行
javaws http://localhost:8080/computer/mac_test/slave-agent.jnlp
(请求路径没问题) - 爆出错误:
Java Web Start splash screen process exiting ….. vagrant@vagrant-ubuntu-trusty-64:/vagrant$ Splash: X11 connection failed: No such file or directory
问题解决
- Q1:错误log是什么意思?为什么文件在请求路径上验证过是存在的会报错是No such file or directory?
- A1:首先翻译错误log:java web start启动屏幕进程终止了,x11链接失败,找不到文件。
Q2:java web start是什么?我们到底又执行了什么?
-
A2:之前使用jenkins的时候只知道jws只是一种connect master的方式,似乎理解完全错误了。根据官网介绍:
Java Web Start 是一个软件,使您可以从 Web 下载和运行 Java 应用程序。(第一次下载采用 Java Web Start 技术的 Java 应用程序时,Java Web Start 软件会自动启动。Java Web Start 软件将整个应用程序高速缓存(存储)到本地计算机上。)
- 提供一种单击一次即可激活应用程序的便捷方法
- 保证您始终运行最新版本的应用程序
(每次启动应用程序时,Java Web Start 软件组件都会检查应用程序的 Web 站点以确定是否有新的版本) - 避免了复杂的安装或升级过程
java web start原来是一个运行app的软件,也理解了我执行的
javaws http://localhost:8080/computer/mac_test/slave-agent.jnlp
的意思:使用java web start软件安装并启动jnlp中的应用程序。这个应用程序所做的就是主动connect master节点。
- Q3:那么我们为什么要使用java web start connect?
- A3:因为:
- 这种方式很方便,对于jenkins master只要在jenkins web上放上一个jnlp应用程序,对于slave 只需要使用javaws运行一下这个app就可以建立连接。
- 当slave的数量变大,master通过ssh主动connect的话需要记录每service的IP和密码很不方便,通过这种方式主机并不需要主动去链接slave也
不需要知道其IP,slave主动链接。
- Q4: 那么`Java Web Start 为什么会启动屏幕进程,那么屏幕进程为什么又会终止?
- A4:我在本地尝试过javaws指令发现弹出了对话框让我选择是否要连接。因此可以明白,在这个jnlp的应用程序中包含弹出GUI提示框的这一部分。那么之所以终止是因为vagrant box中并不提供可视化界面GUI。
Q5:那么x11是什么?是不是因为没有GUI造成not connect?
-
A5:补充知识:
X11也叫做X Window系统,X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面 的标准工具包和协议.X 仅为 GUI 环境构建提供了基本的框架,在屏幕上绘图和移动窗口,以及与鼠标和键盘交互.
根据以上知识可以明白:x11是用来建立GUI的,由于vagrant虚拟机不支持GUI那么肯定不会存在x11这个工具包,所以出现connect fail。
反思
- 一开始老师让我使用java web start的方式。我没有问为什么。在使用过程中我只关注how,而没有关注what和why、when。how只是一条指令,就算我用了work了下次也不一定记得。以后也只会说上次我用connect jenkins slave用的是java web start我会用。但是我不懂为什么和是什么也许下一个场景并不适合使用。而只有明白了what和why、when者才会变成我自己的知识。
ACTION
- 以后使用到的任何新的技术方法,要求自己使用到就记录下来,包括bug任何shell 语句,回来必须立刻将bug写成每日总结新知识写成3w和1h形式。