GitLab CI引入外部配置时无法找到bash子文件的解决方法
解决GitLab CI模板引用同目录脚本找不到的问题
当你通过include引入其他项目的CI模板时,模板里的相对路径脚本不会自动被同步到当前项目的CI环境,所以会出现找不到文件的错误,给你几个可行的解决办法:
同时引入模板和依赖脚本
修改你的include配置,把模板文件和它依赖的utils-functions.sh一起引入,GitLab会把这两个文件都下载到当前CI环境的工作目录,模板里的相对路径引用就能正常生效。示例配置:include: - project: 'my-group/my-project' ref: main file: '.gitlab-ci-template.yml' - project: 'my-group/my-project' ref: main file: 'utils-functions.sh'注意要保证
file的路径和模板里引用脚本的路径完全匹配,比如模板里写的是source ./utils-functions.sh,那引入的脚本路径就没问题。在模板Job中克隆源项目获取脚本
如果不想修改主项目的include配置,可以调整.gitlab-ci-template.yml里的Job步骤,先克隆包含脚本的源项目,再执行脚本。示例:# .gitlab-ci-template.yml中的Job示例 demo-job: script: - git clone https://gitlab.com/my-group/my-project.git --branch main --depth 1 - cd my-project - source utils-functions.sh # 这里写后续的CI步骤这种方法需要CI Runner有访问该项目的Git权限,而且会增加流水线的运行时间,适合临时应急场景。
将脚本内容直接嵌入CI模板
如果utils-functions.sh的代码量不大,直接把脚本里的函数或逻辑复制到模板文件中,彻底消除文件依赖。示例:# .gitlab-ci-template.yml示例 demo-job: script: - | # 直接把utils-functions.sh里的内容贴在这里 check_env() { echo "Checking environment variables..." # 具体逻辑 } - check_env # 后续CI步骤
内容的提问来源于stack exchange,提问作者Artem Eduardov
相关产品推荐
相关产品推荐

