Jenkins入门
Posted 丶落幕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins入门相关的知识,希望对你有一定的参考价值。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Jenkins入门
前言
什么是敏捷开发:
- 迭代开发
将开发过程拆分成多个小周期,即一次大开发变成多次小开发 - 增量开发
软件的每个版本,都会新增一个用户可以感知的完整功能,也就是说,按照新增功能来划分迭代
敏捷来发有什么好处:
- 早期交付
- 降低风险
持续集成的组成要素:
- 一个自动构建的过程,从检出代码,编译构成,运行测试,结果记录,测试统计等都是自动完成的,无需人工干预
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用svn或者git
- 一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器
持续集成的好处:
- 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少
- 对系统健康持续检查,减少发布风险带来的问题
- 减少重复性工作
- 持续部署,提供可部署单元包
- 持续交付可供使用的版本
- 增强团队信心
使用步骤
1.下载Jenkins
先安装jdk,Jenkins依赖jdk(示例):
yum install java-1.8.0-openjdk* -y
#查看java版本
java -version
Jenkins: 官网下载地址
这里用的centos(docker试了,很多坑,知识太少,填不上):
#官网拿来的(网不好经常timeout)
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
#修改Jenkins配置文件,改变端口(免得和tomcat端口冲突,改变user,是因为maven需要root角色,否则repo不能写入)
vim /etc/sysconfig/jenkins
#修改文件
JENKINS_USER="root"
JENKINS_PORT="8888"
#启动服务
systemctl start jenkins
#开放端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
#重新加载
firewall-cmd --reload
#浏览器访问8888端口,按照提示找到管理员密码
cat /var/lib/jenkins/secrets/initialAdminPassword
#选择不安装插件,后面修改国内安装地址再来安装
选择插件安装-->无-->安装
创建一个管理员
实例配置直接下一步
#先刷新出可用配置(等浏览器头上圈圈转完)
Manage Jenkins-->Manage Plugins-->Available-->Check now
#修改插件下载地址
cd /var/lib/jenkins/updates/
#别问为什么,视频上看的
sed -i 's#http:\\/\\/updates.jekins-ci.org\\/download#https:\\/\\/mirrors.tuna.tsinghua.edu.cn\\/jenkins#g' default.json && sed -i '#/http:\\/\\/www.google.com#https:\\/\\/www.baidu.com#g' default.json
##会到页面切换到Advanced选项修改Update Site
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#通过浏览器地址栏重启Jenkins
192.168.59.129:8888/restart
中文插件安装(插件很容易安装失败,接着装就好了):
Manage Jenkins–>Manage Plugins–>Available–>search
搜索Chinese–>install
2.角色-权限插件安装:
搜索role-based–>install
- 创建一些user
Manage Jenkins–>Manage Users–>新建用户 - 创建一些角色
Manage Jenkins–>Manage and Assign Roles–>Manage Roles
- 分配一些权限
Manage Jenkins–>Manage and Assign Roles–>Assign Roles
Pattern代表能访问那个项目,通配符前面.是固定写法
新建item test01 和 demo01 ,然后就可以切换账号试试了
3.Git创建仓库,idea创建项目push到gitee
push的是一个webapp项目:
Git不是重点,就不上代码了
4.Jenkins凭证管理查件
Linux上安装git:
yum install git -y
#查看git版本
git --version
Jenkins安装插件:
搜索Credentials Binding–>install
搜索Git–>install
如果Manage Jenkins页面报红的话restart一下
创建凭证
这里就创建好了账号密码凭证和私钥凭证
新建item-->源码管理-->Git-->填入Git的地址(账号密码就是http,私钥就是ssh)
保存-->build now
5.Linux上安装maven(官网下载):
代码如下(示例):
#解压
tar -zxf apache-maven-3.8.1-bin.tar.gz
#移动
mv apache-maven-3.8.1 /opt/
#创建repo文件夹
mkdir -p /root/repo
#修改配置文件,指定repository并使用aliyun镜像
vim /opt/apache-maven-3.8.1/conf/settings.xml
配置maven环境变量:
#修改配置文件
vim /etc/profile
#在文件最底部插入
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/apache-maven-3.8.1
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#重新载入配置文件
source /etc/profile
Jenkins全局工具配置:
Manage Jenkins–>Global Tool Configuration–>新增jdk and 新增maven–>去掉勾选install,Linux上已经装好了
配置Jenkins环境变量:
Manage Jenkins–>Configure System–>全局属性–>Environment variables–>勾选–>新增
点击项目-->配置-->构建-->增加构建步骤-->Execute shell
build now
cd /var/lib/jenkins/workspace/
进入刚刚部署的项目,在target里面看到打好的war包证明成功了
6.Linux上安装tomcat(官网下载):
代码如下(示例):
#解压
tar -zxf apache-tomcat-8.5.66.tar.gz
#移动
mv apache-tomcat-8.5.66 /opt/
#配置tomcat角色和权限,进到配置文件目录
cd /opt/apache-tomcat-8.5.66/conf/
#编辑配置文件
vim tomcat-users.xml
#修改节点
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>
#修改配置,让tomcat支持远程访问,默认是不支持的
vim /opt/apache-tomcat-8.5.66/webapps/manager/META-INF/context.xml
#注释掉这一段
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\\.\\d+\\.\\d+\\.\\d+|::1|0:0:0:0:0:0:0:1" />
-->
#进到目录
cd /opt/apache-tomcat-8.5.66/bin/
#启动tomcat
./startup.sh
#开端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
#重新载入
firewall-cmd --reload
点击输入账号密码登入tomcat-tomcat
7.持续集成(freestyle类型)
代码如下(示例):
搜索插件Deploy to container–>install
点击项目–>配置–>构建后操作–>增加构建后操作步骤–>Deploy war/ear to a container
build now
修改了项目,只需要push到远程仓库,然后Jenkins重新build now就能实现持续集成了
8.Jenkins构建maven类型项目(之前构建的都是自由风格项目)
代码如下(示例):
搜索插件Maven Integration–>install
新建item–>构建一个maven项目
9.Jenkins构建pipeline类型项目(重点掌握)
pipeline简介:
- pipeline脚本是由Groovy语言实现的,但是我们没必要单独去学习Groovy
- pipeline支持两种语法:Declarative(声明式)和Scripted Pipeline(脚本式)语法
- pipeline也有两种创建方法:可以直接在Jenkins的web ui界面中输入脚本
也可以通过创建一个Jenkinsfile脚本文件放入项目源码库中(一般我们都推荐在Jenkins中直接从源代码控制(scm)中直接载入Jenkinsfile pipeline这种方法
项目构建:
搜索插件Pipeline–>install
新建item–>流水线
点击流水线语法,使用pipeline代码生成器
checkout: Check out from version control-->生成检出代码
sh: Shell Script-->生成shell脚本
deploy: Deploy war/ear to a container-->生成远程部署代码(安装了前面的查件才会有)
脚本存放在Jenkins-web视图是有问题的
1.不方便维护
2.当Jenkins服务器down机,容易丢失数据
所以,我们推荐把pipeline脚本写进idea项目中
10.Jenkins构建触发器
构建触发器简介:
即什么时候,什么条件下触发构建项目
Jenkins内置4种构建触发器
- 触发远程构建(类似springcloud-config,同步配置到本地,需要一个请求一个url)
- Build after other projects are built(其他工程构建后触发)
- Build periodically(定时构建)
- Poll SCM(轮询scm)
触发远程构建(示例):
请求http://192.168.59.129:8888/job/demo-pipeline/build?token=6666
token应该是一个加密的字符串
Build after other projects are built(其他工程构建后触发):
先build now前置工程,就会自动触发构建目标工程
Build periodically(定时构建)
Poll SCM(指定时间扫描scm代码是否变更,如果变更则触发构建)
语法和定时构建一样
注意:轮询scm,Jenkins会定时扫描整个项目的代码,增大系统的开销,如果项目比较大的话不介意使用
Git hook自动触发构建
利用gitlab的webhook实现代码push到仓库,立即触发项目自动构建
既gitlab代码发生变动,由gitlab发送构建请求给Jenkins
搜索插件gitlab hook–>install
搜索插件gitlab—>install
因为没有下载gitlab,跳过了
Jenkins参数化构建
当单机build时,就会弹出输入框
Jenkinsfile中就可以直接使用类似el表达式取到参数的值
就能达到通过参数构建不同分支的效果
11.配置邮箱服务器,发送构建结果
代码如下(示例):
搜索插件Email Extension Template–>install
Manage Jenkins–>Configure System
Jenkins配置
扩展插件配置
Jenkins自带邮箱通知配置
测试邮件发送
email邮件模板(百度一下就能找到很多)
大写字母的基本都是Jenkins的全局变量
全局变量在Configure System–>Content Token Reference(点右边的问号)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT_NAME}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)<br/></td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td> <hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建情况总览:</font></b>${TEST_COUNTS,var="fail"}<br/>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG,maxLines=23}</textarea>
</td>
</tr>
</table>
</body>
</html>
将它放置到项目根目录
在片段生成器–>emailext: Extended Email也可以生成post里面的代码
always代表不论成功还是失败都会发送邮件
12.Jenkins+SonarQube(代码审查)
sonarqube服务安装(示例):
SonarQube不是一个插件,而是一个服务,独立的服务
SonarQube依赖于mysql,所以还要下载mysql
mysql不是重点,直接用docker启动mysql,创建sonar数据库
链接: 下载sonarqube
我又回来了,sonarqube7.9以后停止对mysql的支持o(╥﹏╥)o
#因为是zip包,先下unzip
yum install unzip
#解压
unzip sonarqube-6.7.7.zip
#移动
mv sonarqube-6.7.7 /opt/
#sonarqube用root账户启动会报错,所以我们创建一个普通用来启动sonarqube
useradd sonar
#将sonarqube-6.7.7的所有者改为普通用户sonar
chown -R sonar. /opt/sonarqube-6.7.7/
#进入sonarqube配置文件所在目录
cd /opt/sonarqube-6.7.7/conf/
#修改配置文件
vim sonar.properties
如果有需要可以更改sonar端口
#用sonar用户身份启动服务(停止,状态,重启,就是改后面的命令)
su sonar /opt/sonarqube-6.7.7/bin/linux-x86-64/sonar.sh start
#我直接卡死了O(∩_∩)O哈哈~,扩大虚拟机内存和硬盘,我又回来了
#看视频说底层是用es进行代码检索,我就说怎么一运行就卡死了
#查看日志
tail -f /opt/sonarqube-6.7.7/logs/sonar.log
#开端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#重新加载
firewall-cmd --reload
#浏览器访问
192.168.59.129:9000
默认账户admin-admin
到此sonarqube安装就结束了
sonar-scanner插件安装(示例):
搜索插件SonarQube Scanner–>install
来到Jenkins页面: Manage Jenkins–>Global Tool Configuration(用Jenkins来安装sonar-scanner)
配置sonarqube环境
Manage Jenkins–>Configure System
新增凭证
点击项目-->配置-->构建-->新增构建步骤-->Execute SonarQube Scanner(执行sonarqube扫描)
sonarqube.properties:
# must be unique in a given SonarQube instance
sonar.projectKey=test02_freestyle
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=test02_freestyle
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\\" by "/" on
Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
build now
来到sonarqube页面,刷新,就可以看到代码审查报告了
来到idea,模拟错误代码 and 代码冗余 ,push之后Jenkins重新构建
pipeline类型项目配置sonarqube:
能看到审查报告,就说明配置成功了
总结
Jenkins配置文件所在位置:
/etc/sysconfig/jenkins
Jenkins项目托管所在位置:/var/lib/jenkins/workspace
Jenkins日志文件所在位置:/var/log/jenkins/
Jenkins插件下载地址配置文件所在位置:/var/lib/jenkins/updates/
如果提示插件需要更新,或者Jenkins需要更新,最好不要操作,弄不好就要头开启
插件安装失败导致页面报错,重装插件只要成功了,restart一下就不会报错了
文章主要内容来自B站黑马
以上是关于Jenkins入门的主要内容,如果未能解决你的问题,请参考以下文章