jenkins 介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作。

作用

  1. 持续、自动地构建/测试软件项目
  2. 监控一些定时执行的任务

特点

  1. 开源免费;
  2. 跨平台,支持所有的平台;
  3. master/slave支持分布式的build;
  4. web形式的可视化的管理页面;
  5. 安装配置超级简单;
  6. tips及时快速的帮助;
  7. 已有的200多个插件

jenkins安装

注意:安装jenkins时需要连接网络

jenkins官网:https://jenkins.io

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界面操作

  1. 查询root用户登陆密码,复制密码粘贴到框框,点击右下角的下一步:
[root@localhost Desktop]# cat /var/lib/jenkins/secrets/initialAdminPassword 
73f2e652c2604a5ea43325416c02654c

浏览器输入ip:8080访问

jenkins withCredentials 高级用法 jenkins使用方法_maven


2. 选择第一个install suggested plugins

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_02


3. 连接网络在线安装

jenkins withCredentials 高级用法 jenkins使用方法_java_03


4. 创建第一个管理员用户

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_04

如果不创建选择save and continue旁边的cintinue as admin继续

5. 直接点击save and finsh

jenkins withCredentials 高级用法 jenkins使用方法_maven_05


6. 点击start using jenkins

jenkins withCredentials 高级用法 jenkins使用方法_java_06


7. 输入刚才创建的管理员用户以及密码

jenkins withCredentials 高级用法 jenkins使用方法_java_07


8. 登录页面

jenkins withCredentials 高级用法 jenkins使用方法_maven_08

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的源码包

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_09


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选项配置

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_10


设置第一项Maven Configuration:

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_11


找到maven选项,配置maven路径

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_12


4.maven全局配置

系统管理—系统设置—找到maven设置变量

jenkins withCredentials 高级用法 jenkins使用方法_java_13


5.jenkins安装maven插件

a.如果创建新的任务,却没有构建一个maven项目的选项那就是缺少插件

b.系统管理—>插件管理---->avaliable选项—>查找Maven插件

jenkins withCredentials 高级用法 jenkins使用方法_maven_14

一般配置(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中间用逗号隔开

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_15

  • 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选项:

jenkins withCredentials 高级用法 jenkins使用方法_java_16


jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_17


jenkins withCredentials 高级用法 jenkins使用方法_java_18


点击test hook进行gitlab的web hook触发条件

jenkins withCredentials 高级用法 jenkins使用方法_java_19


代表url条件已经触发

jenkins withCredentials 高级用法 jenkins使用方法_java_20


查看jenkins的任务构建

jenkins withCredentials 高级用法 jenkins使用方法_maven_21


定时构建

build periodically

例如:H/30 * * * * 没半个小时构建一次

第一颗表示分钟,取值0~59
第二颗
表示小时,取值0~23

第三颗表示一个月的第几天,取值1~31
第四颗
表示第几月,取值1~12

第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_22


github钩子触发gitscm轮询

GitHub hook trigger for GITScm pollingpoll scm

轮询scm:定时检查源码变更,如果有更新就checkout最新代码下来,然后执行构建动作。

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_23


时间表:方框里面需要填写的

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.安装插件

我这里已经安装

jenkins withCredentials 高级用法 jenkins使用方法_maven_24


2.配置远程ssh环境

系统管理---->系统设置—>Publish over SSH

免密钥登陆配置参考

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_25


点击add添加ssh服务器,进行配置如下:

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_26


点击test configuration测试配置的ssh 远程连接是否成功,成功会显示success!

构建maven项目部署远程服务器

1.创建maven项目

我这里之前已经创建过该项目

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_27


2.配置maven项目

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_28


branch specifter */matser是远程仓库项目的分支

jenkins withCredentials 高级用法 jenkins使用方法_maven_29


jenkins withCredentials 高级用法 jenkins使用方法_java_30


测试:

jenkins withCredentials 高级用法 jenkins使用方法_maven_31

[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包的选项

jenkins withCredentials 高级用法 jenkins使用方法_java_32


3.配置tomcat使用管理员权限(用户和密码)登陆部署war包。

具体配置方法可以参考文章

4.选择构建后操作—添加构建步骤—选择部署war包到容器

jenkins withCredentials 高级用法 jenkins使用方法_java_33


jenkins withCredentials 高级用法 jenkins使用方法_maven_34


5.点击保存开始构建

控制台输出相关信息:

jenkins withCredentials 高级用法 jenkins使用方法_maven_35


浏览器进行访问:

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_36

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 withCredentials 高级用法 jenkins使用方法_Jenkins_37


选择启用安全和jenkins专用用户数据库,点击保存

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_38


在系统管理里面含有管理用户:

jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_39


往下拉看到密码,然后修改密码即可,保存

jenkins withCredentials 高级用法 jenkins使用方法_java_40


点击右上角登录重新登录用户

jenkins withCredentials 高级用法 jenkins使用方法_java_41


jenkins withCredentials 高级用法 jenkins使用方法_Jenkins_42

再次安装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/