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

如何将GitLab CI脚本步骤的变量传递到制品配置?

解决GitLab CI中动态版本制品的上传问题

问题原因

GitLab CI的job配置(包括artifacts.paths)是在job启动前就完成解析的,而你在script步骤中定义的MAVEN_VERSION变量是job运行时才生成的。所以解析制品路径时,这个变量还没有值,导致路径变成/target/application-.jar,自然找不到文件。

解决方案(无需通配符)

方案1:重命名制品为固定路径

在script步骤中,获取版本号后将生成的jar文件重命名为固定名称,然后artifacts直接指定这个固定路径即可:

build️:
  script:
    - MAVEN_VERSION="$(mvn help:evaluate -q -DforceStdout -D"expression=project.version")"
    - echo $MAVEN_VERSION
    - mvn clean install
    # 将动态版本的jar重命名为固定名称
    - cp ./target/application-${MAVEN_VERSION}.jar ./target/application.jar
  image: maven:3.9.9-amazoncorretto-17
  stage: build
  artifacts:
    paths: [./target/application.jar]

方案2:通过dotenv传递变量到后续job(如果需要跨job使用版本号)

如果需要在后续job中基于这个动态版本号处理制品,可以在当前job中将版本号写入.env文件,通过reports:dotenv让GitLab识别这个变量,后续job就能直接引用:

当前job配置:

build️:
  script:
    - MAVEN_VERSION="$(mvn help:evaluate -q -DforceStdout -D"expression=project.version")"
    - echo $MAVEN_VERSION
    - mvn clean install
    # 将版本号写入.env文件
    - echo "MAVEN_VERSION=${MAVEN_VERSION}" > ./maven_version.env
  image: maven:3.9.9-amazoncorretto-17
  stage: build
  artifacts:
    paths: [./target/application-${MAVEN_VERSION}.jar]
  reports:
    dotenv: ./maven_version.env

后续job可以直接使用$MAVEN_VERSION变量:

deploy:
  script:
    - echo "Deploying version $MAVEN_VERSION"
    # 使用制品中的application-${MAVEN_VERSION}.jar
  stage: deploy
  needs: [build]

注意:方案2中当前job的artifacts.paths依然无法直接使用$MAVEN_VERSION,因为配置解析时机的问题,所以如果只是当前job上传制品,方案1更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:16:08