jenkins 介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作。
作用
- 持续、自动地构建/测试软件项目
- 监控一些定时执行的任务
特点
- 开源免费;
- 跨平台,支持所有的平台;
- master/slave支持分布式的build;
- web形式的可视化的管理页面;
- 安装配置超级简单;
- tips及时快速的帮助;
- 已有的200多个插件
jenkins安装
注意:安装jenkins时需要连接网络
jenkins下载地址:https://jenkins.io/download/
1.rpm包安装jenkins
centos7系统;防火墙和selinux处于关闭状态;
jenkins基于java因此需要安装java,要求至少在1.5以上
rpm包配置java环境
[root@localhost Desktop]# ls
jdk-8u171-linux-x64.rpm jenkins-2.121.1-1.1.noarch.rpm
[root@localhost Desktop]# yum install -y jdk-8u171-linux-x64.rpm
#测试java环境是否安装完成
[root@localhost Desktop]# java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
[root@localhost Desktop]# java -version
java version "1.8.0_171"
[root@localhost Desktop]# yum install -y jenkins-2.121.1-1.1.noarch.rpm
[root@localhost Desktop]# systemctl start jenkins.service
#安装成功后,配置文件在/etc/sysconfig/jenkins下,默认端口为8080
[root@localhost Desktop]# netstat -antpl | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 4640/java
解压包配置java环境
[root@localhost ~]# wget https://download.java.net/java/early_access/jdk8/b03/BCL/jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@localhost ~]# tar -zxf jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz
[root@localhost ~]# mv jdk1.8.0_202/ /usr/local/java
将java加入系统变量,编辑配置文件,在配置文件后面添加一下几行
[root@localhost ~]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
加载配置文件,是配置文件生效
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_202-ea"
Java(TM) SE Runtime Environment (build 1.8.0_202-ea-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b03, mixed mode)
[root@localhost ~]# javac -version
javac 1.8.0_202-ea
2.war包安装jenkins
1.直接运行war包
[root@localhost ~]# wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.138.3/jenkins.war
[root@localhost local]# java -jar jenkins.war --httpPort=8080
##放入后台运行
[root@localhost local]# nohup java -jar jenkins.war >> /tmp/jenkins.log &
2.将war包放在tomcat的webapps目录下,在该目录下tomcat会自动生成jenkins目录,浏览器访问:http://localhost:80080/jenkins
[root@localhost ~]# mv jenkins.war /usr/local/tomcat/webapps/
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager jenkins jenkins.war manager ROOT
jenkins基于web界面操作
- 查询root用户登陆密码,复制密码粘贴到框框,点击右下角的下一步:
[root@localhost Desktop]# cat /var/lib/jenkins/secrets/initialAdminPassword
73f2e652c2604a5ea43325416c02654c
浏览器输入ip:8080访问
2. 选择第一个install suggested plugins
3. 连接网络在线安装
4. 创建第一个管理员用户
如果不创建选择save and continue旁边的cintinue as admin继续
5. 直接点击save and finsh
6. 点击start using jenkins
7. 输入刚才创建的管理员用户以及密码
8. 登录页面
jenkins词汇表
- agent 通常是一个机器或容器,它连接到Jenkins主机,并在主控器指导时执行任务。
- artifact在Build或Pipeline 运行期间生成的不可变文件,该文件归档到Jenkins Master上以供用户随后检索。
- build 项目单次执行的结果.
- cloud提供动态代理配置和分配的系统配置
- downstream配置Pipeline或项目时被触发作为一个单独的Pipeline或项目的执行的一部分。
- executor用于执行由节点上的Pipeline或 项目定义的工作的插槽。节点可以具有零个或多个配置的执行器,其对应于在该节点上能够执行多少并发项目或Pipeline。
- fingfreprint考虑全局唯一性的哈希追踪跨多个Pipeline或项目的工件或其他实体的使用 。
- folder类似于文件系统上的文件夹的Pipeline和/或项目的组织容器。
- item Web UI中的实体对应于Folder, Pipeline, or Project.
- master存储配置,加载插件以及为Jenkins呈现各种用户界面的中央协调过程。
- node作为Jenkins环境的一部分并能够执行Pipeline或项目的机器。无论是Master还是Agents都被认为是Nodes。
- project用户配置的Jenkins应该执行的工作描述,如构建软件等。
- pipeline用户定义的连续输送Pipeline模型
- plugin与Jenkins Core分开提供的Jenkins功能扩展。
- plublisher完成发布报告,发送通知等的所有配置步骤后的构建的一部分。
- stage是Pipeline的一部分,用于定义整个Pipeline的概念上不同的子集,例如:“构建”,“测试”和“部署”,许多插件用于可视化或呈现Jenkins Pipeline状态/进度。
- step单一任务从根本上讲,指的是Jenkins 在Pipeline或项目中做了什么。
- trigger触发新Pipeline运行或构建的标准。
- update center托管插件和插件元数据的库存,以便在Jenkins内部进行插件安装。
- upstream 配置的Pipeline或项目,其触发单独的Pipeline或项目作为其执行的一部分。
- workspaceNoede文件系统上的一次性目录, 可以由Pipeline或项目完成工作。在 Build或 Pipeline运行完成后,工作区通常会保留原样,除非在Jenkins Master上已经设置了特定的Workspace清理策略。
jenkins配置maven环境
1.到官网去下载maven的源码包
apache-maven-3.6.0-bin.zip下载2.源码编译安装maven
[root@localhost ~]# wget http://101.44.1.124/files/6105000007791492/mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.zip
[root@localhost ~]# tar -zxf apache-maven-3.6.0-bin.tar.gz
[root@localhost ~]# mv apache-maven-3.6.0 /usr/local/maven
[root@localhost ~]# vi /etc/profile
export M2_HOME=/usr/local/maven
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
[root@localhost ~]# source /etc/profile
如果检查配置文件没错,多执行几次以上命令,将配置文件导入系统变量
[root@localhost ~]# mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_202-ea, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
3.jenkins设置maven安装路径
系统管理—>全局工具配置---->maven选项配置
设置第一项Maven Configuration:
找到maven选项,配置maven路径
4.maven全局配置
系统管理—系统设置—找到maven设置变量
5.jenkins安装maven插件
a.如果创建新的任务,却没有构建一个maven项目的选项那就是缺少插件
b.系统管理—>插件管理---->avaliable选项—>查找Maven插件
一般配置(general)
GitHub 项目
配置响应的url和需要显示的名称
构建时锁住文件
This build requires lockable resources
节流构建
Throttle builds:通过设置时间段内允许并发的次数来实现构建的控制
丢弃旧的构建
设置构建历史的保存策略
参数化构建过程
可以配置不通的参数,便于在构建时引用这些参数
关闭构建项目
Disable this project
必要时进行并发构建
Execute concurrent builds if necessary:
限制项目运行的节点服务器
Restrict where this project can be run
触发器(Build Triggers)
其他工程构建后触发
Build after other projects are built
可以输入多个依赖的jobs,多个job中间用逗号隔开
- Trigger only if build is stable:只有在构建稳定时才触发
- Trigger even if the build is unstable:即使构建不稳定,也要触发
- Trigger even if the build fails:即使构建失败,也要触发
如果项目不存在该选项,可能是下面未设置:
触发远程构建
Trigger builds remotely
测试实验:
远程构建的触发url格式如下:
http://{IP}:{端口号}/jenkins/buildByToken/build?job={Job名称}&token={Token} http://192.168.126.129:8080/jenkins/buildByToken/build?job=first&token=TOKEN_NAME
点击保存任务,打开另外的浏览器访问触发的url会触发任务的构建
查看控制台输出结果:
配置gitlab的whook触发条件,配置前需要安装一下插件:
切换到gitlab界面去配置whook触发:结合另外一项配置
当远程仓库提交时构建
Build when a change is pushed to GitLab. GitLab CI Service URL: XXXXX - Enabled GitLab triggers :启用GitLab触发器
- Push Events:push 事件
- Opened Merge Request Events:打开合并请求事件
- Accepted Merge Request Events :接受合并请求事件
- Closed Merge Request Events :关闭合并请求事件
- Rebuild open Merge Requests :重建开放合并请求
- Comments :评论
- Comment for triggering a build:注释触发构建
gitlab找到需要构建的项目配置wehook选项:
点击test hook进行gitlab的web hook触发条件
代表url条件已经触发
查看jenkins的任务构建
定时构建
build periodically
例如:H/30 * * * * 没半个小时构建一次
第一颗表示分钟,取值0~59
第二颗表示小时,取值0~23
第三颗表示一个月的第几天,取值1~31
第四颗表示第几月,取值1~12
第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
github钩子触发gitscm轮询
GitHub hook trigger for GITScm pollingpoll scm
轮询scm:定时检查源码变更,如果有更新就checkout最新代码下来,然后执行构建动作。
时间表:方框里面需要填写的
Ignore post-commit hooks(可选项):忽略post-commit钩子
构建环境
构建开始前删除工作区
Delete workspace before build starts:
使用秘密文本或者文件
Use secret text(s) or file(s)
构建启动前,通过ssh发送文件或者执行命令
Send files or execute commands over SSH before the build starts:
构建启动之后,通过ssh发送文件或者命令
Send files or execute commands over SSH after the build runs
构建卡住终止任务
Abort the build if it’s stuck
向控制台输出添加时间戳
Add timestamps to the Console Output
jenkins配置连接远程服务器
1.安装插件
我这里已经安装
2.配置远程ssh环境
系统管理---->系统设置—>Publish over SSH
点击add添加ssh服务器,进行配置如下:
点击test configuration测试配置的ssh 远程连接是否成功,成功会显示success!
构建maven项目部署远程服务器
1.创建maven项目
我这里之前已经创建过该项目
2.配置maven项目
branch specifter */matser是远程仓库项目的分支
测试:
[root@work tmp]# pwd
/tmp
[root@work tmp]# ls
hello
[root@work tmp]# cd hello/
[root@work hello]# ls
pk-1.0-SNAPSHOT.war
jenkins部署war包到tomcat服务器
1.创建maven项目
2.安装以下插件:否则在构建后后操作无法找到部署war包的选项
3.配置tomcat使用管理员权限(用户和密码)登陆部署war包。
具体配置方法可以参考文章
4.选择构建后操作—添加构建步骤—选择部署war包到容器
5.点击保存开始构建
控制台输出相关信息:
浏览器进行访问:
jenkins忘记 管理员密码
[root@localhost jenkins]# pwd
/var/lib/jenkins
###编辑文件config.xml,删除以下代码:
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
###重新启动jenkins服务
[root@localhost jenkins]# systemctl restart jenkins.service
浏览器重新访问jenkins页面:
在系统管理选择全局安全配置
选择启用安全和jenkins专用用户数据库,点击保存
在系统管理里面含有管理用户:
往下拉看到密码,然后修改密码即可,保存
点击右上角登录重新登录用户
再次安装jenkins时遇见的报错
AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://jenkins.io/redirect/troubleshooting/java.awt.headless
java.lang.UnsatisfiedLinkError: /usr/local/java/jre/lib/amd64/libawt_xawt.so: libXext.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
............................................................
报错原因是libXext.so.6找不见插件,解决办法如下:
[root@localhost ~]# yum list available | grep libXext
libXext.i686 1.3.3-3.el7 base
libXext.x86_64 1.3.3-3.el7 base
libXext-devel.i686 1.3.3-3.el7 base
libXext-devel.x86_64 1.3.3-3.el7 base
[root@localhost ~]# yum install -y libXext.x86_64 libXext-devel.x86_64
重新刷新页面接着遇见如下几个报错,解决办法同上:
java.lang.UnsatisfiedLinkError: /usr/local/java/jre/lib/amd64/libawt_xawt.so: libXrender.so.6: cannot open shared object file: No such file or directory
java.lang.UnsatisfiedLinkError: /usr/local/java/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
安装插件过程中出现一个错误: No such plugin: cloudbees-folder
解决办法如下:
下载需要的插件:jenkisn缺失的插件 将插件放在jenkins的WEB-INF/detached-plugins/目录下,重启tomcat
cp cloudbees-folder.hpi /usr/local/tomcat/webapps/jenkins/WEB-INF/detached-plugins/