带有cURL的脚本之前的GitLab配置项变量引发YAML语法错误 [英] Gitlab CI variable before script with curl raises YAML syntax error

查看:27
本文介绍了带有cURL的脚本之前的GitLab配置项变量引发YAML语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在定义一个变量JWT,我将在其中存储一个稍后将在代码中使用的令牌。 我将通过cURL调用在before_script步骤中获取它。

问题是,当我尝试运行管道时,它失败并显示错误:

在.gitlab-ci.yml:包含的文件中发现错误.gitlab-ci.yml 没有有效的YAML语法!

我已经阅读了此Stack Overflow answer以便正确插入USERPASS环境变量。

这是我的.gitlab-ci.yml文件:


build-dist:
  environment:
    name: develop
  variables:
    JWT: ""
  stage: build
  image: node:16-alpine
  cache:
    key:
      files:
        - yarn.lock
    paths:
      - node_modules
      - .yarn
  before_script:
    - if [ -z "$USER" ] || [ -z "$PASS" ]; then exit 1; fi
    - apk add curl 
    - JWT=$(curl -s -X POST -H "Content-Type: application/json" -d '{"username": "'"$USER"'","password": "'"$PASS"'"}' "https://example.com/token")

  script: 
    - yarn install --pure-lockfile --cache-folder .yarn
    - yarn build

我应该如何更正.gitlab-ci.yml中的以下行以使其正常工作?

- JWT=$(curl -s -X POST -H "Content-Type: application/json" -d '{"username": "'"$USER"'","password": "'"$PASS"'"}' "https://example.com/token")

推荐答案

首先,针对此类GitLab CI问题提供一个方便的提示:

  • 假设您在https://gitlab.com/user/project上有GitLab回购,
  • 您可以浏览页面https://gitlab.com/user/project/-/ci/lint
  • 然后粘贴有问题的.gitlab-ci.yml文件的内容,并单击";Validation";以获取更多反馈(通常是错误行号等)

关于问题中的YAML片段,问题的核心是您在问题中提到的- JWT=$(…)行,更准确地说是:

  • 从YAML的角度看,字符串JWT=…没有显式引用,
  • 由于此文本包含:
  • 然后,YAML解析器将其视为一个映射,也就是说,就好像您已经编写了:
    - username: "NAME"
      other_key: "val"
    
要解决此问题,您似乎只需要使用'"对此序列项进行引号和转义,从而编写形式为- "JWT=…"的一行,然后在…中相应地转义引号但我宁愿建议(避免丑陋的逃脱!)要依赖于所谓的block style of YAML→,这将导致:

- |
  JWT=$(curl -s -X POST -H "Content-Type: application/json" -d '{"username": "'"$USER"'","password": "'"$PASS"'"}' "https://example.com/token")

这篇关于带有cURL的脚本之前的GitLab配置项变量引发YAML语法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆