基于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
2. Jenkins
想必能看到这篇文章的,对Jenkins
都不会陌生。基本的部署、配置就不再叙述。
假设已搭建好环境。官方网站 www.jenkins.io/
2.1 推荐插件 Blue Ocean
界面简洁且直观,特别是配合Pipeline
。
2.2 Jenkins Pipeline
官方文档,已经很详细。可粗读一遍,后续根据需要再细读。www.jenkins.io/doc/book/pi…
一个相对完整且简单的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'
}
}
}
2.3 参数化构建
文档地址: www.jenkins.io/doc/book/pi…
parameters {
choice(name: 'APPS', choices: ['all', 'agent', 'taskcenter'])
}
使用stage
配合when
来决定是否走某个构建步骤
3 IDEA 安装Jenkins插件
测试发现,密码只能使用API-TOKEN
。
Crumb Data
的获取地址为:http://xxx.xx/crumbIssuer/api/xml?tree=crumb
返回数据为
6cc4228225e28cd67807a3982381ca1efda341672db606c1ca6d29da67f117d3
其实这块,还可以使用Gitlab和Jenkins配合WebHook,通过主动推送代码时按规则触发自动构建。