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

GitLab CI/CD:如何在命令中使用脚本执行时生成的变量?

GitLab CI/CD脚本变量无法解析传递的问题

问题场景

编写的GitLab CI/CD流水线配置如下:

image: maven:3-openjdk-11

variables:
    TARGET_LOCATION: "/tmp/uploads/"

stages:
    - deploy

deploy-job:
    stage: deploy
    before_script:
    - export MAVEN_ARTIFACT_VERSION=$(mvn --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*'| tail -1)
    - export MAVEN_ARTIFACT=app-${MAVEN_ARTIFACT_VERSION:+$MAVEN_ARTIFACT_VERSION.jar} 
    script:
    - eval $(ssh-agent -s)
    # (SSH相关配置)
    - scp -o HostKeyAlgorithms=ssh-rsa -p /builds/xxxxx/app/target/$MAVEN_ARTIFACT user@host:${TARGET_LOCATION}

期望scp命令中的$MAVEN_ARTIFACT解析为类似app-BETA-0.1.jar的文件名,TARGET_LOCATION也能正常取值,但实际执行时变量名未被替换,直接显示为原变量名。流水线执行日志片段如下:

$ scp -o HostKeyAlgorithms=ssh-rsa -p /builds/xxxxx/app/target/$MAVEN_ARTIFACT user@host:${TARGET_LOCATION}

解决方案

1. 调试变量赋值情况

在script阶段开头添加echo命令,确认变量是否被正确赋值:

script:
- echo "MAVEN_ARTIFACT_VERSION: $MAVEN_ARTIFACT_VERSION"
- echo "MAVEN_ARTIFACT: $MAVEN_ARTIFACT"
- echo "TARGET_LOCATION: $TARGET_LOCATION"
- eval $(ssh-agent -s)
# (SSH相关配置)
- scp -o HostKeyAlgorithms=ssh-rsa -p /builds/xxxxx/app/target/$MAVEN_ARTIFACT user@host:${TARGET_LOCATION}

通过日志输出可快速定位是变量未赋值,还是后续命令解析问题。

2. 修正变量赋值语法

原MAVEN_ARTIFACT的赋值使用了冗余的bash空值扩展语法,且可能在sh环境下不兼容,直接改为简单拼接即可:

before_script:
- export MAVEN_ARTIFACT_VERSION=$(mvn --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*'| tail -1)
- export MAVEN_ARTIFACT="app-${MAVEN_ARTIFACT_VERSION}.jar"

若需处理版本号为空的边界情况,可添加默认值扩展:

- export MAVEN_ARTIFACT="app-${MAVEN_ARTIFACT_VERSION:-unknown}.jar"

3. 强制使用bash执行脚本

GitLab CI默认使用sh执行脚本,部分bash变量扩展语法在sh中不支持,可在job中指定使用bash:

deploy-job:
    stage: deploy
    variables:
      SHELL: /bin/bash
    before_script:
    # 原before_script内容
    script:
    # 原script内容

4. 避免SSH操作干扰环境变量

SSH相关操作若涉及切换shell或强制分配终端(如ssh -t),可能会重启当前shell导致环境变量丢失,确保SSH配置部分无此类操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:18:31