You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Concourse流水线中更新Maven构建版本号并传递至构建任务?

在Concourse流水线中更新Maven构建号的最佳方案 & 版本号传递指南

我来分享一下在Concourse里处理Maven版本号的常用最佳实践,刚好能解决你遇到的版本号传递和构建问题:

一、核心思路:用semver资源统一管理版本

Concourse的semver资源是管理语义化版本的标准工具,它能自动帮你递增版本号(patch/minor/major),并把版本号存储在Git仓库里,避免手动维护的混乱。首先你需要在流水线里定义这个资源:

resources:
- name: app-version
  type: semver
  source:
    driver: git
    uri: git@your-repo-url/version-repo.git  # 存储版本号的Git仓库
    branch: main
    file: version.txt  # 版本号会存在这个文件里
    initial_version: 1.0.0  # 初始版本号

二、任务间传递版本号的两种实用方法

你提到的“获取版本号后怎么传给Maven”以及“任务间传递版本”,其实Concourse的资源输入机制就能轻松解决,以下是两种常用方式:

1. 直接读取semver资源的版本文件传递给Maven

semver资源拉取后,会在对应的input目录下生成一个version文件,里面就是当前的版本号。你可以在构建任务里直接读取这个文件,然后作为参数传给Maven命令:

比如你的流水线job可以这么写:

jobs:
- name: build-deploy-app
  plan:
  - get: app-version
    params: {bump: patch}  # 每次构建自动升级patch版本(比如1.0.0→1.0.1)
  - get: source-code  # 你的Spring Boot代码资源
  - task: build-spring-app
    file: source-code/ci/tasks/build.yml
    input_mapping:
      version-dir: app-version  # 把app-version资源映射成version-dir输入
      app-code: source-code

然后在build.yml任务文件里,读取版本并执行Maven构建:

platform: linux
image_resource:
  type: docker-image
  source: {repository: maven, tag: 3.8.6-openjdk-11}
inputs:
- name: app-code
- name: version-dir
outputs:
- name: built-jar
run:
  path: bash
  args:
  - -c
  - |
    # 从semver资源的文件里读取版本号
    BUILD_VERSION=$(cat version-dir/version)
    echo "Starting build with version: $BUILD_VERSION"
    
    cd app-code
    # 直接把版本号作为参数传给Maven,应用里可以通过@Value("${build.version}")读取
    mvn clean package -Dbuild.version=$BUILD_VERSION
    
    # 把构建好的jar复制到output目录,供后续部署任务使用
    cp target/*.jar ../built-jar/

2. 自动修改pom.xml里的版本号

如果你的需求是把版本号直接固化到pom.xml(比如jar包的版本号),可以用Maven的versions插件来修改pom里的<version>字段:

mvn versions:set -DnewVersion=$BUILD_VERSION

把上面的build任务里的Maven命令替换成:

cd app-code
# 修改pom版本号(多模块项目加-DprocessAllModules)
mvn versions:set -DnewVersion=$BUILD_VERSION
# 执行构建
mvn clean package

这样构建出来的jar包版本就会和semver的版本号一致了。

三、最佳实践总结

  • 用semver资源统一管理版本号,确保每次构建版本自动递增,避免手动修改的错误
  • 任务间通过Concourse的input资源传递版本信息,这是最可靠的方式,比环境变量更稳定
  • 若只是在应用运行时需要版本号,用-Dbuild.version参数传递更高效;若需要固化到jar包metadata里,用versions:set修改pom
  • semver资源会自动把更新后的版本号提交到Git仓库,确保下一次构建使用最新版本

内容的提问来源于stack exchange,提问作者cdugga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:41:11