基于 Jenkins 搭建一套 CI/CD 系统

一、CI/CD环境介绍

图片

本次要实现如下效果,开发人员完成功能开发并提交代码到gitlab仓库,jenkins自动完成拉取代码、编译构建、代码扫描(sonarqube)、打包,再自动化完成部署到Tomcat服务器提供访问。

环境准备三台Centos7.6机器:

服务器IP地址配置包含功能及版本
Gitlab192.168.220.1702核2GGitlab:12.4.2 (393a5bdafa2)
Jenkins192.168.220.1722核2G

Jenkins:2.364

Maven:3.8.6

Sonarqube:7.9.6 (build 41879)

JDK:11.0.16

Git:1.8.3.1

Tomcat192.168.220.1732核2G

Tomcat:8.5.82

JDK:1.8.0_342

部署过程中踩过不少坑,这套Jenkins因为需要安装较多插件,而Jenkins上的插件版本要求比较严格,所以最好实验情况下直接安装最新的Jenkins版本,这样上面的插件基本都能安装,包括Pipeline、gitlab、SSH Server等。不然遇到Jenkins插件安装不顺畅对新人挺麻烦的。

Jenkins安装最新版,那JDK也必须11以上,那也就要求sonarqube也得7.8以上,三者之间都是有依赖关系的。

看下效果:

图片

自动git拉取代码:

图片

maven自动构建:

图片

sonarqube自动扫描:

图片

自动部署:

图片

sonarqube扫描结果:

图片

二、CI/CD平台搭建

1)安装gitlab

1. 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
2. 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
5. 下载gitlab包,并且安装
在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm
安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
6. 修改gitlab配置
vi /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为82
external_url 'http://192.168.220.170:82'
nginx['listen_port'] = 82
7. 重载配置及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
8. 把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
启动成功后,看到以下修改管理员root密码的页面,修改密码后,然后登录即可

图片

添加组、创建用户、创建项目

图片

图片

这样用户zhangsan就拥有了itheima_group组的权限。接下来使用zhangsan用户进入组创建一个新的项目,项目名称:hello_demo

图片

该项目仓库地址是:

http://192.168.220.170:82/itheima_group/hello-demo.git

git@192.168.220.170:itheima_group/hello-demo.git

接下来将本地的maven工程代码上传到gitlab仓库,上传成功后如下:

图片

到这gitlab就准备好了!

2)安装jenkins

1)安装JDK
Jenkins需要依赖JDK,所以先安装JDK11
yum install -y java-11-openjdk*
安装目录为:/usr/lib/jvm
2)获取jenkins安装包
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins
3)启动Jenkinssystemctl start jenkins
4)打开浏览器访问
http://192.168.220.172:8080
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
5)获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
6)跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装

第二种安装:

 Jenkins本地安装:下载jenkins.war包,放在tomcat的webapps下,运行tomcat。

Jenkins安装完成后,需要替换插件更新源:需要执行以下步骤:

sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在Manage Jenkins -- Plungin Manager -- Update Site:将url替换为清华大学的url:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

图片

提交后,在浏览器输入:http://192.168.220.172.:8080/restart重启jenkins生效。

Jenkins准备好后,就是与gitlab集成,完成代码自动拉取的动作了。但是需要先准备如下:

安装Credentials Binding插件

要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件,拉取gitlab代码需要使用凭证的方式拉取:

图片

再去添加gitlab认证的凭证:

图片

还要再jenkins服务器上安装git工具和git插件:

图片

图片

在jenkins上准备一个项目:

图片

图片

到这里,jenkins拉取gitlab代码的准备条件都ok了。开始与gitlab集成吧。

保存,然后回到项目点“Build Now”:

图片

图片

如上图,jenkins自动去gitlab拉取代码,并且将代码工程放在如上路径下:

图片

好了,到这里说明jenkins已经安装成功了,也安装了相关的插件和配置了jenkins的基本配置,并且完成了与gitlab的集成,完成构建自动触发代码拉取到本地。

3)部署Tomcat服务器

把Tomcat压缩包上传到192.168.66.102服务器
yum install java-1.8.0-openjdk* -y #安装JDK(已完成)
tar -xzf apache-tomcat-8.5.47.tar.gz #解压
mkdir -p /opt/tomcat #创建目录
mv /root/apache-tomcat-8.5.47/* /opt/tomcat #移动文件
/opt/tomcat/bin/startup.sh #启动tomcat

 

注意:服务器已经关闭了防火墙,所以可以直接访问Tomcat啦,地址为:http://192.168.66.102/8080

图片

图片

tomcat已经部署成功!

4)配置jenkins与tomcat集成,完成CD持续部署功能

同样的,也是需要在jenkins上做大量的配置:

Maven安装和配置

tar -xzf apache-maven-3.6.2-bin.tar.gz #解压
mkdir -p /opt/maven #创建目录
mv apache-maven-3.6.2/* /opt/maven #移动文件

配置环境变量

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

Jenkins全局工具配置,关联JDK和Maven

图片

图片

添加Jenkins全局变量

图片

准备好后,来测试Maven构建是否生效,还是用刚刚的项目:hello_web

图片

图片

图片

可以看到,项目构建成功。可以去服务器上看到war包已经生成。

图片

war可以自动编译,还差自动部署了,有需要配置一些步骤:

安装 Deploy to container插件

图片

添加Tomcat凭证

图片

jenkins项目配置构建后操作

图片

图片

保存配置,点“Build Now”:

图片

图片

可以看到项目成功部署,可以正常访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜索引擎SEO策略介绍

baidu搜索:如何联系八爪鱼SEO baidu搜索:如何联系八爪鱼SEO baidu搜索:如何联系八爪鱼SEO 第一、 关键词的选择策略: 1、门户类的网站关键词选择策略: 网站每个页面本身基本都包含有关键词:网站拥有上百…

Linux上部署zabbix 6.x

建议大家使用Rocky Linux 8.X https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso 1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/7/x86_64/zabbix-release-6.2-3.el8.noarc…

Centos7安装Clickhouse单节点部署

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

Go——下划线

"_"是特殊标识符,用来忽略结果。 1. 下划线在import中 在golang中,import的作用是导入其他package。 import下划线的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候…

FreeRTOS学习笔记-基于stm32(5)列表和列表项

一、列表与列表项简介 列表是FreeRTOS中的一种数据结构,类似双向循环链表。用来跟踪FreeRTOS中的任务。列表项就是存放在列表中的项目。 二、列表 列表结构体: typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE //校验值c…

Elasticsearch基础操作

一、Restful接口 Elasticsearch通过RESTful接口提供与其进行交互的方式。在ES中,提供了功能丰富的RESTful API的操作,包括CRUD、创建索引、删除索引等操作。你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,你甚至可以使用 curl …

k8s简单架构图

背景 k8s目前应用的很广泛,它其实也是采用分布式系统中最常见的一个master管理节点多个worker节点的方式构成的,本文就简单看下k8s的架构 k8s架构图 1.管理节点master,master节点主要有三个模块构成 1.1 APIServer模块:这个模块…

记录 Dubbo+Zookeeper 学习Demo

DubboZookeeper ZookeeperZookeeper 下载可能出现的问题 辅助程序下载dubbo-admin项目打包工程打包常见问题 SpringBoot集成Dubbo项目依赖定义服务接口服务端实现服务端配置依赖代码实现 消费端实现服务端配置依赖代码实现 启动 结合Dubbo官网学习如何完成SpringBootDubboZooke…

React 教程

学习主要来源 React 教程 | 菜鸟教程 React 是一个用于构建用户界面的 JAVASCRIPT 库。 React 主要用于构建 UI,很多人认为 React 是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站&#xff0…

学习笔记-华为IPD转型2020:2,IPD的核心思想

2,IPD的核心思想 以客户为导向:应该开发什么产品? 应该开发哪些产品?华为的“基本法”规定,其目的是为客户服务(Huawei,1998)。然而,在IPD实施后,对这种以客…

视频监控/云存储EasyCVR视频融合平台设备增删改操作不生效是什么原因?

国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流&#xf…

[linux] socket 非阻塞模式使用注意事项

在使用 socket 的一些 api 的时候,默认情况下都是阻塞模式。比如使用 tcp socket 时,客户端调用 connect() 创建连接,connect() 返回的时候要么是创建连接成功了,要么是出现了错误,反正 connect() 返回的时候结果是确定…

微信小程序开发系列(二十九)·界面交互API·loading 提示框、showModal模态对话框、showToast消息提示框

目录 1. loading 提示框 1. 1 wx.showLoading()显示loading提示框 1.2 wx.hideLoading()关闭 loading 提示框 2. showModal 模态对话框 3. showToast 消息提示框 小程序提供了一些用于界面交互的 API,例如:loading 提示框、消息提示框、模态对…

python学习1:csv模块、time模块、random、jieba、worldcloud、pycharm的虚拟环境认识、black格式化文件

标准库与第三方库 模块(modules):是包含python函数和变量的文件,名称符合Python标识符要求,并使用.py后缀 包(package):是包含其他模块、包的文件夹。名称符合Python标识符要求&am…

安装配置HBase

HBase集群需要整个集群所有节点安装的HBase版本保持一致,并且拥有相同的配置,具体配置步骤如下: 1. 解压缩HBase的压缩包 2. 配置HBase的环境变量 3. 修改HBase的配置文件,HBase的配置文件存放在HBase安装目录下的conf中 4. 首…

蓝桥杯每日一题 走迷宫bfs 超超详细解释!!!

昨天学习了bfs的基本概念&#xff0c;今天来做一道经典习题练练手吧&#xff01; bfs常用的两类题型 1.从A出发是否存在到达B的路径(dfs也可) 2.从A出发到B的最短路径&#xff08;数小:<20才能用dfs&#xff09; 遗留的那个问题的答案- 题目&#xff1a;走迷宫 答案&…

Java爬虫-获取数据的方式之一

目录 一、jsoup的使用 1.概述 2.主要功能 3.快速入门 4.数据准备 二、Selenium 1.概述 2.使用 三、Selenium配合jsoup获取数据 四、爬虫准则 五、Seleniumjsoupmybatis实现数据保存 1.筛选需要的数据 2.创建一个表&#xff0c;准备存储数据 手写&#xff1f;不存在…

基于STM32的电动车防盗器设计

1.项目需求 点击遥控器 A 按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动&#xff08;小偷偷车&#xff09;&#xff0c;则喇叭发出声响报警&#xff0c; 吓退小偷。 点击遥控器 B 按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不会报警&#…

Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

一、前言 用ffmpeg做音视频保存到mp4文件&#xff0c;都会遇到一个问题&#xff0c;尤其是在视频监控行业&#xff0c;就是监控摄像头设置的音频是PCM/G711A/G711U&#xff0c;解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw&#xff0c;将这个原始的音频流保存到mp4文件是会…

Java代码审计工程师直播第六期

本期直播课程将深入探讨Java代码审计的关键概念和技术。涵盖课题包括安全漏洞分析、代码审查方法、常见漏洞案例分析等。学员将通过实例掌握代码审计实战技能&#xff0c;提升对Java应用程序安全的认知和技能水平。 课程大小&#xff1a;6.1G 课程下载&#xff1a;https://do…