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

目录

[一. 安装Docker](#一. 安装Docker)

[二. 部署Jenkins](#二. 部署Jenkins)

[三. 配置邮箱](#三. 配置邮箱)

[四. Harbor部署](#四. Harbor部署)

[五. Nexus Repository部署](#五. Nexus Repository部署)

[五. sonarqube安装](#五. sonarqube安装)

[六. 配置Docker](#六. 配置Docker)

[七. jenkins系统配置sonarqube](#七. jenkins系统配置sonarqube)

[八. 配置pipeline](#八. 配置pipeline)

[九. 构建并集成](#九. 构建并集成)


一. 安装Docker

docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站

bash 复制代码
# 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

配置加速器

bash 复制代码
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

拉取所需要镜像

bash 复制代码
[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博客

bash 复制代码
[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的分享

所需插件已经打包好:

bash 复制代码
[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)) 
bash 复制代码
# 查看初始化密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
c7cdf3cd065f465ca2cd1f4f5cc29f69

输入账户密码登录后页面见下图即完成

三. 配置邮箱

添加邮箱凭据

bash 复制代码
邮箱全局凭据类型:Username with password
用户名 : 对应你的真实邮箱名
密码 : 你邮箱的授权码
ID(这个用固定的) :jenkins_mail

系统配置

四. Harbor部署

下载地址:https://github.com/goharbor/harbor/releases/tag/v2.10.3

上传虚拟机,这里我已经改好了

bash 复制代码
[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
bash 复制代码
# 执行安装
[root@jenkins harbor]# ./install.sh

浏览器访问IP即可,例如我这里就访问http://192.168.226.29/

如果配置文件中自己没有修改,默认用户名:admin 默认密码:Harbor12345

在jenkins中添加全局凭据

bash 复制代码
全局凭据类型: Username with password
用户名(默认就用初始化的admin):admin
密码(这里就是admin用户密码) : Harbor12345
ID(这里就固定用和我一样的 :jenkins-docker

五. Nexus Repository部署

bash 复制代码
[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
bash 复制代码
# 启动
[root@jenkins nexus]# docker compose up -d

浏览器访问IP+8081端口 。例如我这里访问:http://192.168.226.29:8081/

bash 复制代码
# 在容器查看初始密码
[root@jenkins ~]# docker exec -it nexus3 cat /nexus-data/admin.password
33551d8e-36c6-4b35-a87e-9f7518d48b90

创建后端仓库

创建前端仓库

在jenkins全局配置中添加Nexus的凭据

bash 复制代码
全局凭据类型: Username with password
用户名(默认就用初始化的admin):admin
密码(这里就是admin用户密码) : lzz2578+
ID(这里就固定用和我一样的 :jenkins_nexus

五. sonarqube安装

bash 复制代码
[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的分享

bash 复制代码
[root@jenkins sonarqube]# ls
docker-compose.yml  sonar-l10n-zh-plugin-9.9.jar
bash 复制代码
[root@jenkins sonarqube]# vim /etc/security/limits.conf   #文件最后加入下述配置
* soft nofile 131072
* hard nofile 131072
* soft nproc 10240
* hard nproc 10240
bash 复制代码
[root@jenkins sonarqube]# vim /etc/sysctl.conf   # 在文件最后加入下述配置
vm.max_map_count=524288
fs.file-max=131072
bash 复制代码
[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
bash 复制代码
[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的凭据

bash 复制代码
全局凭据类型选择 :Secret text
Secret(在sonarqube生成的令牌):sqa_c7943cdcc1631859eb1b21ed7bdfa6508b699f3e
ID  : sonarqube-token-id
描述:随便写,标识作用  

配置sonarqube-webhook凭据

来到jenkins的全局凭据配置里添加上

这里我用一个自己的gitee仓库获取ruoyi-vue的项目练习

六. 配置Docker

设置harbor仓库添加入不安全的设置中

bash 复制代码
[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在不重启服务的情况下重新加载配置

bash 复制代码
[root@jenkins ~]# systemctl reload docker
[root@jenkins ~]# kill -SIGHUP $(pidof dockerd)

七. jenkins系统配置sonarqube

八. 配置pipeline

先下载git工具

bash 复制代码
[root@jenkins ~]# yum install -y git

修改代码,来到gitee

修改代码中的IP为你的IP

将代码中的接收邮箱改为你的邮箱进行实验

提交更改

九. 构建并集成

第一次点构建一般会失败

等失败后排查问题,然后再点击构建时,如果推送到制品库了就需要修改一下版本号和项目唯一标识符,默认从3.80开始,每构建一次,修改一次版本号,避免推送冲突。

可看构建状态

遇到报错,请仔细检查前面的步骤是否不经意间搞错和漏掉。

遇下图则是完成了整个CI/CD中的CI(持续集成)流程。

现在去制品库查看打包好的文件是否储存了

去Harbor镜像仓库查看是否正确存储

查看邮箱邮件

查看代码检查服务

会存在一定的代码BUG,但是都是不影响整体和可以承受的范围内的,如果想让代码检查严格,可以通过 SonarQube 质量阀进行详细设置。

相关推荐
内核程序员kevin3 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
朝九晚五ฺ7 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream7 小时前
Linux的桌面
linux
xiaozhiwise8 小时前
Makefile 之 自动化变量
linux
意疏10 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
BLEACH-heiqiyihu10 小时前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器
一只爱撸猫的程序猿10 小时前
一个简单的Linux 服务器性能优化案例
linux·mysql·nginx
我的K840911 小时前
Flink整合Hudi及使用
linux·服务器·flink
19004312 小时前
linux6:常见命令介绍
linux·运维·服务器