3.6-使用Jenkins、gitlab、sonar、testNG实现maven项目的自动化构建部署

使用Jenkins、gitlab、sonar、testNG实现maven项目的自动化构建部署

回到第一章:目录



1、系统配置

自动化部署预期效果:开发人员提交代码后,jenkins全自动完成:编译,单测,报告收集、代码扫描,部署。

1、开发人员提交到master分支。
2、等待jenkins自动部署…
3、访问应用服务器地址,检查新代码部署成功。

本机物理机:192.168.119.1
系统:win10 64位
部署服务:sonarqube服务、Jenkins服务
用到的程序:jdk1.8、Git window客户端、sonar-scanner windows扫描器、maven

虚拟机:192.168.119.133
系统:centos 7
部署服务:gitlab服务

虚拟机:192.168.119.134
系统:centos 7
部署服务:待部署demo应用

待部署应用工程代码:
链接:https://pan.baidu.com/s/1eF6tv6BPssmxwL-I4r2GBQ
提取码:qqkt

2、工程代码提交到gitlab上

将本机的devopsplay工程代码提交到部署gitlab服务的虚拟机上192.168.119.133。
在这里插入图片描述
工程代码pom文件配置

<?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>

    <groupId>com.zhc</groupId>
    <artifactId>DevopsPlay</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBoot热部署配置 -->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.play.devops.MainApp</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.8</version>
                <configuration>
                    <!--指定生成 .exec 文件的存放位置-->
                    <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
                    <!--Jacoco 是根据 .exec 文件生成最终的报告,所以需指定 .exec 的存放路径-->
                    <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
                </configuration>
                <executions>
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

3、进入jenkins,配置任务

新建一个任务:devopsPlay_maven
配置如下:
在这里插入图片描述
填上项目在gitlab上的clone地址,配置好gitlab的账号。
在这里插入图片描述
配置任务触发规则:H/3 * * * *
意思是每3分钟触发一次检查,如果gitlab上对应分支(上面配的master)有新代码提交,则立即构建。
在这里插入图片描述
在这里插入图片描述
指定maven的pom文件,执行mvn clean package命令
在这里插入图片描述
配置sonarqube扫描
Analysis properties的全部内容为(若scanner的配置文件里配过myslq数据库,下面的mysql配置信息可删除):

#项目的key
sonar.projectKey=devopsplay_jenkins   
#项目的名字(可以随便写,这个名字在sonar显示的)
sonar.projectName=devopsplay-test
#项目的版本
sonar.projectVersion=1.0-SNAPSHOT
#需要分析的源码的目录
sonar.sources=src/
#指定class文件所在的目录(如果没编译可以不写)
sonar.java.binaries=target/classes
#java语言
sonar.language=java
sonar.jdbc.username=root
sonar.jdbc.password=MySql@0004
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#下面的这两个参数作用是相同的,因为有时我们需要指定某个文件夹或者忽略某个文件夹
#sonar.inclusions=src1/**,src3/**
sonar.exclusions=src/main/resources/public/**
#源码编码,默认是系统编码
sonar.sourceEncoding=UTF-8
#Set jacoco Configuration
#指定代码覆盖率工具
sonar.core.codeCoveragePlugin=jacoco
#指定exec二进制文件存放路径
sonar.jacoco.reportPaths=target/coverage-reports/jacoco-unit.exec

在这里插入图片描述
配置jacoco单测报告,默认即可。
在这里插入图片描述
配置部署命令,将打好的jar包,上传到应用服务器(这里是192.168.119.134)上,并执行部署动作。
Exec command的全部内容是:

cd /home/devopsPlay
kill -9 $(lsof -i:9001 -t)
mv ./new/DevopsPlay-1.0-SNAPSHOT.jar DevopsPlay-1.0-SNAPSHOT.jar 
nohup /usr/local/java/bin/java -jar "/home/devopsPlay/DevopsPlay-1.0-SNAPSHOT.jar"> "/home/devopsPlay/log.txt" 2>&1 &

在这里插入图片描述

4、测试

当前应用版本:1.7
在这里插入图片描述
修改版本号为1.8并提交到代码到gitlab上
在这里插入图片描述
在这里插入图片描述
观察jenkins上的任务,已经开始自动构建部署了:
在这里插入图片描述
部署结果、jenkins里看单测报告:
在这里插入图片描述

sonarqube里看代码扫描报告:
在这里插入图片描述

访问应用,验证效果:
可见应用已经成功更新了。
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值