GitLab CI中$GITLAB_ENV为空/未定义,无法跨环节传递变量
GitLab CI 脚本变量传递至artifacts环节的解决方案
问题原因
你遇到的"ambiguous redirect"错误是因为$GITLAB_ENV变量在运行时未被定义,且GitLab CI的artifacts配置会在作业执行前完成解析,脚本环节中设置的环境变量无法直接作用于artifacts环节——即便$GITLAB_ENV可用,也无法传递变量到提前解析的配置项。
针对你的场景的解决方案
你的MAIN_DIR是基于输入变量inputs.root-name生成的,无需在脚本中定义,直接在作业的variables块中声明即可,这样artifacts能直接读取到变量值:
my-job: variables: MAIN_DIR: $[[ inputs.root-name ]]-api script: - # 这里可以使用$MAIN_DIR执行其他操作,比如创建目录、生成文件等 artifacts: paths: - $MAIN_DIR/file.txt
动态生成变量的通用解决方案
如果MAIN_DIR是通过脚本命令动态生成的(比如基于命令输出),可以通过固定路径中转的方式实现归档:
my-job: script: - # 动态生成目录名 - MAIN_DIR=$(echo "some-dynamic-value")-api - # 创建固定的 artifacts 中转目录 - mkdir -p ./ci-artifacts - # 将目标文件复制到固定路径 - cp $MAIN_DIR/file.txt ./ci-artifacts/ artifacts: paths: - ./ci-artifacts/
这种方式避开了动态变量无法被artifacts解析的问题,通过固定路径确保归档路径在作业解析阶段即可确定。
内容的提问来源于stack exchange,提问作者Bernardo Gomez
相关产品推荐
相关产品推荐

