为了配合上一篇的ant+jenkins做持续集成,需要在linux环境下搭建一个jenkins平台。网上有很多安装的例子,我主要记录一下自己遇到的问题,真真的是特别惆怅的,每次我遇到的问题都格外多。
主要分为三块内容,具体如下:
*安装
*问题及解决,
一 安装jenkins
1 首先确认该机器已经安装jdk,确认方式:在linux机器上输入 java -version,若系统可识别java命令,则表示已安装jdk,如下
得到的1.7.0_79为java版本,需注意:有些版本的jenkins不能使用1.6的jdk
2 安装jenkins
A 离线安装:
① 下载jenkins.war 包。Jenkins官方地址:http://Jenkins-ci.org/ (最新war包的下载地址:http://mirrors.jenkins-ci.org/war/latest/jenkins.war)
② 下载一个tomcat容器在webapps中放入jenkins.war,不要解压。
③ 在cd /opt/soft/tomcat/webapps/ 中执行 java -jar jenkins.war
④ 查看日志是否有异常,访问http://ip:8080即可看到jenkins界面,jenkins安装成功。
B 在线安装
使用yum命令进行在线安装,使用service命令进行启动,具体操作如下:
wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo --no-check-certificate rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key yum install jenkins
[root@bjdhj-120-215 run]# service jenkins start
Starting Jenkins [确定]
[root@bjdhj-120-215 run]# service jenkins status
jenkins (pid 23873) 正在运行...
浏览器访问http://ip:8080 即可看到jenkins界面,jenkins安装成功
二 配置JOB
1 安装插件 Manage Jenkins->Manage Plugins ->Available中选取即可
一般需要安装的插件有 Email Extension Plugin(发送邮件)、Cobertura Plugin(集成xml报告?)、Pipeline: Build Step(配置job的前后序)、GitLab Plugin(从git同步)
2 邮箱配置
这个地址很详细:https://blog.csdn.net/fullbug/article/details/53024562
A jenkins location中配置
B Extended E-mail Notificationn配置
C Email Extension Plugin配置,test即可收到邮件
注意:SMTP server注意不要写错
3 节点配置 Jenkins Manage - > Manage Nodes
A 配置节点
B 关联工程
4 一个项目的配置
123
三 遇到的问题
问题1 在执行yum install jenkins时提示:user jenkins does not exist
解决:该机器上没有jenkins用户,需要使用adduser命令创建用户,adduser命令需要配合更改passwd等的权限位完成
[root@esearch01 ~]# adduser jennkins adduser: cannot open /etc/passwd #是因为该文件加了权限位,不可写操作
[root@esearch01 etc]# lsattr passwd #进行确认
----i--------e- passwd
[root@esearch01 etc]# chattr -i passwd #去掉权限位
[root@esearch01 etc]# lsattr passwd #进行确认
-------------e- passwd
[root@esearch01 etc]# adduser jenkins #即可创建成功jenkins用户
问题2:修改jenkins的端口
解决:完成jenkins的在线安装后,查看/usr/lib/jenkins/jenkins.war;查看/etc/sysconfig/jenkins是jenkins的配置文件
修改jenkins文件的端口号:
vim /etc/sysconfig/jenkins 编辑该文件,修改如下两个端口
JENKINS_PORT="8001"
JENKINS_AJP_PORT="8009"
保存文件并退出,重启jenkins(service jenkins restart),在浏览器中访问http://ip:8001,打开jenkins页面。
问题3:jenkins的启动日志报错:
WARING:Could not intialize the host network interface on nullbecause of an error:101/udp
java.net.UnknownHostException:101/udp
原因:在linux执行hostname,得到101/udp。正常应该是通过hostname获取对应的机器ip,但是明显101/udp在解析时不通过,所以无法定位ip,导致错误。
解决:更新hostname。执行语句为hostname bjdhj-120-215.58os.org(自己定义一个合理的hostname名称),可用其他机器ping改hostname,看是否能正确得到对应的ip。
再次启动jenkins.war,日志正常,可访问web页面。
问题4:不能正确stop jenkins
[root@bjdhj-120-215 ~]# service jenkins stop
Shutting down Jenkins [失败]
[root@bjdhj-120-215 ~]# service jenkins status
jenkins is stop,pid is exist
解决1:java版本冲突,确认下是否同时存在java1.6 java1.7或者其他,卸载,只保留一个
解决2:重新安装jenkins,即再执行一遍yum install jenkins。
解决3:我是重新安装了好了,但我总觉得有其他地方可以解决这个问题,所以先留着坑。
问题5:提示java版本不符
[root@localhost ~]# service jenkins start Starting Jenkins May 20, 2019 12:39:13 AM Main verifyJavaVersion SEVERE: Running with Java class version 51, which is older than the Minimum required version 52. See https://jenkins.io/redirect/java-support/ java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJavaVersion(Main.java:182) at Main.main(Main.java:142) Jenkins requires Java versions [8, 11] but you are running with Java 1.7 from /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre java.lang.UnsupportedClassVersionError: 51.0 at Main.verifyJavaVersion(Main.java:182) at Main.main(Main.java:142)
解决:下载jdk1.8,放到了/usr/lib/jvm/jdk1.8.0
vim /etc/init.d/jenkins文件,查看配置,执行java命令 确认到 usr/bin/java与/etc/alternatives/java下为jdk1.7,在对应目录下建立软连接 java8 到/usr/lib/jvm/java-1.8.0/bin/java,再更改/etc/init.d/jenkins文件为 #后内容,再重启即可成功
candidates="
/etc/alternatives/java #/etc/alternatives/java8
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java " #/usr/bin/java8
问题6:windows访问linux的ip:port失败,但是ping ip可以通
防火墙问题,需要在linux机器开放jenkins的端口,设置如下,再次访问即可成功。
vim /etc/sysconfig/iptables #添加一条记录 -A INPUT -p tcp -m tcp --dport 8090 -j ACCEPT #一定要在倒数第一/二前才生效 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited /etc/init.d/iptables restart /etc/init.d/iptables save
问题7:勾选了Exit code to set build unstable,结果是fixed,而不是success
怎么样可以根据构建结果来输出success和failure,而不是fixed和unstable