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中邮箱参数(以新浪邮箱为例)

步骤三:准备邮件内容,编写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、最后,用户可以访问到容器

安装环境:

Jenkins持续集成相关推荐

  1. 使用Jenkins持续集成Vue项目配置Sonar任务

    title: 使用Jenkins持续集成Vue项目配置Sonar任务 tags: jenkins Vue.js Sonar categories: ci date: 2017-12-05 22:09: ...

  2. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...

  3. 半天搭建你的Jenkins持续集成与自动化部署系统

    前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由 ...

  4. centos下搭建Jenkins持续集成环境(安装jenkins)

    centos下搭建Jenkins持续集成环境(安装jenkins) 1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这 ...

  5. Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

    Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目 前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+ ...

  6. Jenkins持续集成环境, 如何自定义 maven repositories

    假设自定义的仓库路径为"/opt/repository",那么在"系统管理-系统设置"中,修改"全局MAVEN_OPTS"的值为如下的内容: ...

  7. 超详细的jenkins持续集成工作原理、功能、部署方式等介绍

    文章由LinuxBoy分享于2019-08-30 11:08:39 超详细的jenkins持续集成工作原理.功能.部署方式等介绍 1. 概念 jenkins是一个开源项目,提供了一种易于使用的持续集成 ...

  8. Gitlab+jenkins持续集成+自动化部署(三)

    搭建gitlab+Jenkins自动化部署 在jenkins上安装插件 Build Authorization Token Root Plugin. Build Authorization Token ...

  9. 【测试开发】的Devops持续集成部署体系之Jenkins持续集成和持续部署基础应用

    目录 [一]:Jenkins 持续集成安装及使用简介 一.前言 二.初始化 Jenkins 插件和管理员用户 2.1 进入如下页面,输入上面出现的口令 2.2 进入选择安装插件的页面后,可以选择安装社 ...

  10. Jenkins持续集成入门到精通

    Jenkins持续集成入门到精通 文章目录 Jenkins持续集成入门到精通 1. 持续集成及Jenkins介绍 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.3.1 ...

最新文章

  1. BZOJ5319 洛谷4559 LOJ2551:[JSOI2018]军训列队——题解
  2. tensflow中加载 fashion_mnist 数据集时
  3. GraphQL在SAP Kyma中的广泛应用
  4. linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询
  5. 《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习
  6. 洛谷P3205合唱队——区间DP
  7. python中去掉外部引号的函数是_在Python中删除String中的引号
  8. PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unknow........
  9. 本地更新github项目_GitHub开源项目20200627更新精选
  10. 如何在 Mac 上查找和管理 Safari 下载?
  11. IOS访问webserver接口
  12. MATLAB BP神经网络的设计与优化
  13. 二叉树各种遍历算法 Java 实现总结
  14. 报表控件FastReport.NET使用教程:如何在 Visual Studio 中使用报表组件
  15. Excel里面自动获取当前时间
  16. python怎么爬虎牙_【python】虎牙直播爬虫项目
  17. 工作1-2年,月薪3000不可怕,可怕的是能力与之相匹配
  18. 安全防御(二)--- 防火墙域间双向NAT、域内双向NAT、基于VRRP的双机热备
  19. 笔记本Win7系统 设置WIFI热点共享无线网络
  20. Python+Vue计算机毕业设计停车场管理系统8f46a(源码+程序+LW+部署)

热门文章

  1. VS Code ---- 使用笔记
  2. 新概念英语1册67课
  3. C++ 全局变量及静态全局变量的使用方法
  4. 如何全方面的保障项目质量?(二)
  5. c语言13amp;6,C语言的六种位运算符及其应用
  6. php域名端口号获取,js获取当前域名和端口号以及完整URL
  7. python ast_python AST 抽象语法树
  8. Excel计算XX天以后的日期
  9. HTTPie:好用的命令行工具
  10. windows下styleGAN2和styleGAN3编译配置bug