如何在Jenkins构建Docker容器时引入mysql-connector-11.0.19.jar
将mysql-connector集成到Docker容器的正确做法
通过pom.xml添加Maven依赖是完全正确的方向,比手动拷贝jar包更适合自动化构建场景,下面是具体的落地步骤和注意事项:
1. 确保Maven依赖坐标正确
mysql-connector从8.x版本开始,依赖坐标已经更新,11.0.19版本的正确配置如下:
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>11.0.19</version> <!-- 仅运行时需要的话,加上runtime scope,避免编译阶段依赖 --> <scope>runtime</scope> </dependency>
注意:旧的
mysql:mysql-connector-java坐标已经废弃,必须使用新的com.mysql:mysql-connector-j。
2. 配置Maven打包,确保依赖被包含
光加依赖还不够,必须让Maven打包时把mysql-connector和其他依赖一起打包到最终产物里,否则Docker容器内的应用会找不到驱动:
- 普通Java项目:使用Maven Assembly插件打包成包含所有依赖的可执行jar
在pom.xml的<build>节点下添加插件配置:<plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!-- 替换成你的主类全路径 --> <mainClass>com.yourcompany.yourapp.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>package-with-deps</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> - Spring Boot项目:Spring Boot Maven插件默认会打包成包含所有依赖的Fat Jar,只需确保插件已配置(一般Spring Boot初始化项目时会自动添加),直接执行
mvn package即可。
3. 调整Dockerfile适配自动化构建
放弃手动拷贝jar包的方式,改用多阶段构建减少镜像体积,同时让构建流程完全自动化:
# 第一阶段:用Maven构建项目 FROM maven:3.9.6-eclipse-temurin-17 AS builder WORKDIR /app # 先拷贝pom.xml下载依赖,利用Docker缓存加速后续构建 COPY pom.xml . RUN mvn dependency:go-offline # 拷贝源码并打包 COPY src ./src RUN mvn package -DskipTests # 第二阶段:仅运行项目,用轻量的JRE镜像 FROM eclipse-temurin-17-jre-alpine WORKDIR /app # 从构建阶段拷贝打包好的jar包 COPY --from=builder /app/target/your-app-jar-with-dependencies.jar ./app.jar # 启动命令 ENTRYPOINT ["java", "-jar", "app.jar"]
4. Jenkins构建流程配置
在Jenkinsfile中加入Maven打包和Docker镜像构建的步骤,示例如下:
pipeline { agent any stages { stage('拉取代码') { steps { git url: '你的Git仓库地址', branch: 'main' } } stage('Maven打包') { steps { sh 'mvn clean package -DskipTests' } } stage('构建Docker镜像') { steps { sh 'docker build -t your-app-image:latest .' } } // 可选:推送镜像到私有仓库 stage('推送镜像') { steps { sh 'docker push your-app-image:latest' } } } }
确保Jenkins节点已安装Maven和Docker,或使用预装有这些工具的Jenkins代理镜像。
内容的提问来源于stack exchange,提问作者glee999
相关产品推荐
相关产品推荐

