一 CD、CI 入门操作

基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成

基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署

1.1 持续集成

为了让程序代码可以推送到测试环境基于Docker服务运行,需要添加Docker配置和脚本文件让程序可以在集成到主干的同时运行起来。

  • 添加Dockerfile文件

    构建自定义镜像
    在这里插入图片描述
FROM openjdk:11
COPY jenkinsproject-1.0.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar jenkinsproject-1.0.jar
  • 添加docker-compose.yml文件

    加载自定义镜像启动容器
    在这里插入图片描述
version: '3.1'
services:
  jenkinsproject:
    build: ./
    image: jenkinsproject-1.0.jar:v1.0.0
    container_name: jenkinsproject
    ports:
      - 8888:8080
  • 追加Jenkins构建后操作脚本命令

    构建后发布并执行脚本命令
    在这里插入图片描述
cp -f /usr/package/docker/*  /usr/package/target
cd /usr/package/target
docker-compose down
docker-compose up -d --build
docker image prune -f

上边命令解释

# 复制docker文件夹里所有内容到target目录下,文件有同名的话进行替换
cp -f /usr/package/docker/*  /usr/package/target
# 进入到target文件夹里
cd /usr/package/target
# 停止并删除运行中的Compose应用。它会删除容器和网络,但是不会删除卷和镜像。
docker-compose down
# 启动已定义在docker-compose.yml文件中的服务容器,并以守护进程的方式在后台运行。
docker-compose up -d --build
# 用于删除所有悬空的镜像(即不再有任何标签指向它们)。-f 或 --force 参数用于强制删除,不会进行确认提示
docker image prune -f

因为我们在SpringBoot项目里新建了docker文件夹,需要把这个文件夹也传到目标服务器里(之前只传了jar包过去)

在这里插入图片描述

target/*.jar docker/**

这里默认超时时间是120000,即两分钟。我们改成300000,即五分钟。

开始构建

在这里插入图片描述

找到目标服务器,查看是否有镜像以及容器是否启动

在这里插入图片描述

浏览器访问项目

在这里插入图片描述

此时,我们修改代码,把上边的hello word改为hello word2,然后提交代码

在这里插入图片描述

再次编译

在这里插入图片描述

稍等片刻后,访问浏览器,可以看到生效了

在这里插入图片描述

查看目标服务器里的镜像与容器,发现也是刚新生成的

在这里插入图片描述

1.2 持续交付、部署

程序代码在经过多次集成操作到达最终可以交付,持续交付整体流程和持续集成类似,不过需要选取指定的发行版本

  • 下载Git Parameter插件

    下载Git Parameter
    在这里插入图片描述

在这里插入图片描述

  • 设置项目参数化构建

    基于Git标签构建
    在这里插入图片描述

选择git参数

在这里插入图片描述

在这里插入图片描述

千万记得改下边这里,不然每次拉取的都试最新的代码,而不是指定tag版本的代码(release就是上边的标识,二者一致)

在这里插入图片描述

  • 给项目添加tag版本

    添加tag版本
    在这里插入图片描述

填写信息

在这里插入图片描述

  • 任务构建时,采用Shell方式构建,拉取指定tag版本代码

    切换指定标签并构建项目
    在这里插入图片描述

在这里插入图片描述

#!/bin/bash
cd /var/lib/jenkins/workspace/task2/
git checkout $release
/usr/local/maven/bin/mvn package
  • 基于Parameter构建任务,任务发布到目标服务器(点击左侧“Build with Parameters”)

    构建任务
    在这里插入图片描述

注意,需要选中上边对应的版本号。不选的话,编译的是最新的代码,之后点击上边的Build,开始构建

在这里插入图片描述

我们在gitlab里给不同的版本代码打tag标签,并且下边这里选择 “分支或标签”

在这里插入图片描述

此时,编译时就可以选择分支或tag标签来进行部署打包了

在这里插入图片描述

上边不选分支或者tag的话,部署的就是master分支最新版本代码。

二 集成Sonar Qube

2.1 Sonar Qube介绍

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来

Sonar Qube的UI界面
在这里插入图片描述

2.2 Sonar Qube环境搭建

2.2.1 Sonar Qube安装

由于国内拉取最新版本Sonar Qube镜像一直失败,导致只能安装较低版本,所以大家可以尝试在centos里安装最新版本的Sonar Qube,步骤如下:centos7.9安装SonarQube10.5.1

Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。

并且这里会安装Sonar Qube的最新版

  • 拉取镜像
  docker pull postgres:latest
  # 实测发现,sonarqube:latest实际拉取的是低版本的,这里可以指定具体版本,如:docker pull sonarqube:10.6-community
  docker pull sonarqube:latest
  • 编写docker-compose.yml

    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:latest
        container_name: sonarqube
        depends_on:
          - db
        ports:
          - "9000:9000"
        networks:
          - sonarnet
        environment:
          SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
          SONAR_JDBC_USERNAME: sonar
          SONAR_JDBC_PASSWORD: sonar
    networks:
      sonarnet:
        driver: bridge
    
  • 需要设置sysctl.conf文件信息,vm.max_map_count ,否则启动时报错如下

在这里插入图片描述

设置sysctl.conf:

vim /etc/sysctl.conf
在这里插入图片描述

# 添加一行内容
vm.max_map_count=262144

并执行命令刷新

sysctl -p
  • 启动容器

    docker-compose up -d
    
  • 启动需要一定时间启动,可以可以查看容器日志,看到如下内容代表启动成功

    容器日志
    在这里插入图片描述
  • 访问Sonar Qube首页:192.168.119.132:9000

    登录
    在这里插入图片描述
  • 还需要重新设置一次密码

    重新设置密码
    在这里插入图片描述
  • Sonar Qube首页

    Sonar Qube首页
    在这里插入图片描述

|

2.2.2 安装中文插件

安装中文插件
在这里插入图片描述

安装成功后需要重启,安装失败重新点击install重装即可。

安装成功后,会查看到重启按钮,点击即可

重启按钮
在这里插入图片描述

重启后查看效果

首页效果
在这里插入图片描述

2.3 Sonar Qube基本使用

Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果

2.3.1 Maven实现代码检测

  • 本地项目,修改Maven的settings.xml文件配置Sonar Qube信息

    
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <sonar.login>admin</sonar.login>
            <sonar.password>123456789</sonar.password>
            <sonar.host.url>http://192.168.119.132:9000</sonar.host.url>
        </properties>
    </profile>
    

注意:Sonar Qube使用的jdk版本,与本地项目使用的jdk版本要一致,而且不能太低,我这里部署的Sonar Qube是10.5.1,使用的jdk是17

  • 在代码位置执行命令(cd /var/lib/jenkins/workspace/task2/target):mvn sonar:sonar

    执行代码检测
    在这里插入图片描述

或者idea里直接执行
在这里插入图片描述

最后:最下边的报错不用管,是日志问题,感兴趣的同学可以尝试解决一下
在这里插入图片描述

  • 查看Sonar Qube界面检测结果

    Sonar Qube检测结果
    在这里插入图片描述

2.3.2 Sonar-scanner实现代码检测

  • 下载Sonar-scanner:https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/

    下载要求Linux版本,这里下载6.0版本
    在这里插入图片描述

如果是centos安装的jenkins的话(非docker安装),就把Sonar-scanner上传到与jenkins同一台服务器上

  • 解压并配置sonar服务端信息

    • 由于是zip压缩包,需要安装unzip解压插件

      yum -y install unzip
      
    • 解压压缩包

 unzip sonar-scanner-cli-6.0.2311-linux.zip
 # 改下名字
 mv sonar-scanner-6.0.0.4432-linux sonar-scanner-cli
  • 配置sonarQube服务端地址,修改conf下的sonar-scanner.properties

    配置服务端信息
    在这里插入图片描述
cd /root/sonar-scanner-cli/conf
vim  sonar-scanner.properties
# 添加如下内容
sonar.host.url=http://192.168.119.132:9000
sonar.sourceEncoding=UTF-8
  • 执行命令检测代码
 # 在项目所在目录执行以下命令 
 cd /var/lib/jenkins/workspace/task2
# 注意,后边的 -D"sonar.login=admin" -D"sonar.password=123456",里边的admin和123456是你自己sonar服务器的登录用户名和密码
~/sonar-scanner-cli/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=jenkinsproject-1.0 -Dsonar.projectKey=java -Dsonar.java.binaries=target/ -D"sonar.login=admin" -D"sonar.password=123456"

一直报错找不到node环境

在这里插入图片描述

那我们安装node环境

Ps:主要查看我的sonar-scanner执行命令的位置

查看日志信息
在这里插入图片描述

报错如下:ERROR Re-run SonarScanner CLI using the -X switch to enable full debug logging

在这里插入图片描述

curl --insecure -v https://192.168.119.132:9000/api/v2/analysis/version

  • 查看SonarQube界面检测结果

    检测结果
    在这里插入图片描述

2.4 Jenkins集成Sonar Qube

Jenkins继承Sonar Qube实现代码扫描需要先下载整合插件

2.4.1 Jenkins安装插件

下载Sonar Qube插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4.2 Jenkins配置Sonar Qube

  • 开启Sonar Qube权限验证

    开启Sonar Qube权限校验
    在这里插入图片描述
  • 获取Sonar Qube的令牌

    获取令牌
    在这里插入图片描述
  • 配置Jenkins的Sonar Qube信息

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

2.4.3 配置Sonar-scanner

  • 将Sonar-scaner添加到Jenkins数据卷中并配置全局配置

    配置Sonar-scanner
    在这里插入图片描述
  • 配置任务的Sonar-scanner

    配置任务的Sonar-scanner
    在这里插入图片描述

2.4.4 构建任务

构建任务
在这里插入图片描述
在这里插入图片描述
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐