如何从POM自动同步版本至Dockerfile,避免手动更新?
问题
我有一个部署在Docker容器中的Java应用,每次发布新版本时都需要手动更新Dockerfile中的应用版本号,请问是否可以直接从POM文件中获取版本号来实现自动化?
原Dockerfile内容
FROM openjdk:17 COPY target/projectName-x.x.x.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.5</version> <relativePath/> </parent> <groupId>com.groupName</groupId> <artifactId>projectArtifactId</artifactId> <version>x.x.x-SNAPSHOT</version> <name>projectName</name> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>3.1.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>paketobuildpacks/builder-jammy-base:latest</builder> </image> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>it.ivannotarstefano.ultimateserver.UltimateServerApplication</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
解决方案
通过在Dockerfile中使用通配符*匹配jar包版本号,无需手动修改版本号即可实现自动化构建:
FROM openjdk:17 COPY target/projectName-*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
说明
Maven构建后生成的jar包文件名会包含POM中定义的版本号,使用通配符*可以匹配任意版本的projectName-*.jar,这样每次更新POM中的版本号后,构建Docker镜像时会自动复制最新版本的jar包,无需手动修改Dockerfile。
内容的提问来源于stack exchange,提问作者Ivan Notarstefano
相关产品推荐
相关产品推荐

