基于 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,一经查实,立即删除!

相关文章

机器学习/深度学习 模型修正能力

一、模型修正 在了解模型修正能力之前,我们现在了解下‘模型修正’。 在深度学习模型训练中,模型通过反向传播计算损失函数的梯度,基于梯度利用梯度下降等优化算法更新模型参数以最小化损失函数。这个过程被称为‘模型修正’。 二、模型修正…

Linux - tmux命令

0、常用参数 tmuxnew-s<name> 新建名为name的会话&#xff08;无-s参数则默认以数字命名&#xff09; &#xff08;常用&#xff09; tmux a 恢复上一次的会话 &#xff08;常用&#xff09; tmux a-t<name> 恢复&#xff08;attach&#xff09;名为name的会话 &a…

springboot/ssm甘肃印象网站Java地区特产文化交流管理系统web

springboot/ssm甘肃印象网站Java地区特产文化交流管理系统web 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;…

搜索引擎SEO策略介绍

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

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单节点部署

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

Go——下划线

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

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

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

Elasticsearch基础操作

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

k8s简单架构图

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

记录 Dubbo+Zookeeper 学习Demo

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

关于tomcat服务器配置及性能优化的20道高级面试题

1. 请描述Tomcat服务器的基本架构和组件。 Tomcat服务器的基本架构主要包括Server、Service、Connector和Container等组件。具体来看&#xff1a; Server&#xff1a;是Tomcat中最顶层的容器&#xff0c;代表着整个服务器。它负责运行Tomcat服务器&#xff0c;例如打开和关闭…

Mac上.bashrc转.zshrc时,设置PATH环境变量注意事项

由于最近系统坏了刚好就升级了&#xff0c;也就打算使用新的 zsh 了&#xff0c;反正平时在 WSL 和树莓派上用的都是 bash。按理来说应该没有什么困难&#xff0c;但还是遇到了一些问题&#xff0c;都是细节&#xff0c;需要记录一下&#xff0c;防止后续一些东西的更新比较麻烦…

React 教程

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

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

2&#xff0c;IPD的核心思想 以客户为导向&#xff1a;应该开发什么产品&#xff1f; 应该开发哪些产品&#xff1f;华为的“基本法”规定&#xff0c;其目的是为客户服务&#xff08;Huawei&#xff0c;1998&#xff09;。然而&#xff0c;在IPD实施后&#xff0c;对这种以客…

如何在mac下使用homebrew安装 mysql?

安装 Homebrew&#xff1a; 如果尚未安装 Homebrew&#xff0c;可以通过以下命令在终端中安装&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"更新 Homebrew&#xff1a; 运行以下命令以确保 Homebr…

C#/.Net 多线程下载m3u8视频

C#/.Net 多线程下载m3u8视频 下载网络文件方法下载m3u8 .HttpGet() 是我自己封装的HTTP请求方法 下载网络文件方法 /// <summary> /// 下载网络文件 /// </summary> /// <param name"url">文件地址</param> /// <param name"savePa…

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

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

安卓kotlin面试题 81-90

81. 简述 Kotlin 中泛型型变-协变、逆变、不变 ?Kotlin 中泛型引入了 in 和 out:逆变(In) 如果你的类是将泛型对象作为函数的参数,那么可以用 in:interface Consumer { fun consume(item: T) } 可以称其为 consumer class/interface,因为其主要是消费指定泛型对象…

手机App防沉迷系统C卷(JavaPythonC++Node.jsC语言)

智能手机方便了我们生活的同时,也侵占了我们不少的时间。"手机App防沉迷系统"能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 1、在一天24小时内,可注册每个App的允许使用时段; 2、一个时段只能使用一个App,举例说明…