当前位置: 首页 > news >正文

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 质量阀进行详细设置。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决No module named ‘tensorflow‘
  • linux共有云主机ssh升级(以openEuler22.03为例)
  • 高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模式?
  • Web Vitals:提升用户体验的关键指标
  • VR虚拟展厅与传统实体展厅相比,有哪些优势?
  • PostgreSQL 练习 ---- psql 新增连接参数
  • SpringBoot中整合Mybatis
  • 自定义实现一个 Redis 客户端
  • coze 卡片使用
  • 基于k8s集群的redis-cluster集群
  • 计算机,人工智能选题
  • 自动驾驶大模型算法助力端到端顺利落地
  • Δ-Σ ADC选型时噪声性能实例详解
  • Java元组Tuple的使用
  • Qt 哈希加密之 QCryptographicHash
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • angular2开源库收集
  • C++入门教程(10):for 语句
  • canvas绘制圆角头像
  • CSS3 变换
  • css选择器
  • js继承的实现方法
  • PHP面试之三:MySQL数据库
  • Spring-boot 启动时碰到的错误
  • Spring核心 Bean的高级装配
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 聚类分析——Kmeans
  • 跨域
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 聊聊directory traversal attack
  • 前端相关框架总和
  • 设计模式 开闭原则
  • 实习面试笔记
  • 我的zsh配置, 2019最新方案
  • 自定义函数
  • kubernetes资源对象--ingress
  • # Maven错误Error executing Maven
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)SpringCloud 整合Python
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (理论篇)httpmoudle和httphandler一览
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)Google的Objective-C编码规范
  • (转)linux 命令大全
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net 程序发生了一个不可捕获的异常