GitLab CI/CD中$HOME与其他变量拼接时为空的问题排查
问题原因与解决方案
问题根源
你在.gitlab-ci.yaml的variables块中定义MY_TEST_DIR: "$HOME/mytests"时,$HOME并没有被正确解析为shell环境变量。这是因为GitLab CI的variables块是在Runner启动shell环境之前就完成变量解析的,此时$HOME这个shell级别的环境变量还未被加载,GitLab会将未识别的$HOME视为空值,最终导致MY_TEST_DIR变成了/mytests,自然找不到对应的目录。
修复方案
有两种简单的修复方式:
方式一:在shell环境中定义变量
将MY_TEST_DIR的定义移到before_script或script块中,让shell来解析$HOME:
stages: - prepare - run-test prepare-scripts: stage: prepare before_script: - export MY_TEST_DIR="$HOME/mytests" # 在shell环境中定义变量 - cd $HOME - pwd script: - echo "Your test directory is $MY_TEST_DIR" - cd $MY_TEST_DIR - pwd when: always tags: - ubuntutest
方式二:直接在命令中使用$HOME/mytests
如果不需要复用变量,也可以直接在script的命令里直接写路径,绕开变量预解析的问题:
stages: - prepare - run-test prepare-scripts: stage: prepare before_script: - cd $HOME - pwd script: - echo "Your test directory is $HOME/mytests" - cd $HOME/mytests - pwd when: always tags: - ubuntutest
这两种方式都能让$HOME在shell环境中被正确解析为/home/gitlab-runner,从而定位到存在的/home/gitlab-runner/mytests目录。
内容的提问来源于stack exchange,提问作者skrowten_hermit
相关产品推荐
相关产品推荐

