Jenkins持续集成

Jenkins持续集成

1、介绍、环境搭建

什么是Jenkins?

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

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

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

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

持续集成的优点:

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

2、部署Jenkin环境

Windows环境下安装Jenkins:

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

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

Jenkins持续集成_第2张图片

Jenkins持续集成_第3张图片

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

Jenkins持续集成_第4张图片
Jenkins持续集成_第5张图片

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

Jenkins持续集成_第6张图片

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

Jenkins持续集成_第7张图片

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

Jenkins持续集成_第8张图片

3、常用Jenkins插件安装

Jenkins持续集成_第9张图片

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

Jenkins持续集成_第10张图片

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

Jenkins持续集成_第11张图片

用户权限管理插件

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

Jenkins持续集成_第12张图片

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

Jenkins持续集成_第13张图片

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

Jenkins持续集成_第14张图片

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

Jenkins持续集成_第15张图片

新增用户: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用户名和私钥,或者密钥文件等)

Jenkins持续集成_第16张图片

类型一:采用账号密码类型:
Jenkins持续集成_第17张图片

​ Gitee代码托管工具

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

Jenkins持续集成_第18张图片

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

Jenkins持续集成_第19张图片

步骤一:生成公钥和私钥

$ ssh-keygen -t rsa

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

Jenkins持续集成_第20张图片

查看公钥:

$ cat ~/.ssh/id_rsa.pub

查看私钥:

$ cat ~/.ssh/id_rsa

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

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

Jenkins持续集成_第21张图片
Jenkins持续集成_第22张图片

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/

添加阿里云私服地址:


alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central

步骤五:测试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—>以下图示配置

Jenkins持续集成_第23张图片
Jenkins持续集成_第24张图片

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

Maven项目(Maven Project)

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

Maven构建配置:

Jenkins持续集成_第25张图片

frreeStyle构建配置:

Jenkins持续集成_第26张图片

流水线项目(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)项目,进行配置(与其它两种风格不一样的是,构建以及构建后的配置都变成了一个流水线配置)

声明式语法:

Jenkins持续集成_第27张图片

脚本式语法:
Jenkins持续集成_第28张图片

对Pipline脚本脚本不熟悉,可以使用流水线脚本帮助编写出脚本:
Jenkins持续集成_第29张图片
Jenkins持续集成_第30张图片

点击 Build Now

Jenkins持续集成_第31张图片

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

Jenkins持续集成_第32张图片

Jenkins持续集成_第33张图片

其它构建细节

常见的Jenkins内置构建触发器
  • 触发远程构建

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

Jenkins持续集成_第34张图片

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

Jenkins持续集成_第35张图片

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

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

Jenkins持续集成_第36张图片

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

Jenkins持续集成_第37张图片

步骤三:构建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到仓库,立即触发项目自动构建

Jenkins持续集成_第38张图片

Git hook自动触发构建

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

安装成功后,在项目—>配置---->构建触发器中 会多出一种构建方案—>选择该方案,点击保存
Jenkins持续集成_第39张图片

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

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

Jenkins持续集成_第40张图片

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

Jenkins持续集成_第41张图片

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

Jenkins持续集成_第42张图片

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

Jenkins参数化构建

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

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

Jenkins持续集成_第43张图片
Jenkins持续集成_第44张图片

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

Jenkins持续集成_第45张图片

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

步骤一:安装Email Extension插件

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

Jenkins持续集成_第46张图片

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

Jenkins持续集成_第47张图片

Jenkins持续集成_第48张图片

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

Jenkins持续集成_第49张图片

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持续集成_第50张图片

Jenkins与SonarQube整合

Jenkins持续集成_第51张图片

步骤一:安装SonarQube Scanner插件

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

Jenkins持续集成_第52张图片

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

Jenkins持续集成_第53张图片
Jenkins持续集成_第54张图片

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

步骤一:添加构建

Jenkins持续集成_第55张图片
Jenkins持续集成_第56张图片

步骤二:查看审查报告

Jenkins持续集成_第57张图片

流水线项目

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

Jenkins持续集成_第58张图片

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

Jenkins持续集成_第59张图片

大致流程:

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

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

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

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

安装环境:
Jenkins持续集成_第60张图片

你可能感兴趣的:(后端开发,jenkins,ci)