目录
[一. 安装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
下面使用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 质量阀进行详细设置。