一、Jenkins 简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。
Jenkins是一种软件允许持续集成。Jenkins 安装在一台服务上也*构建发生的地方。
Jenkins 是一个可扩展的持续集成引擎。
主要用于:
1、持续、自动地构建/测试软件项目。
2、 监控一些定时执行的任务。
Jenkins拥有的特性包括:
1、 易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。
2、 易于配置-所有配置都是通过其提供的web界面实现。
3、 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
4、 生成JUnit/TestNG测试报告。
5、 分布式构建支持Jenkins能够让多台计算机一起构建/测试。
9、 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
10、 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。
Jenkins的目标:
Jenkins的主要目标是监控软件开发流程,快速显示问题。所以能保证开发人员以及相关人员省时省力提高开发效率。
CI系统在整个开发过程中的主要作用是控制:当系统在代码存储库中探测到修改时,它将运行构建的任务委托给构建过程本身。如果构建失败了,那么CI系统将通知相关人员,然后继续监视存储库。它的角色看起来是被动的;但它确能快速反映问题。
特别是它具有以下优点:
1、Jenkins一切配置都可以在web界面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的项目就都能用。当然也可以通过修改XML进行配置。
2、 支持Maven的模块(Module),Jenkins对Maven做了优化,因此它能自动识别Module,每个Module可以配置成一个job,相当灵活。
3、 测试报告聚合,所有模块的测试报告都被聚合在一起,结果一目了然,使用其他CI,这几乎是件不可能完成的任务。
4、 构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载。
Jenkins功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
二、下载安装
-
下载地址:https://jenkins.io/download/
下载地址
下载地址
-
安装JDK与Maven
-
安装Tomcat
# 下载Tomcat
[root@localhost ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.26/bin/apache-tomcat-9.0.26.tar.gz
# 解压
[root@localhost ~]# tar -zxvf apache-tomcat-9.0.26.tar.gz -C /usr/local/
# 启动测试
[root@localhost apache-tomcat-9.0.26]# ./bin/startup.sh
- 下载安装与运行:
# 下载 war 包
[root@localhost ~]# wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.190.1/jenkins.war
# 运行
[root@localhost ~]# java -jar jenkins.war --httpPort=8080
Running from: /root/jenkins.war
webroot: $user.home/.jenkins
2019-10-09 02:02:47.975+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @307ms to org.eclipse.jetty.util.log.JavaUtilLog
2019-10-09 02:02:48.042+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
2019-10-09 02:02:48.061+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2019-10-09 02:02:48.103+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-9.4.z-SNAPSHOT; built: 2019-05-02T00:04:53.875Z; git: e1bc35120a6617ee3df052294e433f3a25ce7097; jvm 1.8.0_222-b10
2019-10-09 02:02:48.276+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2019-10-09 02:02:48.306+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: DefaultSessionIdManager workerName=node0
2019-10-09 02:02:48.307+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: No SessionScavenger set, using defaults
2019-10-09 02:02:48.308+0000 [id=1] INFO o.e.j.server.session.HouseKeeper#startScavenging: node0 Scavenging every 600000ms
Jenkins home directory: /root/.jenkins found at: $user.home/.jenkins
2019-10-09 02:02:48.643+0000 [id=1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@37313c65{Jenkins v2.190.1,/,file:///root/.jenkins/war/,AVAILABLE}{/root/.jenkins/war}
2019-10-09 02:02:48.666+0000 [id=1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@26ba2a48{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2019-10-09 02:02:48.683+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: Started @1016ms
2019-10-09 02:02:48.684+0000 [id=20] INFO winstone.Logger#logInternal: Winstone Servlet Engine v4.0 running: controlPort=disabled
2019-10-09 02:02:49.465+0000 [id=28] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization
2019-10-09 02:02:49.468+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins
2019-10-09 02:02:50.392+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2019-10-09 02:02:50.395+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins
2019-10-09 02:02:50.423+0000 [id=26] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2019-10-09 02:02:50.797+0000 [id=28] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2019-10-09 02:02:50.885+0000 [id=41] INFO hudson.model.AsyncPeriodicWork$1#run: Started Download metadata
2019-10-09 02:02:50.964+0000 [id=41] INFO hudson.util.Retrier#start: Attempt #1 to do the action check updates server
2019-10-09 02:02:51.497+0000 [id=25] INFO o.s.c.s.AbstractApplicationContext#prepareRefresh: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@37237ab6: display name [Root WebApplicationContext]; startup date [Wed Oct 09 10:02:51 CST 2019]; root of context hierarchy
2019-10-09 02:02:51.497+0000 [id=25] INFO o.s.c.s.AbstractApplicationContext#obtainFreshBeanFactory: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@37237ab6]: org.springframework.beans.factory.support.DefaultListableBeanFactory@43064edb
2019-10-09 02:02:51.507+0000 [id=25] INFO o.s.b.f.s.DefaultListableBeanFactory#preInstantiateSingletons: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@43064edb: defining beans [authenticationManager]; root of factory hierarchy
2019-10-09 02:02:51.645+0000 [id=25] INFO o.s.c.s.AbstractApplicationContext#prepareRefresh: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@20cd72f: display name [Root WebApplicationContext]; startup date [Wed Oct 09 10:02:51 CST 2019]; root of context hierarchy
2019-10-09 02:02:51.645+0000 [id=25] INFO o.s.c.s.AbstractApplicationContext#obtainFreshBeanFactory: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@20cd72f]: org.springframework.beans.factory.support.DefaultListableBeanFactory@5a4fc459
2019-10-09 02:02:51.645+0000 [id=25] INFO o.s.b.f.s.DefaultListableBeanFactory#preInstantiateSingletons: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5a4fc459: defining beans [filter,legacy]; root of factory hierarchy
2019-10-09 02:02:51.771+0000 [id=25] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
6739a91dcefe4b53b2685723bf1ecd71
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
2019-10-09 02:03:02.041+0000 [id=25] INFO hudson.model.UpdateSite#updateData: Obtained the latest update center data file for UpdateSource default
2019-10-09 02:03:03.121+0000 [id=25] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2019-10-09 02:03:03.150+0000 [id=19] INFO hudson.WebAppMain$3#run: Jenkins is fully up and running
2019-10-09 02:03:04.781+0000 [id=41] INFO hudson.model.UpdateSite#updateData: Obtained the latest update center data file for UpdateSource default
2019-10-09 02:03:05.315+0000 [id=41] INFO h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2019-10-09 02:03:05.315+0000 [id=41] INFO hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2019-10-09 02:03:05.321+0000 [id=41] INFO hudson.model.AsyncPeriodicWork$1#run: Finished Download metadata. 14,430 ms
- YUM 安装:
# YUM 安装
[root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@localhost ~]# yum install jenkins
# WAR包
/usr/lib/jenkins/jenkins.war
# 配置文件, 修改用户为:root
/etc/sysconfig/jenkins
# 默认的JENKINS_HOME目录
/var/lib/jenkins/
# Jenkins日志文件
/var/log/jenkins/jenkins.log
# 添加服务
[root@localhost ~]# service jenkins start
# 启动测试
[root@localhost ~]# systemctl start jenkins
Starting jenkins (via systemctl): [ 确定 ]
# 重启 jenkins
[root@localhost ~]# systemctl restart jenkins
注意: systemctl start jenkins 启动不了
- RPM 安装
https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
二、启动测试
- 启动
[root@localhost ~]# java -jar jenkins.war --httpPort=8080
或
[root@localhost ~]# systemctl restart jenkins
-
安装配置
获取密码
[root@localhost ~]# vi /root/.jenkins/secrets/initialAdminPassword
-
默认插件安装
比较慢(看网速):安装插件
安装插件
-
创建管理员
创建管理员
-
实例配置
实例配置
安装完成
三、系统配置
系统配置
四、插件安装
-
Maven构建插件
Maven Integration
Maven集成。Maven Integration
安装完成后,新建任务中会出现,Maven项目:
Maven
-
Deploy to container
布署到容器如:Tomcat -
Publish Over SSH
把jenkins服务器上的文件,传输到远程服务器的指定目录。Publish Over SSH
-
Multijob plugin
可以让jenkins任务按照分组、顺序执行jenkins版本。 -
安装和Git,GitLab插件
GitLab
-
Gitee
文档地址:https://gitee.com/help/articles/4193#article-header2
码云插件。Gitee
码云链接配置:
1)前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
2)在 Connection name 中输入 Gitee 或者你想要的名字(一般为项目名称)名称
3)Gitee host URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)
4)创建码云私人令牌
地址: https://gitee.com/profile/personal_access_tokens创建码云私人令牌
创建令牌
5)认证配置认证配置
认证配置
6)测试测试
最后要保存
。
四、全局配置
-
JDK
JDK安装
-
GIT
检查系统是否安装
如果没有安装,请使用以下命令安装:
[root@bogon ~]# yum install git
-
Maven
Maven
五、认证配置
-
添加一个jenkins连接到码云时,登录到码云的用户名和密码
新建认证
全局认证
添加认证
六、创建Maven构建任务
-
Maven项目创建
任务创建
-
任务配置
添加描述
指定分支
添加时间戳
前置构建设置:
clean package -Dmaven.test.skip=true
前置构建
后置构建
-
执行任务
执行任务
查看输出
查看控制台输出
七、常见错误
-
Caused by: java.lang.ClassNotFoundException: hudson.util.HudsonFailedToLoad
-
linux java进程后台启动,并输出日志到指定文件
完整的命令将是:
nohup java -jar jenkins.war --httpPort=8080 >/logs/jenkins.log &
启动执行,执行成功。查看日志。
tail -f /logs/jenkins.log
- 查找已安装的YUM
[root@localhost ~]# yum list installed jenkins
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.tuna.tsinghua.edu.cn
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.huaweicloud.com
已安装的软件包
jenkins.noarch 2.190.1-1.1 @jenkins
- 忘记密码
(1)admin 密码密文
Jenkins 中所有的用户信息都保存在 JENKINS_HOME 目录下的 users 目录中,每个用户对应一个目录。对应 admin 用户,可以查看 users/admin/config.xml 文件,其中 passwordHash 字段中 #jbcrypt: 后面的部分就是密码经过 hash 加密后的密文。
(2) admin 密码明文
JENKINS_HOME 目录中的 /secrets/initialAdminPassword 文件明文保存 admin 用户的密码,直接查看即可。下面例子中的 JENKINS_HOME 需要替换为你实际的目录。
cat JENKINS_HOME/secrets/initialAdminPassword