Jenkins 介绍与使用
CICD的核心组件
介绍
C/S : Client - Server 客户端 服务器B/S: Browser - Server
Server AppCS : 安装一个专门的客户端工具,才能访问APPBS : 只需要有 标准的 浏览器软件 就能访问
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
jenkins的作用和它的图标表现出来的一样,就是为了做工作的时候,能够比较轻松,像一个绅士一样游刃有余。
Jenkins特性
开源的java语言开发的持续集成工具,支持CI,CD;易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;分布式构建:支持Jenkins能够让多台计算机一起构建/测试;文件识别::Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
Jenkins 和 Hudson
都是目前最流行的一款持续集成及自动化部署工具。Jenkins 和 Hundson 之间的关系:2009 年,甲骨文收购了 Sun 并继承了 Hudson 代 码库。在 2011 年年初,甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的 项目:Jenkins:由大部分原始开发人员组成 Hudson:由甲骨文公司继续管理
所以 Jenkins 和 Hudson 是两款非常相似的产品。Jenkins 可以整合 GitHub 或 Subversion Husband 也可以整合 GitHub 或 Subversion 二者既然是同源的工具软件,操作和指导思想就是接近的
JavaEE项目部署方式对比
手动部署:
自动化部署:
“自动化”的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户 或测试人员使用的马上就是最新的应用程序。
搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。对于程序员的日常开发来说不会造成任何额外负担——自己把代码提交上去之后,服务器上运行的马上就是最新版本——一切都发生在无形中
网站
插件下载地址:https://plugins.jenkins.io/中文社区文档: https://www.jenkins.io/zh/doc/中文下载站: https://www.jenkins.io/zh/download/
实验环境
主机名 | IP | 备注 |
---|---|---|
Jenkins | 192.168.245.187 | |
gitlab | 192.168.245.186 | gitlab |
test | 192.168.245.185 | git、nginx |
部署
下载安装
需要jdk的依赖(下载rpm包安装),可以选择去阿里源下载Jenkins的rpm包,官网选择lts版本(稳定版),2.289版本
rpm包内部会有一个tomcat的服务器不用另外安装,但是官网的war包需要
https://mirrors.aliyun.com/jenkins/redhat/
[root@Jenkins ~]# cd /opt/
[root@Jenkins opt]# yum -y install wget
[root@Jenkins opt]# wget https://mirrors.aliyun.com/jenkins/redhat-stable/jenkins-2.289.3-1.1.noarch.rpm
[root@jenkins opt]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
[root@jenkins opt]# yum install -y jenkins-2.332.3-1.1.noarch.rpm
[root@Jenkins opt]# yum -y install jenkins-2.289.3-1.1.noarch.rpm
注:安装的版本不同,需要的jdk也不同
yum -y install jenkins-2.332-1.1.noarch.rpm,要求jdk11
yum -y install jenkins-2.332.3-1.1.noarch.rpm,jdk8即可
安装 jdk
方法1:
[root@jenkins ~]# tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/java
[root@Jenkins opt]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_191
export CLASSPATH=:.$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@Jenkins opt]# source !$
source /etc/profile
[root@Jenkins opt]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@jenkins opt]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
出现此错,原因是找不到jdk启动
[root@jenkins jenkins]# vim /etc/init.d/jenkins
99 candidates="
100 /etc/alternatives/java
101 /usr/lib/jvm/java-1.8.0/bin/java
102 /usr/lib/jvm/jre-1.8.0/bin/java
103 /usr/lib/jvm/java-11.0/bin/java
104 /usr/lib/jvm/jre-11.0/bin/java
105 /usr/lib/jvm/java-11-openjdk-amd64
106 /usr/bin/java
解决方案:
方法1:
[root@jenkins java]# ln -s /usr/java/jdk1.8.0_191/bin/java /usr/bin/java
方法2:
或修改启动脚本的查找jdk的目录
[root@jenkins jenkins]# systemctl start jenkins
[root@jenkins jenkins]# systemctl status jenkins
方法2:
安装openjdk
安装epel源
[root@jenkins opt]# yum install java
[root@jenkins ~]# yum list |grep openjdk
java-1.8.0-openjdk.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk.x86_64 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-accessibility.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-accessibility.x86_64 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-demo.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-demo.x86_64 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-devel.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-headless.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-javadoc.noarch 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-javadoc-zip.noarch 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-src.i686 1:1.8.0.345.b01-1.el7_9 updates
java-1.8.0-openjdk-src.x86_64 1:1.8.0.345.b01-1.el7_9 updates
。。。。
启动
[root@Jenkins opt]# systemctl start jenkins.service
[root@Jenkins opt]# systemctl status jenkins.service
[root@Jenkins opt]# systemctl enable jenkins.service
配置
目录结构
[root@jenkins init.d]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins启动与停止脚本
/etc/logrotate.d/jenkins #jenkins日志切割配置文件
/etc/sysconfig/jenkins #jenkins配置文件
/usr/bin/jenkins
/usr/lib/systemd/system/jenkins.service
/usr/sbin/rcjenkins #jenkins启动与停止脚本(软链接)
/usr/share/java/jenkins.war #jenkins的程序文件(升级时替换这个文件即可)
/usr/share/jenkins
/usr/share/jenkins/migrate
/var/cache/jenkins #jenkins缓存目录
/var/lib/jenkins #jenkins主要目录
/var/log/jenkins #jenkins日志相关
# 存放插件的目录
[root@Jenkins opt]# cd /var/lib/jenkins/plugins/ # 如果是直接把以前的插件解压进来需要注意权限
[root@Jenkins plugins]# ls
[root@Jenkins updates]# ll /var/lib/jenkins/
# 浏览器输入IP地址:8080,如下图,按提示操作
[root@Jenkins plugins]# cat /var/lib/jenkins/secrets/initialAdminPassword # 生产上不要给其他人知道
ed91869da4284d079286c50b48233743
1.选择安装推荐插件安装
2.自定义插件安装
可以选择“无”,不安装插件,跳过安装插件过程
跳过创建新用户,如下图所示
对比初始化时两种插件安装方法的不同
第一方法:
第二种方法:
3.替换源
[root@Jenkins plugins]# cd /var/lib/jenkins/updates
[root@Jenkins updates]# ls
default.json hudson.tasks.Maven.MavenInstaller
[root@Jenkins updates]# cp default.json default.json.bak
# 修改成清华源和百度源
[root@Jenkins updates]# sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
# 验证是否修改成功
[root@Jenkins updates]# cat default.json | grep "tuna"
# plugin manager --> 高级 --> 升级站点
# 填写清华源的链接https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
4.重启
方法1:
[root@Jenkins updates]# systemctl restart jenkins.service
[root@Jenkins updates]# systemctl status jenkins.service
# 重新登陆Jenkins即可,使用前面创建的用户进去
方法2:
在地址上加上/restart
5.后期安装插件
Jenkins插件安装方式 | |
---|---|
Web页面,选择与安装(联网) | 一个一个找选择,安装重启jenkins |
自己下载插件,重启jenkins替你安装(hpi) | 一个一个安装,未来批量安装需要脚本,修改所有者 |
导入插件(手动批量) | 去一个机器上面把已经下载安装的插件目录打包,新机器解压,修改所有者 |
安装中文汉化包为例
[root@jenkins plugins]# mv localization-zh-cn* /opt
[root@jenkins plugins]# file workflow-step-api.jpi
workflow-step-api.jpi: Zip archive data, at least v1.0 to extract
#清华源下载插件安装包
[root@jenkins plugins]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/localization-zh-cn/1.0.24/localization-zh-cn.hpi --no-check-certificate
[root@jenkins plugins]# ll |grep localization-zh-cn
-rw-r--r-- 1 root root 551108 11月 16 2020 localization-zh-cn.hpi
#重启jenkins
[root@jenkins plugins]# systemctl restart jenkins
[root@jenkins plugins]# ll |grep localization-zh-cn
drwxr-xr-x 5 jenkins jenkins 70 10月 27 14:44 localization-zh-cn
-rw-r--r-- 1 root root 551108 11月 16 2020 localization-zh-cn.hpi
#对比jenkins下载与自已手动下载的插件安装包,md5码是一样的
[root@jenkins plugins]# md5sum localization-zh-cn.hpi
0f3e5cf389a983b5c424095a7c249336 localization-zh-cn.hpi
[root@jenkins plugins]# md5sum /opt/localization-zh-cn.jpi
0f3e5cf389a983b5c424095a7c249336 /opt/localization-zh-cn.jpi
注:jpi格式是jenkins web页面下载的
hpi格式是官网或各种源里下载的
出现这种错:是因为插件解压包的属组不是jenkins
[root@jenkins plugins]# ll |grep localization-zh-cn
drwxr-xr-x 5 root root 51 10月 27 14:56 localization-zh-cn
-rw-r--r-- 1 root root 551108 11月 16 2020 localization-zh-cn.hpi
6.插件包找不到时安装情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sszc4oat-1673707310061)(https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202205032319188.png#crop=0&crop=0&crop=1&crop=1&id=C00wA&originHeight=631&originWidth=1344&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]
把gitlabhook.tar.gz上传到/var/lib/jenkins/plugins并解压
[root@Jenkins plugins]# pwd
/var/lib/jenkins/plugins
[root@Jenkins plugins]# tar xf gitlabhook.tar.gz
[root@Jenkins plugins]# systemctl restart jenkins.service # 重启
# 去web页面会找到Gitlab Hook Plugin插件已安装
忘记密码
方法一:取消密码
# 进入Jenkins主目录,备份config.xml
cp config.xml config.xml.bak
# 修改config.xml文件
# 找到关键词 useSecurity ,把后面的值 true 改为false
# 重启 Jenkins
systemctl restart jenkins
# 可以无账号和密码登录Jenkins
方法二:重置密码
# 修改 JENKINS_HOME/users/usernamedir 目录下的config.xml 文件
# 注:usernamedir 就是你忘记密码对应的用户文件夹
# 如果是java -jar方式启动的,HOME目录位于/root/.jenkins
# 修改config.xml,找到 passwordHash部分,替换原有的hash值
把
#jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS
修改为
#jbcrypt:$2a$10$4NW.9hNVyltZlHzrNOOjlOgfGrGUkZEpBfhkaUrb7ODQKBVmKRcmK
后者是123456的hash值
# 重启Jenkins
systemctl restart jenkins
# 用最新的密码 123456 登录
# 搞定
# 进去Jenkins修改复杂密码,要立马改,防止出现意外
[root@Jenkins workspace]# cd /var/lib/jenkins/users/
[root@Jenkins users]# ls
shy514_6070644599902000063 users.xml
[root@Jenkins users]# cd shy514_6070644599902000063/
[root@Jenkins shy514_6070644599902000063]# ls
config.xml
[root@Jenkins shy514_6070644599902000063]# cp config.xml config.xml.bak
[root@Jenkins shy514_6070644599902000063]# vim config.xml
[root@Jenkins shy514_6070644599902000063]# systemctl restart jenkins.service
新建item
测试item
第一个项目:输出shell脚本
1.日志保留策略
参数化构建
如果没有This project is parameterized ,需要安装插件Git Parameter
选择“选项参数(choice parameter)”
第二个项目:jenkins实现gitlab集成
1.代码准备
2.安装插件
插件名称 | 插件作用 |
---|---|
Credentials Plugin | 允许在jenkins中存储认证的凭据 |
Git Client Plugin | 允许jenkins使用Git |
Git Plugin | 允许jenkins集成Git |
Gitlab Plugin | 允许Gitlabi触发jenkins构建并在Gitlab中显示 |
GitLab Hook | 允许gitlab自动触发jenkins构建项目 |
Gitlab Authentication plugin | gitlab身份验证插件 |
配置item
[root@Jenkins plugins]# yum -y install git
凭证管理
Manage Jenkins --> Manage Credentials
完善item
测试构建
[root@Jenkins plugins]# cd /var/lib/jenkins/workspace/test
[root@Jenkins test]# ls
404.html content-widgets.html fonts index.html media QHME.iml
alerts.html css form-components.html js media.html readme.md
assets deviceManager.html form-elements.html keyInfo.html messages.html real-time.html
buttons.html dianfei.html form-examples.html labels.html mstp_105_SuperAdmin.iml sa.html
calendar.html efficiencyAnalysis.html form-validation.html LICENSE mstp_map.html tables.html
charts.html energy_consumption.html images-icons.html list-view.html other-components.html typography.html
components.html file-manager.html img login.html profile-page.html userMng.html
# 修改默认所有者和所属组
# 不建议,所以在后面的shell命令脚本可以使用sudo提权
[root@Jenkins test]# vim /etc/sysconfig/jenkins
改: 29 JENKINS_USER="jenkins"
为: 29 JENKINS_USER="root"
[root@jenkins jenkins]# vim /usr/lib/systemd/system/jenkins.service
改:User=jenkins
改:Group=jenkins
为:User=root
为:Group=root
[root@Jenkins test]# systemctl restart jenkins.service
第三个项目:免密拉取
jenkins与gitlab秘钥验证;
1、bash:jenkins生成公钥对;公钥与私钥
2、web:gitlab上操作 (jenkins:将公钥推送到gitlab服务器对应的用户);(用户必须得对项目有拉取权限;)
3、web:jenkins上操作 告诉jenkins私钥是什么,这样才可以解密;Credentials
在gitlab上进行对Jenkins的ssh免密
[root@Jenkins test]# ssh-keygen -t RSA -N '' -f ~/.ssh/id_rsa
[root@Jenkins test]# ssh-copy-id 192.168.245.185
[root@Jenkins workspace]# cat ~/.ssh/id_rsa.pub
# 把公钥复制粘贴到gitlab上
# 再复制项目的ssh链接
修改item
[root@Jenkins workspace]# cat ~/.ssh/id_rsa
# 复制私钥进去
保存好重新构建验证
部署item
# 在test机子上操作
[root@test ~]# cd /opt/
[root@test opt]# mkdir /opt/jenkins
[root@test opt]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /opt/jenkins;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@test opt]# nginx -s reload
# 在Jenkins上操作
# 提权
[root@Jenkins test]# visudo
加: jenkins ALL=(ALL) ALL
[root@Jenkins test]# visudo -c
/etc/sudoers:解析正确
修改构建中shell命令
build now --> 浏览器查看nginx页面,成功如下图
至此自动化部署的雏形已经形成
参数化构建
在gitlab上找到项目创建分支
修改test item的配置
如果没有Git Parameter,需要安装插件
切换分支测试
在gitlab上切换到test分支上,创建一个测试文件
开始构建
修改一下shell命令
# 验证
# 在test机子上
[root@test jenkins]# ls # 发现1.html已经拉取下来
1.html content-widgets.html form-components.html keyInfo.html mstp_105_SuperAdmin.iml tables.html
404.html css form-elements.html labels.html mstp_map.html typography.html
alerts.html deviceManager.html form-examples.html LICENSE other-components.html userMng.html
assets dianfei.html form-validation.html list-view.html profile-page.html
buttons.html efficiencyAnalysis.html images-icons.html login.html QHME.iml
calendar.html energy_consumption.html img media readme.md
charts.html file-manager.html index.html media.html real-time.html
components.html fonts js messages.html sa.html
版本回滚
并不是覆盖,而是回滚到指定版本号,选择好后直接构建即可(按照当时回滚版本的分支),恢复的话就把分支改回参数引用;第二种方法是打tag,这里使用第一种比打tag方便
视图
方便用去区分项目以及调整
用户权限管理
安装插件
安装这个插件Role-based Authorization Strategy
在没有安装这个插件的时候,新创建用户是和管理员一样的权限,这是不允许的
启用插件
在管理中启用插件
全局权限
新建一个base权限,只读;首先创建基础的全局权限,普通用户只需要读就可以
项目权限
下图只是模拟增加,普通用户是不允许删除修改的
分别为test和dev创建项目权限
创建项目权限,注意可以去掉普通用户的创建配置以及删除权限
**项目权限需要匹配相关项目,可以写项目名字,也可以直接用正则,比如-test结尾,可以写成.-test;写完可以点击看能否匹配
最后点击save
创建用户
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6IjclVp-1673707310080)(https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202205041191375.png#crop=0&crop=0&crop=1&crop=1&id=zAkfu&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)]
分配权限
验证
# 登陆到不同的账户只能看到权限所给予的和所能操作的
# 选择不同的分支进行构建
# 再回去服务器上查看会发现构建的项目或者分支不同,文件内容也不同
构建触发器
gitlab网络设置
Jenkins设置
gitlab的webhooks设置
注:gitlab有webhooks与systemhook两种,systemhook只是用来触发通知
测试推送
# 此时只要gitlab上对应的项目进行了更改并且提交,Jenkins就会自动触发构建
更多推荐
所有评论(0)