基于Windows+Docker的单机版测试环境实践。
项目不大,开发周期不长。前期配置好,后续使用整体比较丝滑。

0. 简介

使用SpringBoot3 + JDK17搭建的项目,构建工具使用Gradle 8.0

涉及到的知识点

  • Docker, Dockerfile, Docker-Compose
  • Gitlab
  • Jenkins
  • IDEA (Jenkins Control plugins)

1. Docker

假设Windows环境,Docker已经安装完毕。默认已安装Docker Compose

1.1 Dockerfile

镜像描述文件,比较简单的Java SpringBoot项目

FROM openjdk:17-alpine

WORKDIR /home/app

ADD zhgc-web/build/libs/zhgc-web-*.jar web.jar

EXPOSE 8080

CMD java $JAVA_OPTS -jar "web.jar"

1.2 Docker Compose

使用Docker Compose的目的,主要是服务编排以及资源限制,比单纯的使用Docker方便一些。

也是比较简单的docker-conpose.yml

version: '3'
services:
  zhgc:
    image: zhgc-web:latest
    container_name: zhgc-web
    ports:
      - '18010:8080'
    environment:
      SPRING_PROFILES_ACTIVE: test
      JAVA_OPTS: '-Xmx2g -Xmx2g'
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

image.png

2. Jenkins

想必能看到这篇文章的,对Jenkins都不会陌生。基本的部署、配置就不再叙述。

假设已搭建好环境。官方网站 https://www.jenkins.io/

2.1 推荐插件 Blue Ocean

界面简洁且直观,特别是配合Pipeline

2.2 Jenkins Pipeline

官方文档,已经很详细。可粗读一遍,后续根据需要再细读。https://www.jenkins.io/doc/book/pipeline/

一个相对完整且简单的Pipeline示例

pipeline {
    agent any
    tools {
        // 指定jdk17 这个需要在Jenkins的Tools中的JDK中添加
        jdk 'jdk17'
    }
    stages {
        stage('Build-Project') {
            steps {
                //
                echo 'build'
                bat(
                        label: 'Gradle',
                        script: './gradlew build'
                )
            }
            // reports
            post {
                success {
                    // publish html 发布制品
                    publishHTML target: [
                            allowMissing: false,
                            alwaysLinkToLastBuild: false,
                            keepAll: true,
                            reportDir: 'zhgc-web/build/reports/tests/test',
                            reportFiles: 'index.html',
                            reportName: 'Test Report'
                    ]
                }
            }
        }
        stage('Build-Docker') {
            steps {
                bat(
                        label: 'Docker',
                        script: 'docker build -t zhgc-web:latest .'
                )
            }
        }
        stage('Deploy') {
            steps {
                bat(
                        label: 'Deploy docker-compose',
                        script: 'docker-compose up -d'
                )
            }
        }
    }
    // 推送 测试文档
    post {
        always {
            junit 'zhgc-web/build/test-results/**/*.xml'
        }
    }
}

image.png

2.3 参数化构建

文档地址: https://www.jenkins.io/doc/book/pipeline/syntax/#parameters-e...

parameters {
    choice(name: 'APPS', choices: ['all', 'agent', 'taskcenter'])
}

使用stage配合when来决定是否走某个构建步骤

image.png

3 IDEA 安装Jenkins插件

测试发现,密码只能使用API-TOKEN

Crumb Data的获取地址为:http://xxx.xx/crumbIssuer/api/xml?tree=crumb 返回数据为

<defaultCrumbIssuer _class='hudson.security.csrf.DefaultCrumbIssuer'>
    <crumb>6cc4228225e28cd67807a3982381ca1efda341672db606c1ca6d29da67f117d3</crumb>
</defaultCrumbIssuer>

其实这块,还可以使用Gitlab和Jenkins配合WebHook,通过主动推送代码时按规则触发自动构建。

image.png


lpe234
4.1k 声望2k 粉丝

路漫漫其修远兮