You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI YAML报错:不允许映射值,静态站FTP部署求助

解决GitLab CI YAML "Mapping values are not allowed in this context" 错误

嘿,我帮你排查下这个问题!你遇到的错误是因为.gitlab-ci.yml的YAML语法出了问题,具体来说是重复键和缩进结构错误导致的。

错误原因分析

你的配置里犯了两个核心语法错误:

  1. 重复的键名:你先把整个job命名为deploy:,然后在job内部又写了一行deploy:,YAML不允许同一个层级出现重复的键,这直接触发了"Mapping values are not allowed in this context"错误。
  2. 缩进不规范:YAML对缩进要求严格,需要保证每个层级的缩进一致(通常用2个空格),你的配置里也存在缩进混乱的问题。

修正后的完整配置

下面是调整后的正确配置,我还优化了安全性(避免明文密码):

deploy:
  stage: deploy
  only:
    - master
  script:
    - apt-get update -qq && apt-get install -y -qq lftp
    - lftp -u $FTP_LOGIN,$FTP_PASS ftp.server -e "mirror -e -R -x .git -x excl.txt -x exclude-1 -x exclude-2 -x README.md -p ./ mysite/www/ ; quit"

配置细节说明

  • 顶层deploy::这是唯一的job名称,不会和内部字段重复。
  • stage: deploy:指定这个job属于流水线的deploy阶段(GitLab CI默认支持这个阶段,无需额外配置)。
  • only: - master:确保只有向master分支提交代码时,才会触发这个部署job。
  • script命令块:
    • 第一行更新apt源并安装lftp工具,-qq参数用来减少冗余输出,避免日志混乱。
    • 第二行的lftp命令里,我把你原来的明文账号密码换成了GitLab环境变量$FTP_LOGIN和$FTP_PASS——绝对不要在配置文件里写明文密码,你可以在GitLab项目的「Settings → CI/CD → Variables」中添加这两个变量,GitLab会自动安全地注入它们。
    • 你原来的mirror命令参数是正确的:-e会删除FTP上本地已不存在的文件,-R表示反向镜像(本地→远程),-x用来排除指定文件/目录,-p保留文件权限,最后指定本地目录./和远程目录mysite/www/,执行完成后退出lftp。

额外注意事项

  • 如果你用的是GitLab共享Runner,默认支持apt安装工具,无需额外权限。
  • 可以先在本地手动运行lftp命令,确认能正常连接FTP服务器并同步文件,避免因为FTP权限、路径错误导致后续问题。

内容的提问来源于stack exchange,提问作者sw0rl0k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:37:23