平台操作以AzureDevOps为例
CI配置
arguments: '--build-arg BUILD_NUMBER=$(Build.BuildNumber)'
前端
Dockerfile配置
# 动态更新 .env 文件
ARG BUILD_NUMBER
# 使用 sed 命令更新 .env 文件中的 VUE_APP_BUILD_NUMBER 变量
RUN sed -i "s/^VUE_APP_BUILD_NUMBER=.*/VUE_APP_BUILD_NUMBER=${BUILD_NUMBER}/" /app/.env
.env配置
VUE_APP_BUILD_NUMBER=unknown
代码
<span style="margin-left: 8px;">服务版本:{{backend_version}}前端版本:{{front_version}}</span>
data() {return {backend_version: "-",front_version:process.env.VUE_APP_BUILD_NUMBER}},mounted() {this.getDockerBuildId();},methods: {getDockerBuildId() {fetch('/api/sys/common/build').then(response => response.json()).then(data => {this.backend_version = data.message;}).catch(error => {console.error('Error:', error);});}
后端
Dockerfile配置
# 定义构建参数
ARG BUILD_NUMBER
ENV BUILD_NUMBER=${BUILD_NUMBER}
# 使用传递的 BUILD_NUMBER 参数进行 Maven 构建
RUN mvn install -Dbuild.number=${BUILD_NUMBER}
pom.xml配置
<properties><build.number>0</build.number></properties>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifestEntries><!-- 使用 build.number 参数作为版本号 --><Build-Version>${build.number}</Build-Version></manifestEntries></archive></configuration></plugin>
读取
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.jar.Attributes;
import java.util.jar.Manifest;@RestController
public class BuildInfoController {@Autowiredprivate ResourceLoader resourceLoader;@GetMapping("/build-id")public ResponseResult getBuildId() {String buildId = "unknown";try {// 加载 MANIFEST.MF 文件Resource resource = resourceLoader.getResource("classpath:META-INF/MANIFEST.MF");Manifest manifest = new Manifest(resource.getInputStream());Attributes attributes = manifest.getMainAttributes();// 获取 Build-Version 属性buildId = attributes.getValue("Build-Version");if (buildId == null) {buildId = "unknown";}} catch (IOException e) {// 处理异常e.printStackTrace();}return ResponseResult.info(Objects.equals(buildId, "unknown") ? 0 : 1, buildId, buildId);}
}