jenkins 安装以及Jenkins无法在界面关闭跨站请求伪造保护(CSRF)解决403以及如何关闭Jenkins杀掉所有衍生进程

Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。

1.下载war包:

官方地址下载:http://mirrors.jenkins-ci.org/war-stable/

https://mirrors.jenkins-ci.org/war/

Jenkins

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的构建过程衍生的,如:

  1. 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

  1. java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war  
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值