Jenkins持续集成
1、介绍、环境搭建
什么是Jenkins?
Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件,支持自定义工具集、多种交付通道
CI:Continuous integration,持续集成,一种软件开发实践。每次集成(源代码变更后)都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,大大减少集成问题。持续集成过程:先把代码放入git,Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端
CD:Continuous Delivery,持续交付,指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本。包括持续集成、持续测试、持续部署
持续交付管道:将源代码转换为可发布产品的多个不同的任务和作业通常串联成一个软件管道,一个自动流程成功完成后会启动管道中的下一个流程。这些管道有许多不同的叫法,如持续交付管道、部署管道、软件开发管道 自动化部署流程:
持续集成的优点:
- 降低风险,由于持续集成不断去构建,编译和测试,可以在早期发现问题,减小修复产生的代价
- 对系统健康持续检查,减少发布风险带来的问题
- 减少重复性工作
- 持续部署,提供可部署单元包
- 持续交付可供使用的版本
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可以和这些第三方的应用进行交互
-
安装Credentials Binding插件 -
安装Git插件(可查看相关安装教程) -
安装Git工具(可查看相关安装教程,此处直接使用Gitee,不需要安装) -
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地址)
- 进行构建项目: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里面
-
安装Deploy to container 插件,Jenkins本身无法实现远程部署到Tomcat的更能,需要安装Deploy to container插件实现 -
项目---->配置---->构建后操作—>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内置构建触发器
步骤二:访问http://localhost:1010/job/web_demo_pipeline/build?token=6666 ,访问界面空白,但是已经触发构建
步骤二:配置需要构建的工程 web_demo_pipeline
步骤三:构建pre_job,构建之后,将会触发需要构建的工程 web_demo_pipeline
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中邮箱参数(以新浪邮箱为例)
步骤三:准备邮件内容,编写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、最后,用户可以访问到容器
安装环境:
|