CI/CD——CI持续集成实验
目录
一. 安装Docker
二. 部署Jenkins
三. 配置邮箱
四. Harbor部署
五. Nexus Repository部署
五. sonarqube安装
六. 配置Docker
七. jenkins系统配置sonarqube
八. 配置pipeline
九. 构建并集成
一. 安装Docker
docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.rainbond.cc" ,"https://do.nark.eu.org","https://dc.j8.work","https://pilvpemn.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
拉取所需要镜像
[root@jenkins ~]# docker pull sonarqube:9.9.3-community
[root@jenkins ~]# docker pull maven:3.8.8-sapmachine-11
[root@jenkins ~]# docker pull node:18.20.3-alpine3.20
[root@jenkins ~]# docker pull sonarsource/sonar-scanner-cli
二. 部署Jenkins
官方文档:Redhat Jenkins Packages
下面使用yum安装方式,手动安装可参考:Jenkins安装部署与配置_jenkins部署-CSDN博客
[root@jenkins ~]# sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
[root@jenkins ~]# yum install -y fontconfig java-17-openjdk
[root@jenkins ~]# yum install -y jenkins
[root@jenkins ~]# systemctl enable --now jenkins
访问本机IP+端口,例如我这里访问:http://192.168.226.29:8080/
见下图就已经成功部署,但是先不着急登录。
停止jenkins,将打包好的插件全部导入jenkins存放插件的目录/var/lib/jenkins/plugins/
链接:https://pan.baidu.com/s/1e1qjYX8K2TLIMg4fcalFVQ?pwd=zl2q
提取码:zl2q
--来自百度网盘超级会员V2的分享
所需插件已经打包好:
[root@jenkins ~]# systemctl stop jenkins# 将jenkins加入到docker组
[root@jenkins ~]# gpasswd -a jenkins docker#上传插件压缩包plugins-2.452.3.tgz
[root@jenkins ~]# ll
total 333680
-rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
-rw-r--r-- 1 root root 341684112 Aug 6 2024 plugins-2.452.3.tgz[root@jenkins ~]# tar -xf plugins-2.452.3.tgz[root@jenkins ~]# ll
total 333696
-rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
drwxr-xr-x 127 jenkins jenkins 12288 Aug 6 2024 plugins
-rw-r--r-- 1 root root 341684112 Aug 6 2024 plugins-2.452.3.tgz[root@jenkins ~]# cd plugins[root@jenkins plugins]# cp ./* /var/lib/jenkins/plugins/[root@jenkins plugins]# systemctl start jenkins[root@jenkins plugins]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=3708,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=3708,fd=4))
LISTEN 0 50 *:8080 *:* users:(("java",pid=5318,fd=8))
# 查看初始化密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
c7cdf3cd065f465ca2cd1f4f5cc29f69
输入账户密码登录后页面见下图即完成
三. 配置邮箱
添加邮箱凭据
邮箱全局凭据类型:Username with password
用户名 : 对应你的真实邮箱名
密码 : 你邮箱的授权码
ID(这个用固定的) :jenkins_mail
系统配置
四. Harbor部署
下载地址:https://github.com/goharbor/harbor/releases/tag/v2.10.3
上传虚拟机,这里我已经改好了
[root@jenkins ~]# ll
total 548856
-rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg
-rw-r--r-- 1 root root 562018170 Aug 1 00:15 harbor-offline-installer-v2.10.3.tgz[root@jenkins ~]# tar -xf harbor-offline-installer-v2.10.3.tgz
[root@jenkins ~]# cd harbor[root@jenkins harbor]# cp harbor.yml.tmpl harbor.yml[root@jenkins harbor]# vim harbor.yml # 全部替换该文件内容为如下配置,第一行IP需要修改你的IP
hostname: 192.168.226.29
http:port: 80
harbor_admin_password: Harbor12345
database:password: root123max_idle_conns: 100max_open_conns: 900conn_max_lifetime: 5mconn_max_idle_time: 0
data_volume: /data
trivy:ignore_unfixed: falseskip_update: falseskip_java_db_update: falseoffline_scan: falsesecurity_check: vulninsecure: false
jobservice:max_job_workers: 10job_loggers:- STD_OUTPUT- FILElogger_sweeper_duration: 1 #days
notification:webhook_job_max_retry: 3webhook_job_http_client_timeout: 3 #seconds
log:level: infolocal:rotate_count: 50rotate_size: 200Mlocation: /var/log/harbor
_version: 2.10.0
proxy:http_proxy:https_proxy:no_proxy:components:- core- jobservice- trivy
upload_purging:enabled: trueage: 168hinterval: 24hdryrun: false
cache:enabled: falseexpire_hours: 24
# 执行安装
[root@jenkins harbor]# ./install.sh
浏览器访问IP即可,例如我这里就访问http://192.168.226.29/
如果配置文件中自己没有修改,默认用户名:admin 默认密码:Harbor12345
在jenkins中添加全局凭据
全局凭据类型: Username with password
用户名(默认就用初始化的admin):admin
密码(这里就是admin用户密码) : Harbor12345
ID(这里就固定用和我一样的 :jenkins-docker
五. Nexus Repository部署
[root@jenkins ~]# mkdir /opt/nexus/
[root@jenkins ~]# cd /opt/nexus
[root@jenkins nexus]# mkdir data && chmod 777 /opt/nexus/data
[root@jenkins nexus]# vim docker-compose.yml
version: '3.2'
services:nexus3:image: sonatype/nexus3container_name: nexus3restart: alwaysports:- "8081:8081"volumes:- ./data:/nexus-data
# 启动
[root@jenkins nexus]# docker compose up -d
浏览器访问IP+8081端口 。例如我这里访问:http://192.168.226.29:8081/
# 在容器查看初始密码
[root@jenkins ~]# docker exec -it nexus3 cat /nexus-data/admin.password
33551d8e-36c6-4b35-a87e-9f7518d48b90
创建后端仓库
创建前端仓库
在jenkins全局配置中添加Nexus的凭据
全局凭据类型: Username with password
用户名(默认就用初始化的admin):admin
密码(这里就是admin用户密码) : lzz2578+
ID(这里就固定用和我一样的 :jenkins_nexus
五. sonarqube安装
[root@jenkins ~]# mkdir /opt/sonarqube
[root@jenkins ~]# cd /opt/sonarqube
[root@jenkins sonarqube]# vim docker-compose.yml
version: "3.1"
services:db:image: postgrescontainer_name: dbports:- 15432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonar_123volumes:- /opt/sonarqube/sonar-qube/data:/var/lib/postgresql/datasonarqube:image: sonarqube:9.9.3-communitycontainer_name: sonarqubedepends_on:- dbports:- "19000:9000"networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar_123volumes:- ./sonar-l10n-zh-plugin-9.9.jar:/opt/sonarqube/extensions/plugins/sonar-l10n-zh-plugin-9.9.jar
networks:sonarnet:driver: bridge
上传sonarqube中文汉化包
链接:https://pan.baidu.com/s/1QWuovwWRKrD6YT3TcA8gFQ?pwd=3rtu
提取码:3rtu
--来自百度网盘超级会员V2的分享
[root@jenkins sonarqube]# ls
docker-compose.yml sonar-l10n-zh-plugin-9.9.jar
[root@jenkins sonarqube]# vim /etc/security/limits.conf #文件最后加入下述配置
* soft nofile 131072
* hard nofile 131072
* soft nproc 10240
* hard nproc 10240
[root@jenkins sonarqube]# vim /etc/sysctl.conf # 在文件最后加入下述配置
vm.max_map_count=524288
fs.file-max=131072
[root@jenkins sonarqube]# sysctl -p
[root@jenkins sonarqube]# mkdir -p /opt/sonarqube/sonar-qube/data && chmod 777 /opt/sonarqube
[root@jenkins sonarqube]# docker compose up -d
[root@jenkins sonarqube]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
702508e30e89 sonarqube:9.9.3-community "/opt/sonarqube/dock…" 2 minutes ago Up 2 minutes 0.0.0.0:19000->9000/tcp, :::19000->9000/tcp sonarqube
9c7cce2141f1 postgres "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:15432->5432/tcp, :::15432->5432/tcp db
[root@jenkins sonarqube]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=3708,fd=3))
LISTEN 0 4096 0.0.0.0:19000 0.0.0.0:* users:(("docker-proxy",pid=7415,fd=4))
LISTEN 0 4096 0.0.0.0:15432 0.0.0.0:* users:(("docker-proxy",pid=7304,fd=4))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=3708,fd=4))
LISTEN 0 4096 [::]:19000 [::]:* users:(("docker-proxy",pid=7423,fd=4))
LISTEN 0 4096 [::]:15432 [::]:* users:(("docker-proxy",pid=7315,fd=4))
LISTEN 0 50 *:8080 *:* users:(("java",pid=6186,fd=8))
浏览器访问IP+端口,例如我这里访问:http://192.168.226.29:19000/
默认用户名:admin 默认密码:admin
生成令牌
在jenkins页面中配置sonarqube的凭据
全局凭据类型选择 :Secret text
Secret(在sonarqube生成的令牌):sqa_c7943cdcc1631859eb1b21ed7bdfa6508b699f3e
ID : sonarqube-token-id
描述:随便写,标识作用
配置sonarqube-webhook凭据
来到jenkins的全局凭据配置里添加上
这里我用一个自己的gitee仓库获取ruoyi-vue的项目练习
六. 配置Docker
设置harbor仓库添加入不安全的设置中
[root@jenkins ~]# vim /etc/docker/daemon.json
{"insecure-registries": ["192.168.226.29"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
让docker在不重启服务的情况下重新加载配置
[root@jenkins ~]# systemctl reload docker
[root@jenkins ~]# kill -SIGHUP $(pidof dockerd)
七. jenkins系统配置sonarqube
八. 配置pipeline
先下载git工具
[root@jenkins ~]# yum install -y git
修改代码,来到gitee
修改代码中的IP为你的IP
将代码中的接收邮箱改为你的邮箱进行实验
提交更改
九. 构建并集成
第一次点构建一般会失败
等失败后排查问题,然后再点击构建时,如果推送到制品库了就需要修改一下版本号和项目唯一标识符,默认从3.80开始,每构建一次,修改一次版本号,避免推送冲突。
可看构建状态
遇到报错,请仔细检查前面的步骤是否不经意间搞错和漏掉。
遇下图则是完成了整个CI/CD中的CI(持续集成)流程。
现在去制品库查看打包好的文件是否储存了
去Harbor镜像仓库查看是否正确存储
查看邮箱邮件
查看代码检查服务
会存在一定的代码BUG,但是都是不影响整体和可以承受的范围内的,如果想让代码检查严格,可以通过 SonarQube 质量阀进行详细设置。
相关文章:

CI/CD——CI持续集成实验
目录 一. 安装Docker 二. 部署Jenkins 三. 配置邮箱 四. Harbor部署 五. Nexus Repository部署 五. sonarqube安装 六. 配置Docker 七. jenkins系统配置sonarqube 八. 配置pipeline 九. 构建并集成 一. 安装Docker docker-ce镜像_docker-ce下载地址_docker-ce安装教程…...

2.4 大模型数据基础:预训练阶段数据详解 ——《带你自学大语言模型》系列
本系列目录 《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型 1.1 从图灵机到GPT,人工智能经历了什么…...

Kali Linux——网络安全的瑞士军刀
一、引言 在网络安全的领域中,Kali Linux 宛如一把强大而全能的瑞士军刀,为安全研究人员和专业人士提供了丰富的工具和资源。本文将深入探讨 Kali Linux 的特点、优势、常用工具以及实际应用场景,带您领略这一强大操作系统的魅力。 二、Kal…...
UML建模-测试用例
用例可用于测试系统的正确性和有效性。 正确性表明系统的实现符合规格说明。有效性保证开发的系统是用户真正需要的系统。有效性检查一般在 系统开发之前进行。当用例模型构造完成后,开发者将模型交给用户讨论,由用户检查模型能否满足他们对系统的需求。…...
Python知识点:如何使用Socket模块进行网络编程
Python 的 socket 模块提供了一个底层网络接口,允许你通过编程进行网络通信。使用 socket 模块可以编写客户端和服务器端程序,从而实现数据在网络上的传输。以下是如何使用 socket 模块进行网络编程的详细说明。 1. 创建一个 Socket 首先,你…...

培训第二十一天(mysql用户创建与授权、角色创建)
上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…...
makefile基本语法
在编写复杂的程序项目时,Makefile 是一个非常有用的工具,它能自动化构建过程。以下是一些基本的 Makefile 语法介绍: 基本结构: target: dependenciescommandtarget:构建目标,通常是一个文件,如…...
白骑士的PyCharm教学实战项目篇 4.4 大数据处理与分析
系列目录 上一篇:白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成 随着数据量的爆炸性增长,大数据处理与分析成为现代数据科学的重要课题。PyCharm提供了强大的功能,可以帮助开发者高效地进行大数据环境的配置与连接…...

无人机之民用无人机用途分类篇
一、航拍无人机 用于航拍摄影和电影制作,提供空中视角的拍摄服务。可用于电影制作、广告拍摄、房地产销售等。 二、物流无人机 用于快递和货物运输,提高物流效率,可以到达传统配送方式难以覆盖的地区,在突发事件如自然灾害、疫…...
Android10 修改设备名称
A10和A12的设备名称修改是不同的,A10设备名称修改分好几个位置 修改wifi默认名称 在framework/base模块下 diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 9041a7c3a14..7a1e63688c4 100644 --- a/core/res/res/values/…...
go testing 包
Go语言的testing包提供了一套丰富的测试工具,用于编写和运行测试用例。以下是testing包中一些常用的函数和类型: func TestMain(m *testing.M): 这是一个特殊的函数,用于执行测试的主函数。如果定义了TestMain,那么在运行go test时…...
基于phpstudy的靶场搭建和github加速
微软商店下载 watt toolkit,然后在侧边栏选择网络加速,勾选 github,就可以快速访问 github 1、下载搭建 sqlilabs github 找到 sqlilabs 靶场,点击 code,下载 zip解压之后,整体移动到 phpstudy_pro 文件夹…...

【数据结构】Map与Set
前言 前两篇文章我们研究了二叉搜索树与哈希表的结构与特点,他们二者是Map与Set这两个接口实现的底层结构,他们利用了搜索树与哈希表查找效率高这一特点,是一种专门用来进行搜索操作的容器或数据结构。本篇文章就让我们一起来梳理这两个接口的…...

Flamingo: a Visual Language Model for Few-Shot Learning
发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…...
flume性能调优
作者:南墨 1.Source性能调优 1.1 Spooldir Source 使用Spooldir Source采集日志数据时,若每行日志数据<100bp,可以通过将多行合并传输来提升传输性能 建议合并时根据数据长度来确定多少行合并为一个单位进行传输,合并后的长…...
mysql 字符串转数组
在 MySQL 中,可以使用内置的字符串函数 SUBSTRING_INDEX() 和 REPLACE() 来实现将字符串转换为数组。 首先,使用 REPLACE() 函数将字符串中的分隔符替换为空格,然后使用 SUBSTRING_INDEX() 函数将字符串按空格分割成多个子字符串。最后&…...

UE基础 —— 术语
目录 Project Blueprint Class Object Actor Casting Component Pawn Character Player Controller AI Controller Player State Game Mode Game State Brush Volume Level World Project 项目(Project)包含游戏的所有内容,…...

kubernets学习笔记——使用kubeadm构建kubernets集群及排错
使用kubeadm构建kubernets集群 一、准备工作1、repo源配置:阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发,转…...

简述MYSQL聚簇索引、二级索引、索引下推
一丶聚簇索引 InnoDB的索引分为两种: 聚簇索引:一般创建表时的主键就会被mysql作为聚簇索引,如果没有主键则选择非空唯一索引作为聚簇索引,都没有则隐式创建一个索引作为聚簇索引;辅助索引:也就是非聚簇索…...

电脑开机后出现bootmgr is missing原因及解决方法
最近有网友问我为什么我电脑开机后出现bootmgr is missing,这个提示意思是:意思是启动管理器丢失,说明bootmgr损坏或者丢失,系统无法读取到这个必要的启动信息导致无法启动。原因有很多,比如我们采用的是uefi引导,而第…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...