在此上下文中不允许 Gitlab CI YML 映射值

Posted

技术标签:

【中文标题】在此上下文中不允许 Gitlab CI YML 映射值【英文标题】:Gitlab CI YML Mapping values are not allowed in this context 【发布时间】:2018-09-28 13:37:32 【问题描述】:

我想在 master 提交时使用 Gitlab CI 将我的静态网站部署到 ftp 服务器。我在 DevOps 方面没有经验,并尝试通过 Internet 上的教程来做到这一点。 我制作了这个 .gitlab-ci.yml 文件

deploy:
    stage: deploy
    only:
        - master
        deploy:
  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"

但是 gitlab 向我显示了这个 yml 文件的错误。它说在这种情况下不允许映射值。你能帮我处理这个文件吗?谢谢!

【问题讨论】:

缩进搞砸了,而且那里多了一个deploy:关键字。 【参考方案1】:

有同样的错误信息

(<unknown>): mapping values are not allowed in this context gitlabci

我的问题是:

查看文档:https://docs.gitlab.com/ee/ci/yaml/README.html#script

有时,脚本命令必须用单引号或双引号括起来。例如,包含冒号 (:) 的命令必须用单引号 (') 括起来。 YAML 解析器需要将文本解释为字符串而不是“键:值”对。

例如,此脚本使用冒号:

job:
  script:
    - curl --request POST --header 'Content-Type: application/json' "https://gitlab/api/v4/projects"

要被视为有效的 YAML,您必须将整个命令用单引号括起来。如果命令已使用单引号,则应尽可能将其更改为双引号 ("):

job:
  script:
    - 'curl --request POST --header "Content-Type: application/json" "https://gitlab/api/v4/projects"'

【讨论】:

以上是关于在此上下文中不允许 Gitlab CI YML 映射值的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab持续集成-(.gitlab-ci.yml)

GitLab CI 的多行 YAML 字符串 (.gitlab-ci.yml)

如何排除 gitlab-ci.yml 更改触发作业

多个分支中的.gitlab-ci.yml的多个版本

从 Jenkins Ci 服务迁移到 gitlab-ci.yml

Gitlab-ci.yml 创建合并请求