自动化部署jsj项目全流程

基于devops [gitlab - - drone - - sonarqube - - harbor - - rancher] 除gitlab以外,全套ci-cd流程采用容器化部署

容器化工具部署全流程参见 https://blog.csdn.net/amertion/article/details/107354562

.drone.yml文件

kind: pipeline
name: devops-jsj
    
# 代码编译
steps:
- name: build
  image: maven:3-jdk-10
  commands:
    - mvn clean package   # 清洁打包 因为java项目需要编译后才能进行代码扫描
# 代码扫描
- name: analysise
  image: aosapps/drone-sonar-plugin:1.0  # 代码扫描插件
  settings:
    sonar_host: http://sonarqube服务器ip:host
    sonar_token: sonarqube生成的密钥
 # 定制镜像
 - name: structure
   image: plugins/docker
   settings:
     dockerfile: dockerfile路径
     registry: harbor_server_ip
     repo: harbor_server_ip/项目名称/镜像名称
     username: harbor账号
     password: harbor密码
     tags:
       - 'latest'
     insecure: true 
   volumes:
   - name: docker
     path: /var/run/docker.sock
 # 启动容器
 - name: rancher-deploy
   image: pelotech/drone-rancher  # drone-rancher插件,利用此插件来启动rancher
   settings:
     url: 'rancher-server:port'
     access_key: rancher密钥api name
     secret_key: rancher密钥api key
     service: 容器升级环境
     docker_image: 192.168.2.***/java/springboot-jsj-test:latest # 镜像地址及版本号
     start_first: false
     confirm: true
     timeout: 305
     when:
       branch: master
 volumes:
 - name: docker
   host:
     path: /var/run/docker.sock

定制镜像

Dockerfile.txt

FROM maven:3-jdk-10 AS MAVEN_BUILD  ## 告知docker采用maven编译器,构建第一步采用基础镜像Docker将首先在本地查找镜像,本地不存在后,将从DockerHub拉取。 Maven会在最后阶段被剔除掉
MAINTAINER xichuan.lin  ## 镜像定制者信息
COPY pom.xml /build/ ## 在镜像中创建一个build目录,并拷入pom.xml文件
COPY src /build/src/ ## 拷入src目录到镜像中build目录
WORKDIR /build/  ## 设置build为工作目录,后续任何命令都在此目录中运行
RUN mvn package ##执行mvn包来运行编译和打包应用,生成成可执行的JAR文件。在第一次构建镜像时,Maven将从公共Maven库拉取所有需要的依赖项,并将它们缓存在镜像的本地。后续的构建将使用这个缓存版的镜像层,这意味着依赖项将在本地引用,而不必再次从外部拉取。至此,已经完成了镜像定义,只需等其构建成一个可执行的JAR文件。这是多阶段构建的第一部分。下一阶段将获取JAR并运行它。
FROM openjdk:8-jre-alpine  ##告知Docker多阶段构建的下一步采用openjdk:8-jre-alpine的基础镜像。再次使用Java 8 JRE的Alpine版本,这一步的选择其实比前面的Maven版本选择更为重要,因为存在于最终版的镜像只是openjdk:8-jre-alpine,因此如果要尽可能控制最终镜像大小的话,选择轻量级JRE镜像就非常重要。
COPY --from=MAVEN_BUILD /build/target/jsj-test.jar /app/  ##告知Docker从MAVEN_BUILD阶段的/build/target目录复制jsj-test.jar到/app目录。至于jar包的名字,这个在pom.xml中配置
EXPOSE 8090  ## 打开8090端口监听容器
ENTRYPOINT ["java","-jar","jsj-test.jar"]  ##告知Docker在容器运行本镜像时,运行哪些命令。本部分用冒号进行多命令的隔离。本案例中,需要把执行JAR文件复制到/app目录运行。

pom.xml文件配置改动

1. 添加阿里镜像源
<repositories>
                <repository>
                        <id>aliyun</id>
                        <name>aliyun</name>
                        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                </repository>
</repositories>

2. 配置jar包name
<build>
	<finalName>jsj-test</finalName>
</build>

3.取消maven编译过程中的测试
在build下添加:
 			<plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <configuration>
                               <skip>true</skip>
                     </configuration>
              </plugin>


配置mqtt 服务器

docker-compose.yml

version: '3'

services:
  emq:
    image: emqx/emqx
    container_name: emqx
    ports:
      - "18083:18083"
      - "1883:1883"
      - "8084:8084"
      - "8883:8883"
      - "8083:8083"

项目结构

work
  springboot-jsj-test
    .drone.yml
    Dockerfile.txt
    pom.xml
    src/

更多推荐