GitLab CI YAML报错:test-on-scdf-tasks含未知键trigger及脚本添加问题
问题解决指南
1. 解决"jobs:test-on-scdf-tasks config contains unknown keys: trigger"报错
GitLab CI里,trigger是专门用来触发子流水线的配置,不能和普通Job的script、extends字段共存——这是两种完全不同的Job类型:
- 带
trigger的Job仅负责触发其他项目/分支的流水线,自身不会执行任何脚本逻辑 - 带
script的普通Job是在当前Runner上执行命令
如果需要先完成Docker配置再触发子流水线,必须拆成两个独立Job:
- 第一个Job:执行Docker认证配置,通过缓存传递配置文件
- 第二个Job:依赖第一个Job,仅负责触发子流水线
2. 修复Docker登录配置不生效的问题
原配置的变量嵌套eval存在语法问题,且如果是Trigger Job,script段根本不会执行,建议调整为以下两种方案之一:
方案一:通过缓存传递Docker配置文件
variables: # 直接生成完整的Docker认证JSON,避免嵌套eval的语法坑 DOCKER_AUTH_JSON: '{"auths":{"container-host:port":{"auth":"'$(echo -n "gitlab-ci-token:$CI_JOB_TOKEN" | base64)'"}}}' prepare-docker-auth: extends: .test-on-downstream script: - mkdir -p $HOME/.docker - echo "$DOCKER_AUTH_JSON" > $HOME/.docker/config.json cache: paths: - $HOME/.docker/config.json key: docker-auth-cache test-on-scdf-tasks: needs: [prepare-docker-auth] trigger: project: example/scdf-tasks branch: master strategy: depend
方案二:直接传递预定义变量(更简洁)
GitLab CI会自动识别DOCKER_AUTH_CONFIG预定义变量,自动为Runner生成~/.docker/config.json,无需手动写脚本:
variables: DOCKER_AUTH_CONFIG: '{"auths":{"container-host:port":{"auth":"'$(echo -n "gitlab-ci-token:$CI_JOB_TOKEN" | base64)'"}}}' test-on-scdf-tasks: trigger: project: example/scdf-tasks branch: master strategy: depend # 将认证变量传递给子流水线,让子流水线的Runner自动完成Docker登录 variables: DOCKER_AUTH_CONFIG: $DOCKER_AUTH_CONFIG
关键注意点
- 永远不要在同一个Job里混合
trigger和script字段,这是GitLab CI的硬性规则 - 使用
DOCKER_AUTH_CONFIG预定义变量是GitLab CI中配置Docker认证的官方推荐方式,比手动生成配置文件更可靠
内容的提问来源于stack exchange,提问作者user8727631
相关产品推荐
相关产品推荐

