GitLab CI/CD公共片段未生效,求助问题原因
GitLab CI/CD公共片段未生效的原因及解决办法
核心原因:Script字段被完全覆盖
GitLab CI/CD的extends规则里,如果job自身定义了script,会直接覆盖模板中的script内容,而不是合并执行。你的build_vm任务自己写了script块,导致.common里安装make等工具的命令根本没运行,所以才会报make: command not found。
额外问题:模板Script存在语法错误
你的.common模板里有一行完全混乱的无效内容:
- make VERBOSE额People科学IB基础 Treatment swinging击倒者InsteadSolveGo produced里 - make VERBOSE=true "$MAKEFILE_TARGET"
这行是错误的shell命令,就算继承生效也会直接导致流水线失败,必须先删掉这段乱码。
具体解决步骤
1. 先修正.common模板的语法问题
把乱码行删掉,同时注意apt-get install最后一个包python3后面不要留反斜杠,修正后的模板:
.common: script: - echo "######################## Installing stuff ########################" - export DEBIAN_FRONTEND=noninteractive - apt-get update - | apt-get install -qy \ ca-certificates \ git \ jq \ make \ nmap \ openssh-client \ python3
2. 合并模板与自定义Script内容
有两种靠谱的实现方式:
- 方式一:用
!reference指令引用模板Script
在build_vm的script里先引用模板的命令,再追加自己的逻辑:build_vm: before_script: - export PYTHONPATH="$CI_PROJECT_DIR":$PYTHONPATH variables: MAKEFILE_TARGET: build_vm stage: build_vm extends: .common script: - !reference [.common, script] - echo "build_vm $GITLAB_USER_LOGIN!" - make VERBOSE=true "$MAKEFILE_TARGET" - 方式二:把模板命令移到
before_script
把安装逻辑放到模板的before_script里,这样job的script不会覆盖它,两者会依次执行:
调整模板:.common: before_script: - echo "######################## Installing stuff ########################" - export DEBIAN_FRONTEND=noninteractive - apt-get update - | apt-get install -qy \ ca-certificates \ git \ jq \ make \ nmap \ openssh-client \ python3build_vm的配置可以保持原样,继承后before_script会自动执行安装,再运行自己的script逻辑。
内容的提问来源于stack exchange,提问作者LetMeSOThat4U
相关产品推荐
相关产品推荐

