Jenkins持续集成

1、介绍、环境搭建

什么是Jenkins?

Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件,支持自定义工具集、多种交付通道

CI:Continuous integration,持续集成,一种软件开发实践。每次集成(源代码变更后)都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,大大减少集成问题。持续集成过程:先把代码放入git,Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端

CD:Continuous Delivery,持续交付,指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本。包括持续集成、持续测试、持续部署

持续交付管道:将源代码转换为可发布产品的多个不同的任务和作业通常串联成一个软件管道,一个自动流程成功完成后会启动管道中的下一个流程。这些管道有许多不同的叫法,如持续交付管道、部署管道、软件开发管道
自动化部署流程:
在这里插入图片描述

持续集成的优点:

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

2、部署Jenkin环境

Windows环境下安装Jenkins:

步骤一:安装JDK11+ (如果版本低,很可能插件安装不了)

步骤二:下载Jenkins包:https://www.jenkins.io/download

在这里插入图片描述

在这里插入图片描述

步骤三:双击 jenkins.mis,点击next–>next–>选择‘Run service as LocalSystem(not recommended)’–>修改端口号,点击Test Port测试端口号是否可用–>next–>选择本地JDK安装路径–>next–>nexrt—>next–>install–>finish

在这里插入图片描述
在这里插入图片描述

步骤四:访问本地Jenkins http://localhost:1010/ 进行设置密码

在这里插入图片描述

密码设置:首次登陆需要找到动态设置的初始密码,复制进管理员密码

在这里插入图片描述

步骤五:安装自定义插件,可直接安装推荐插件,也可跳过此步骤,next—>创建第一个账户,默认是admin,密码:admin

在这里插入图片描述

3、常用Jenkins插件安装

在这里插入图片描述

方法一:直接选择插件进行安装:可选插件

在这里插入图片描述

方法二:下载插件后直接手动选择安装:高级–>Deploy Plugin

在这里插入图片描述

用户权限管理插件

安装Role-based Authorization Strategy插件(此处已安装,可在可选插件中选择安装)

在这里插入图片描述

开启权限全局安全配置 Manage Jenkins —> Configure Global Security

在这里插入图片描述

授权策略切换为 Role-Based Strategy,保存

在这里插入图片描述

管理和分配角色:Manage Jenkins—>Manage and Assign Roles—>Manage Roles

在这里插入图片描述

新增用户:Manage Jenkins —>Security—>Manage Users—>新建用户

给新增的角色赋予权限:Manage Jenkins —> >Manage and Assign Roles—>Assign Roles

Jenkins凭证管理

凭证用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互

  1. 安装Credentials Binding插件

  2. 安装Git插件(可查看相关安装教程)

  3. 安装Git工具(可查看相关安装教程,此处直接使用Gitee,不需要安装)

  4. Manage Jenkins—>Manage Credentials—>全局凭据—>添加凭据–>选择密文类型(是采用账号密码登录代码托管工具,还是采用ssh用户名和私钥,或者密钥文件等)

在这里插入图片描述

类型一:采用账号密码类型:
在这里插入图片描述

​ Gitee代码托管工具

项目–>配置–>源码管理:配置代码URL

在这里插入图片描述

类型二:采用ssh密钥类型:

在这里插入图片描述

步骤一:生成公钥和私钥

$ ssh-keygen -t rsa

步骤二:把生成的公钥放在代码托管工具中(以Gitee为例),私钥复制进Manage Jenkins—>Manage Credentials—>全局凭据–>添加凭据–>ssh username with private key

在这里插入图片描述

查看公钥:

$ cat ~/.ssh/id_rsa.pub

查看私钥:

$ cat ~/.ssh/id_rsa

项目–>配置–>源码管理:配置代码URL(此处应该为Gitee上的Project的ssh地址)

  1. 进行构建项目:Build Now —>点击Build History下的当前构建—>点击 控制台 查看执行命令

在这里插入图片描述
在这里插入图片描述

Maven安装和配置(centos)

在Jenkins集成服务器上,安装Maven来编译和打包项目

步骤一:安装Maven,上传Maven软件到Jenkins服务器上

$ tar -xzf apache-maven-3.6.2-bin.tar.gz
$ mkdir -p /opt/maven
$ mv apache-maven-3.6.2/*/opt/maven

步骤二:配置环境变量

$  vi /etc/profile
export JAVA_HOME = /usr/lib/jvm/jana-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

配置生效和查看Maven版本

$ source /etc/profile
$ mvn -v

步骤三:全局工具配置关联JDK和Maven

Jenkins—>Manage Jenkins—>Global Tool Configuration—>JDK—>新增JDK

Jenkins—>Manage Jenkins—>Global Tool Configuration—>Maven—>新增Maven

Jenkins—>Manage Jenkins—>Configure System—>Global Properties 添加三个全局变量:JAVA_HOME、M2_HOME、PATH+EXTRA

步骤四:修改Maven的settings.xml

$ mkdir /root/repo
$ vi /opt/maven/conf/settings.xml

本地仓库改为:/root/repo/

添加阿里云私服地址:

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorof>central</mirrorof>
</mirror>

步骤五:测试Maven是否配置成功

测试项目—>配置—>构建---->增加构建步骤---->Execute Shell 输入mvn命令(如:mvn clean package 先清空,再打包)—>点击Build now

Tomcat安装和配置

步骤一:安装Tomcat(可查看相关安装教程)

步骤二:配置

修改Tomcat的用户,添加用户及权限

vi /opt/tomcat/conf/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

修改下列配置:

$ vi /opt/tomcat/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" />
-->

步骤三:重启Tomcat,访问测试

$ /opt/tomcat/bin/shutdown.sh
$ /opt/tomcat/bin/startup.sh

4、Jenkins构建项目

自由风格软件项目(FreeStyle Project)

步骤一:新建FreeStyle Project—>配置源码管理

步骤二:Build Now(拉取代码)

步骤三:构建—>添加构建步骤—>Executor Shell (编译打包,此处使用的mvn命令,也可根据项目使用其他命令)

echo "开始编译打包"
mvn clean package
echo "编译打包结束"

步骤四:部署 把项目部署到远程的Tomcat里面

  1. 安装Deploy to container 插件,Jenkins本身无法实现远程部署到Tomcat的更能,需要安装Deploy to container插件实现

  2. 项目---->配置---->构建后操作—>Deploy war/ear to a container—>以下图示配置

在这里插入图片描述
在这里插入图片描述

刷新Tomcat服务器,查看项目是否已经部署到tomcat上:192.168.66.102:8080/manager/html (tomcat服务器部署地址:端口号/manager/html)

Maven项目(Maven Project)

步骤一:安装 Maven Integration 插件,创建Maven项目,进行配置(配置和自由风格配置基本一样,唯一不同的是在构建处,Maven配置的是pom.xml文件,而自由风格配置的是shell脚本(更灵活,不仅可以配置Maven脚本,还可以配置其它脚本)

Maven构建配置:

在这里插入图片描述

frreeStyle构建配置:

在这里插入图片描述

流水线项目(Pipeline Project)

Pipeline:一套由Groovy语言实现的运行在Jenkins上的工作流框架(支持Declarative声明式语法和Scripted Pipeline脚本式语法),将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作,具有持久(无论是计划内还是计划外的服务器重启,Pipeline都是可恢复的)、可停止(可接收交互式输入,判断是否继续执行)、多功能(支持复杂的持续交互要求,支持fork/join、循环执行、并行执行任务的功能),和可扩展(集成各种功能的插件)等优点

创建Jenkins Pipeline:

  • 直接通过Jenkins界面编写Pipeline代码
  • 通过创建一个Jenkinsfile脚本文件放入项目源码库中(推荐在Jenkins中直接从源代码控制(SVM)中直接载入Jenkinsfile Pipeline)

方法一:直接通过Jenkins界面编写Pipeline代码

步骤一:安装Pipeline插件 Manage Jenkins---->Manage Plugins—>可选插件—>Pipeline,创建一个流水(Pipeline)项目,进行配置(与其它两种风格不一样的是,构建以及构建后的配置都变成了一个流水线配置)

声明式语法:

在这里插入图片描述

脚本式语法:
在这里插入图片描述

对Pipline脚本脚本不熟悉,可以使用流水线脚本帮助编写出脚本:
在这里插入图片描述
在这里插入图片描述

点击 Build Now

在这里插入图片描述

方法二:通过创建一个Jenkinsfile脚本文件放入项目源码库中(推荐在Jenkins中直接从源代码控制(SVM)中直接载入Jenkinsfile Pipeline)

在这里插入图片描述

在这里插入图片描述

其它构建细节
常见的Jenkins内置构建触发器
  • 触发远程构建

    步骤一:设置身份验证令牌,复制:job/web_demo_pipeline/build?token=6666

在这里插入图片描述

步骤二:访问http://localhost:1010/job/web_demo_pipeline/build?token=6666 ,访问界面空白,但是已经触发构建

在这里插入图片描述

  • 其他工程构建后触发(Build after other projects are build)

    步骤一:创建pre_job流水线工程

在这里插入图片描述

步骤二:配置需要构建的工程 web_demo_pipeline

在这里插入图片描述

步骤三:构建pre_job,构建之后,将会触发需要构建的工程 web_demo_pipeline

  • 定时构建(Build periodically)

    定时字符串从左网友分别为:分 时 日 月 周

    一些定时表达式的例子:
    每30分钟构建一次:H代表形参 H/30 * * * * eg: 10:02 10:32
    每2个小时构建一次:H H/2 * * *
    每天的8点,12点,22点,一天构建3次(多个时间点中间用逗号隔开):0 8,12,22 * * *
    每天中午12点定时构建一次:H 12 * * *
    每天下午18点定时构建一次:H 18 * * *
    在每个小时的前半个小时内的每10分钟:H(0-29)10 * * * *
    每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38
    H H(9-16)/2 * * 1-5
  • 轮询SCM(Poll SCM) :定时扫描本地代码仓库的代码是否有变更,如果代码有变更就出发项目构建,需要Jenkins扫描本地整个项目的代码,增大系统开销,不建议使用。可以使用另一种更好的方案:利用Gitee或Gitlab的wehook(钩子)实现代码push到仓库,立即触发项目自动构建

在这里插入图片描述

Git hook自动触发构建

步骤一:安装插件(随着代码存放仓库不一样) Gitlab Hook 和 GitLab

安装成功后,在项目—>配置---->构建触发器中 会多出一种构建方案—>选择该方案,点击保存
在这里插入图片描述

步骤二:开启Gitlab的webhook功能,并配置Wehook地址

Gitlab---->settings—>Network—>Outbound requests—>选择 ‘Allow requests to the local network from web hooks and services’,点击 保存

在这里插入图片描述

Gitlab—>具体项目---->settings---->Integrations----->将webHook地址填写进URL,选择相应的触发条件---->点击 Add webhook

在这里插入图片描述

步骤三:配置Jenkin认证:Jenkins---->Manage Jenkins—>Configure System—>使用统计,取消勾选‘ Enable authentication for ‘/prohect’ end-point ’,点击 删除,应用/保存

在这里插入图片描述

步骤四:代码提交到Gitlab上,触发了Jenkins构建

Jenkins参数化构建

可通过 Manage Jenkins---->Configure System—>Content Token Reference查看Jenkins内部默认可调用的参数

步骤一:具体项目—>添加相关参数

在这里插入图片描述
在这里插入图片描述

添加后,项目左侧会出现一个:Build with Parameters

在这里插入图片描述

配置邮件服务器发送构建结果

步骤一:安装Email Extension插件

步骤二:Jenkins设置邮箱相关参数 Manage Jenkins ----> Configure System

在这里插入图片描述

登录邮箱,开启相应邮箱的客户端授权码,设置Jenkins中邮箱参数(以新浪邮箱为例)

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6VFxVfLF-1645603721299)(C:\Users\melot\AppData\Roaming\Typora\typora-user-images\image-20220223115515944.png)]

步骤三:准备邮件内容,编写Jenkinsfile添加构建后发送邮件

在这里插入图片描述

Jenkins+SonarQube实现代码审查

SonarQube是一款用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C,C#,C++,Python,PL/SQL,Cobol,JavaScript,Groovy等二十几种编程语言的代码质量管理和检测。官网:https://www.sonarqube.org/

安装SonarQube

环境要求:JDK1.8 MySQL5.7 SonarQube6.7.4

Manage Jenkins—>Global Tool Configuration下添加JDK1.8

步骤一:在MySQL创建sonar数据库,下载sonar压缩包:https://www/sonarqube.org/downloads/

解压sonar压缩包,并设置权限

yum install unzip
unzip sonarqube-6.7.4  解压
mkdir /opt/sonar 创建目录
mv sonarqube-6.7.4/* /opt/sonar
useradd sonar   创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar./opt/sonar 更改sonar目录及文件权限

修改配置文件

vi /opt/sonarqube-6.7.4/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=Root@123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?userUnicode=true@characterEncoding=utf8&rewriteBatchedStatements=true&useConfig=maxPerformance&useSSL=false

注意:sonar默认监听9000端口,如果9000端口被占用,需要更改

启动sonar

cd /opt/sonarqube-6.7.4
su sonar ./bin/linux-x86-64/sonar.sh start  启动
su sonar ./bin/linux-x86-64/sonar.sh status  查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop  停止
tail -f logs/sonar.logs 查看日志

访问sonar

http://192.168.66.101:9000 默认账户:admin/admin

创建token:
在这里插入图片描述

Jenkins与SonarQube整合

在这里插入图片描述

步骤一:安装SonarQube Scanner插件

步骤二:添加SonarQube凭证 Manage Jenkins ----> Global Tool Configuration---->SonarQube Scanner

在这里插入图片描述

步骤三: Manage Jenkins—>Configure System—>SonarQube servers

在这里插入图片描述
在这里插入图片描述

实现代码审查
非流水线项目

步骤一:添加构建

在这里插入图片描述
在这里插入图片描述

步骤二:查看审查报告

在这里插入图片描述

流水线项目

准备脚本,push脚本后,Jenkins进行Build,查看审查报告

在这里插入图片描述

5、Jenkins+Docker+SpringCloud微服务持续集成(略)

在这里插入图片描述

大致流程:

1、开发人员每天把代码提交到Gitlab代码仓库

2、Jenkins从Gitlab中拉去项目源码,编译并打包成jar包,然后构建成Docker镜像,将镜像上传到Harbor私有仓库

3、Jenkins发送SSH远程命令,让生产部署服务器到Harbor私有仓库拉去镜像到本地,然后创建容器

4、最后,用户可以访问到容器

安装环境:
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐