Jenkins入门

Posted 丶落幕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins入门相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

什么是敏捷开发:

  1. 迭代开发
    将开发过程拆分成多个小周期,即一次大开发变成多次小开发
  2. 增量开发
    软件的每个版本,都会新增一个用户可以感知的完整功能,也就是说,按照新增功能来划分迭代

敏捷来发有什么好处:

  1. 早期交付
  2. 降低风险

持续集成的组成要素:

  1. 一个自动构建的过程,从检出代码,编译构成,运行测试,结果记录,测试统计等都是自动完成的,无需人工干预
  2. 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用svn或者git
  3. 一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器

持续集成的好处:

  1. 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少
  2. 对系统健康持续检查,减少发布风险带来的问题
  3. 减少重复性工作
  4. 持续部署,提供可部署单元包
  5. 持续交付可供使用的版本
  6. 增强团队信心

使用步骤

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
在这里插入图片描述
在这里插入图片描述

  1. 创建一些user
    Manage Jenkins–>Manage Users–>新建用户
  2. 创建一些角色
    Manage Jenkins–>Manage and Assign Roles–>Manage Roles
    在这里插入图片描述
  3. 分配一些权限
    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简介:

  1. pipeline脚本是由Groovy语言实现的,但是我们没必要单独去学习Groovy
  2. pipeline支持两种语法:Declarative(声明式)和Scripted Pipeline(脚本式)语法
  3. 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种构建触发器

  1. 触发远程构建(类似springcloud-config,同步配置到本地,需要一个请求一个url)
  2. Build after other projects are built(其他工程构建后触发)
  3. Build periodically(定时构建)
  4. 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入门的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins持续集成入门到精通(进阶篇)

Jenkins入门

简明Jenkins入门教程

[jenkins工具]之一:持续集成和jenkins入门介绍

Jenkins入门配置

jenkins入门教程