当前位置: 首页 > news >正文

[CI]Docker构建时传递CI的唯一生成号作为版本号(SpringBoot、Vue)

在这里插入图片描述

平台操作以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 {

    @Autowired
    private 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);
    }
}

效果

在这里插入图片描述

相关文章:

  • JVM性能调优:参数配置×内存诊断×GC调优实战
  • vue3中pinia基本使用
  • 前端核心知识:Vue 3 编程的 10 个实用技巧
  • 小程序设计和开发:怎样制定小程序的主要业务流程和功能模块。
  • 优化IntelliJ IDEA 对 Python 的提示功能
  • git配置 gitcode -- windows 系统
  • 云原生周刊:深入探索 kube-scheduler-simulator
  • 实时比分更新系统的搭建
  • zabbix中通过模板实现自动发现对tcp端口批量监控
  • 【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题
  • 使用在 Google Kubernetes Engine 上运行的 Vertex AI 开始使用 Elastic Chatbot RAG 应用程序
  • opengles,VBO,EBO,VAO啥含义,使用流程
  • Chrome 135 版本开发者工具(DevTools)更新内容
  • C#二叉树
  • JavaScript基础--23-高阶函数详解
  • 科普:原始数据是特征向量么?
  • shadcn 使用步骤与注意点
  • Java面试黄金宝典41
  • k8s 1.30.6版本部署(使用canal插件)
  • Axure中继器(Repeater): 列表展示
  • 新网站的建设方案/百度sem是什么
  • css div网站/自助建站系统模板
  • 青岛网站建设哪家好/seo软件系统
  • 网站建设中啥意思/广州网络广告推广公司
  • 网上做问卷报酬不错的网站是/软文广告投放平台
  • psd企业网站模板/成都seo学徒