DevOps部署2¶
一. CI/CD入门操作¶
基于Jenkins拉取GitLab的SpringBoot代码进行构建并发布到测试环境实现持续集成
基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD持续部署
1. 持续集成¶
为了让程序代码可以自动推送到测试环境基于Docker服务运行,需要添加DOkcer配置和脚本文件让程序可以在集成到主干的同时运行起来
在1上:
1) 添加Dockerfile文件¶
mkdir /root/mytest-hello程序代码/mytest-hello/docker
cd /root/mytest-hello程序代码/mytest-hello/docker
vi Dockerfile
FROM daocloud.io/library/java:8u40-jdk
# 指定基础镜像,可以到国内镜像源hub.daocloud.io搜索一个java镜像
COPY demo.jar /usr/local/
WORKDIR /usr/local
CMD java -jar demo.jar
version: "3.1"
services:
demo:
build:
context: ./
dockerfile: Dockerfile
image: demo:v1.0.0
container_name: demo
ports:
- 8888:8080
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<groupId>com.bdqn</groupId>
<artifactId>mytest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们在这个 pom.xml 文件中加入的部分是 <build></build> 块,其中最重要的部分是 <finalName>demo</finalName> 。添加这一块,可以指定jar包。
2) 推动到gitlab上¶
此时我们就可以在gitlab上查看了
顺便如果镜像拉取不下来,可以从本地的镜像文件中拷贝过去
scp /root/DevOps/2026_08_24_GitOps/daocloud_library_java_jdk8u40.tar root@192.168.100.101:/root/
ssh root@192.168.100.101 "docker load -i /root/daocloud_library_java_jdk8u40.tar"

3) 追加Jenkins构建后操作脚本命令¶

4) 发布到GitLab后由Jenkins立即构建并推送到目标服务器¶
配置好后单击"立即构建",然后等待构建完毕

5) 测试部署到目标服务器程序¶
在3上
[root@K8s3 test]# ls /usr/local/test/docker
demo.jar docker-compose.yaml Dockerfile
[root@K8s3 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
322ad859b883 demo:v1.0.0 "/bin/sh -c 'java -j…" 38 seconds ago Up 37 seconds 0.0.0.0:8888->8080/tcp, [::]:8888->8000/tcp demo

2. 持续交付,部署¶
程序代码在经历多次集成操作达到最终可以交付,持续交付整体流程和持续集成类似。不过需要选取指定发行版本
1) 下载Git Parameter插件¶

2) 设置项目参数化构建¶


3) 给项目打上tag版本¶


4) 再次构建任务的时候,设置采用shell方式,拉取指定tag版本代码¶

5) 更新java项目内容¶
a. 修改文件
vi /root/mytest-hello程序代码/mytest-hello/src/main/java/com/bdqn/controller/HelloController.java
vi /root/mytest-hello程序代码/mytest-hello/docker/docker-compose.yaml
package com.bdqn.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Administrator
* @version 1.0
* @description TODO
* @date 2023/11/17 11:27
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String sayHello(){
return "hello jenkins --v2.0.0";
/* 把hello jenkins改成hello jenkins --v2.0.0 */
}
version: "3.1"
services:
demo:
build:
context: ./
dockerfile: Dockerfile
image: demo:v2.0.0
container_name: demo
ports:
- 8888:8080
~
b. 推送到gitlab
c. 在gitlab上查看验证,并新增新的tag




6) 基于Parameter构建任务并将任务发布到目标服务器¶


二. 集成Sonar Qube¶
1. Sonar Qube介绍¶
开发工程师开发代码一般都会自测,那么有时候也需要借助一些工具来辅助我们检测代码的健壮性,即代码质量。其中 Sonar Qube 这个软件很多公司都在使用,集成到自动构建的流水线中,下面我来介绍这款软件的基本使用
Sonar Qube 简称 Sonar ,是一个开源代码分析平台,支持 Java、Python、PHP、JavaScript、CSS 等17种语言,可以检测出重复的代码、代码漏洞、代码规范和安全性漏洞问题
Sonar Qube 可以与多种软件整合代码扫描,比如Maven、Gradle、Git、Jenkins等,并且会将代码检测的结果推送回 Sonar Cube 并且在系统提供的UI界面上显示出来
2. Sonar Qube 环境搭建¶
1) Sonar Qube 安装¶
Sonar Qube 在7.9版本种已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装 Sonar Qube 时需要依赖 PostgreSQL
Sonar Qube 官网地址: (https://www.sonarsource.com/products/sonarqube/)
a. 在2上拉取镜像
或者导入本地镜像
[root@K8s2 ~]# docker load -i /root/sonarqube.tar
Loaded image: sonarqube:8.9.8-community
[root@K8s2 ~]# docker load -i /root/postgres.tar
Loaded image: postgres:latest
2) 在 sonarqube_docker 目录中编写 docker-compose.yaml¶
先创建目录
mkdir -p /usr/local/docker/sonarqube_docker
vi /usr/local/docker/sonarqube_docker/docker-compose.yaml
version: "3.1"
services:
db:
image: postgres
container_name: db
ports:
- "5432:5432"
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.8-community
container_name: sonarqube
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
environment:
SONARQUBE_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
3) 启动容器¶
[root@K8s2 ~]# docker compose -f /usr/local/docker/sonarqube_docker/docker-compose.yaml up -d
WARN[0000] /usr/local/docker/sonarqube_docker/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] up 3/3
✔ Network sonarqube_docker_sonarnet Created 0.1s
✔ Container db Started 0.7s
✔ Container sonarqube Started 1.0s
4) 如果启动失败,则需要设置 sysctl.conf 文件信息¶
a. 查看容器日志
[root@K8s2 ~]# cd /usr/local/docker/sonarqube_docker
[root@K8s2 sonarqube_docker]# docker compose logs -f sonarqube
WARN[0000] /usr/local/docker/sonarqube_docker/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
...
sonarqube | ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
sonarqube | bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sonarqube | ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
sonarqube | 2026.08.31 02:24:02 INFO es[][o.e.n.Node] stopping ...
sonarqube | 2026.08.31 02:24:02 INFO es[][o.e.n.Node] stopped
sonarqube | 2026.08.31 02:24:02 INFO es[][o.e.n.Node] closing ...
sonarqube | 2026.08.31 02:24:02 INFO es[][o.e.n.Node] closed
sonarqube | 2026.08.31 02:24:02 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
sonarqube | 2026.08.31 02:24:02 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
sonarqube | 2026.08.31 02:24:02 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
b. 修改susctl.conf文件信息
然后重启
[root@K8s2 sonarqube_docker]# docker compose -f /usr/local/docker/sonarqube_docker/docker-compose.yaml up -d
WARN[0000] /usr/local/docker/sonarqube_docker/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] up 2/2
✔ Container db Running 0.0s
✔ Container sonarqube Started 0.3s
5) 配置 Sonar Qube 中文¶
a. 成功启动后,在浏览器中输入http://192.168.100.100:9000访问 Sonar Qube 首页

b. 输入密码后我们需要重新设置密码

c. 重新设置密码后我们就可以进入 Sonar Qube 首页了

d. 先在插件市场安装插件中文包

先点击明白风险,然后右侧出现安装按钮开始安装
或者如果安装失败可以从本地导入
# 在宿主机建一个插件目录,把 jar 放进去:
mkdir -p /usr/local/docker/sonarqube_docker/plugins
cp /root/sonar-l10n-zh-plugin-8.9.jar /usr/local/docker/sonarqube_docker/plugins/
# 然后修改docker-compose.yaml,给 sonarqube 服务加一个 volumes 挂载:
vi /usr/local/docker/sonarqube_docker/docker-compose.yaml
# 修改文件后重建容器让挂载生效
docker compose -f /usr/local/docker/sonarqube_docker/docker-compose.yaml up -d
version: "3.1"
services:
db:
image: postgres
container_name: db
ports:
- "5432:5432"
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.8-community
container_name: sonarqube
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
volumes:
- ./plugins:/opt/sonarqube/extensions/plugins # 挂载插件目录
environment:
SONARQUBE_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
重新登录后就会发现有中文了

3. Sonar Qube 基本使用¶
Sonar Qube的使用方法很多。Maven可以整合,也可以使用 sonar-scanner 的方式,再查看 Sonar Qube 的检测效果
1) Maven实现代码检测¶
找到<id>sonar</id>的块,并替换为如下
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>2016.Com</sonar.password>
<sonar.host.url>http://192.168.100.100:9000</sonar.host.url>
</properties>
<profile>
2) Sonar-scanner实现代码检测¶
a. 在Jenkins中下载Sonar-scanner插件,或者从网上下载然后导入
这里我们采用第二种方法,github上地址为: 下载Sonar-scanner:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.0.1.6346-linux-x64.zip
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-8.0.1.6346-linux-x64.zip
b. 解压并移动
unzip sonar-scanner-cli-8.0.1.6346-linux-x64.zip
mv sonar-scanner-8.0.1.6346-linux-x64 /usr/local/docker/jenkins_docker/data/sonar-scanner
c. 修改配置文件
将以下这段加进去
d. 修改Jenkis
Jenkins中把构建步骤中改成clean package -DskipTests sonar:sonar

e. Jenkins配置 Sonar Qube