Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。
1.下载war包:
官方地址下载:http://mirrors.jenkins-ci.org/war-stable/
https://mirrors.jenkins-ci.org/war/
2、启动Jenkins
移步看第七点描述,小编后来都采用第二种方式启动的,建议各位先用第一种启动,等出现第七点问题之后,再采用第二种方式,这样映像会更深刻些!!!!
java -jar ./jenkins.war –httpPort=8080
java -Dhudson.util.ProcessTree.disable=true -jar ./jenkins.war –httpPort=8080
3、测试
确认终端启动的输出日志正常,并用浏览器访问测试环境的服务,地址为:http://IP+8080
4、Jenkins安装界面配置
1、解锁服务
第一次,登录,需要进行一个解锁 ,页面也会有提示,
/root/.jenkins/secrets/initialAdminPassword,我们可以通过这个文件中查看密码,并输入。
2、进入安装界面
3、进入 Getting Started 界面
最好能确保推荐安装的插件都有安装成功。
5、新建admin用户
会提示我们需要新建一个用户,这个我们自己新建,记得记录好新建的用户口令就行。
确认完成后,就正式进入到了Jenkins的页面。
Welcome to Jenkins!
补充:
Jenkins的配置,和插件的安装都会放入~/.jenkins中,所以如果需要重新初始化安装,只需要清理掉~/.jenkins的文件即可。
6.CSRF403解决
根据官网描述,Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。
1.在界面关闭,网上有教程,本人界面并无关闭按钮
2.由于本人安装的是2.332版本war包方式
解决方式:在/~/.jenkins目录下 打开 congig.xml文件
设置true,关闭权限验证
7.Jenkins中无法启动子进程的解决办法
先介绍下场景:
这是小编配置文件!
问题描述:配置execute shell,windows batct脚本后不能启动jar文件等问题,其实大部分情况下不是不能启动,而是启动后随着job结束进程被杀死,造成不能启动的假象,这一点从tomcat的日志中可以看来,虽然也给出了解决方法,但没有回答本质问题
ps java查看进程并没有,但启动日志已经打印
在Jenkins中新建了一个Job,假设你在一些Build Step之前/之后,启动了一个进程,打个比方说启动一个JAR进程。等到Build完成,你去Console Output中查看显示启动成功,甚至PID也有了。但是当你去后台查看的时候,发现其实这个进程根本不存在,并没有启动成功。
不过如果你使用的是较早的Hudson版本(Ver 1.136),并且是直接在页面中的Build Session中(如Excute Shell)执行命令的话,你可能会得到如下的提示:
WARNING hudson.Proc$LocalProc#join: Process leaked file descriptors. See https://www.jenkins.io/redirect/troubleshooting/process-leaked-file-descriptors for more information
官网解释 Jenkins : ProcessTreeKiller
如果你看过官网文章,那么你就会明白造成这种问题的原因是什么:Jenkins默认会在Build结束后Kill掉所有的衍生进程。
从官方的说明中可以看出,造成这种问题的原因,是由于文件描述符的丢失以及子进程是如何继承的。
Jenkins和子进程之间的通信使用三根管道进行:stdin,stdout,stderr,由于Jenkins可以捕捉到子进程的输出,而子进程可能往stdout中写入大量数据然后立即退出,Jenkins为了完整的读取子进程的输出,会在用于子进程stdout的管道上等待EOF。这样,无论子进程由于什么原因退出,系统将关闭进程使用的文件描述符,因而Jenkins总是可以收到EOF。
但是当子进程在后台fork出另一个进程的时候(比如A fork出了B,启动一个daemon进程),情况就出现一些变化。由于进程B会继承进程A的文件描述 符,如果进程B没有关闭这些描述符,即使进程A退出,这些描述符依然是打开的,Jenkins将不会在相应管道上收到EOF。
通常一个实现良好的daemon会关闭所有文件描述符以避免这个问题,但是总有一些实现没有遵循这个规则。在更旧版本的Hudson上,这个问题甚至将导致Job无法结束,Jenkins一直在那等待EOF。
解决办法
看官网描述即可明白Jenkins : ProcessTreeKiller
现在我们知道,jar之所以没有启动成功,是因为它没有关闭继承的文件描述符,Jenkins在Job构建过程结束后认为jar进程未终止,因而将其kill掉了。
1.重设环境变量BUILD_ID
修改Hudson设置的环境变量BUILD_ID的值,从而让Jenkins认为此进程不是由Job的构建过程衍生的,如:
- BUILD_ID=dontKillMe /usr/apache/bin/httpd
后面的"/usr/apache/bin/httpd"可以省略,即只需要在parameter build trigger中加入一个string parameter,变量名为BUILD_ID,值为dontKillMe即可。
2.启动时添加禁用参数
上面的Wiki页面中还提到了第二种解决办法,个人觉得这种方案最靠谱最彻底,不需要再去配置每个Job了:
you can disable this feature by setting a Java property named "hudson.util.ProcessTree.disable" to the value "true". This can be done as a parameter to the "java" binary when starting Jenkins:
在启动Jenkins的时候直接通过Java选项来关闭Jenkins杀掉所有衍生进程的这个功能:
小编采用的这种方式启动jenkins
- java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war