CI/CD——CI持续集成实验

news2024/11/16 5:49:57

目录

一. 安装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: root123
  max_idle_conns: 100
  max_open_conns: 900
  conn_max_lifetime: 5m
  conn_max_idle_time: 0
data_volume: /data
trivy:
  ignore_unfixed: false
  skip_update: false
  skip_java_db_update: false
  offline_scan: false
  security_check: vuln
  insecure: false
jobservice:
  max_job_workers: 10
  job_loggers:
    - STD_OUTPUT
    - FILE
  logger_sweeper_duration: 1 #days
notification:
  webhook_job_max_retry: 3
  webhook_job_http_client_timeout: 3 #seconds
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.10.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy
upload_purging:
  enabled: true
  age: 168h
  interval: 24h
  dryrun: false
cache:
  enabled: false
  expire_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/nexus3
    container_name: nexus3
    restart: always
    ports:
      - "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: postgres
    container_name: db
    ports:
      - 15432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar_123
    volumes:
      - /opt/sonarqube/sonar-qube/data:/var/lib/postgresql/data
  sonarqube:
    image: sonarqube:9.9.3-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "19000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar_123
    volumes:
      - ./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 质量阀进行详细设置。

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

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

相关文章

HTTP、HTTPS、SOCKS5 三种协议特点详解

一、引言 在当今数字化的世界中&#xff0c;网络通信协议扮演着至关重要的角色。HTTP、HTTPS 和 SOCKS5 是三种常见的网络协议&#xff0c;它们各自具有独特的特点和应用场景。本文将对这三种协议进行详细的分析和比较&#xff0c;帮助您更好地理解它们在网络通信中的作用。 …

vue2+OpenLayers 天地图上打点并且显示相关的信息(2)

上次是在地图上打点 这次鼠标移动在图标上面显示相关的信息 首先有两个事件 鼠标移入 和 鼠标移出事件 pointermove pointerout 鼠标放上去之前 放上去后 代码如下 <template><div class"container"><div id"vue-openlayers" class&quo…

多模态大语言模型(MMLLM)的现状、发展和潜力

1、大模型 随着ChatGPT流行&#xff0c;大模型技术正逐渐成为AI领域的热点。许多行业大佬纷纷投身于这一赛道&#xff0c;展示了大模型的独特魅力和广阔前景。 王慧文&#xff0c;前美团联合创始人&#xff0c;发起“AI英雄帖”。 李志飞&#xff0c;出门问问创始人&#xff0…

7个Agent组成的公司,7分钟完成了一个游戏的开发

来源丨投资实习所&#xff08;ID&#xff1a;startupboy&#xff09; 作者丨StartupBoy 市场对 AI Agent 的期望一直很高&#xff0c;除了各种单向任务的 Agent 外&#xff0c;之前斯坦福大学和 Google 的一项实验已经展示了由 25 个 AI Agent 自行协同运行的虚拟城镇&#x…

如何使用Zoom API创建一个会议?

一、注册一个免费的Zoom账号&#xff08;zoom.us) 二、在Zoom 应用市场&#xff08;App Marketplace)创建一个server to server 的app&#xff0c;授予创建会议的权限。 三、创建一个Zoom API的服务端程序(node.js) 1、git clone https://github.com/zoom/server-to-server-o…

Unity新输入系统 之 InputActions(输入配置文件)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 首先你应该了解新输入系统的基本单位Unity新输入系统 之 InputAction&#xff08;输入配置文件最基本的单位&#xff0…

Python-调用pymysql库,执行插入语句

今天写了一个mysql的插入方法&#xff0c;传多条数据时报错: TypeError: not enough arguments for format string 解决:后来排查是因为调用方法是&#xff0c;用的cursor.excute()&#xff0c;导致的报错&#xff0c;改为cursor.excutemany()就插入成功了 方法调用: test.ins…

【ARM CoreLink 系列 5.5 -- CI-700 Debug trace and PMU 】

文章目录 Debug trace and PMUCI-700 Debug trace 系统概述DTC DomainDTC Domain 约束条件DTM device portsDTM FIFO BufferDTM FIFO 缓冲区特点Debug trace and PMU 本篇文章主要是介绍 CI-700中实现的 Debug Trace (DT) and Performance Monitoring Unit (PMU). CI-700 Deb…

漏洞复现-Viessmann Vitogate 远程命令执行漏洞(CVE-2023-45852)

1.漏洞描述 Viessmann Vitogate是Viessmann公司的一个智能化控制系统。 Vitogate 300 2.1.3.0版本的/cgi-bin/vitogate.cgi存在一个未经身份验证的攻击者可利用的漏洞&#xff0c;通过put方法中的ipaddr params JSON数据中的shell元字符实现绕过身份验证并执行任意命令。 2.…

c++_1

C 定义头文件 #ifndef __COMPLEX__ // 这样定义头文件&#xff0c;可以解决有些cpp在包含头文件需要的次序要求&#xff1b;也不会有重复的定义头文件 #define __COMPLEX__#endif#pragma once 是 C 预处理器指令&#xff0c;用于防止头文件被多次包含&#xff0c;从而避免头文…

C++解析和构建json(cjson使用手册)

C解析和构建json【cjson使用手册】 一、cjson下载二、cjson工程使用2.1 静态库使用2.1 源码使用&#xff08;推荐&#xff09; 三、cjson详解3.1 解析json字符串3.1.1 解析对象3.1.2 解析数组&#xff1a;方法一&#xff08;获取列表数量然后按照位置获取&#xff09;3.1.2 解析…

从专家角度看:2024年值得关注的项目文档工具

国内外主流的10款项目文档管理软件对比&#xff1a;PingCode、Worktile、禅道、Tower、飞书、Smartsheet、Jira、Notion、Wrike、Basecamp。 在项目管理的世界里&#xff0c;选择一个合适的文档管理工具可能就是成功与否的关键。众多的系统和功能看似琳琅满目&#xff0c;但这也…

无字母数字绕过正则表达式

目录 1、题目代码 1.异或 php部分&#xff1a; python代码&#xff1a; 2.或 php代码 python代码 测试结果&#xff1a; 3、取反 php脚本&#xff1a; 测试结果&#xff1a; 1、题目代码 <?php error_reporting(0); highlight_file(__FILE__); $code$_GET[code…

速度曲线轨迹规划程序优化(封装FC)

1、S型速度曲线点动控制功能块 S型速度曲线点动控制功能块(博途SCL代码)-CSDN博客文章浏览阅读16次。点动功能块只有4个约束条件。https://rxxw-control.blog.csdn.net/article/details/139657487 2、梯形速度曲线绝对值定位功能块 梯形速度曲线绝对值定位功能块(博途SCL代码…

设计模式六大原则之:单一职责原则

1. 单一职责简介 设计模式中的单一职责原则&#xff08;‌Single Responsibility Principle, SRP&#xff09;‌是面向对象设计中的一个基本原则&#xff0c;‌它强调一个类应该仅有一个引起它变化的原因。‌换句话说&#xff0c;‌一个类应该负责一组相对独立且紧密相关的职责…

VisionPro二次开发学习笔记13-使用CogToolBlock进行图像交互

该程序演示了如何使用CogToolBlock进行图像交互. 从vpp文件中加载一个ToolBlock。 用户可以通过应用程序窗体上的数字增减控件修改ToolBlock输入端子的值。 用户还可以从coins.idb或采集FIFO中选择图像。 “运行一次”按钮执行以下操作&#xff1a; 获取下一个图像或读取下一…

数学建模学习笔记

数学建模学习笔记 现学现卖&#xff0c;随缘更新QwQ 主要根据b站大师兄的视频整理而成&#xff0c;有不懂的可以去看原视频 List 数学建模学习笔记一、 层次分析法1.1 矩阵的一致性及其检验1.2 权重计算1.3 具体流程 二、模糊综合评测2.1 隶属函数2.2 隶属函数的确定方法2.3 模…

项目管理中的关键节点——里程碑

里程碑作为项目管理过程中的关键节点&#xff0c;它不仅为项目团队提供了清晰的方向和阶段性目标&#xff0c;还确保了项目能够按照既定的路线稳步前进。 里程碑是项目进程中&#xff0c;那些标志着项目阶段完成或关键决策点的重大事件或时间点。与日常任务或活动不同&#x…

图论(强联通分量)

在图论中&#xff0c;特别是在讨论有向图&#xff08;Directed Graph&#xff09;时&#xff0c;我们常常需要了解图的结构特性&#xff0c;比如强联通分量&#xff08;Strongly Connected Components, SCC&#xff09;。了解强联通分量中的各种边对于理解图的整体结构以及某些…

iPhone官方商店软件下载---免费看各种剧第④弹【iOS版包括iPad】

①点击iPhone自带软件App Store ②点击搜索&#xff0c;输入“模数转换器” &#xff0c;点击下载到手机 ③进入软件页面后&#xff0c;我们需要激活页面&#xff0c;点击“setting”&#xff0c;再点击“feedback” ④在反馈界面输入“小饼干”&#xff0c;点击“Summit”&a…