带有cURL的脚本之前的GitLab配置项变量引发YAML语法错误 [英] Gitlab CI variable before script with curl raises YAML syntax error
本文介绍了带有cURL的脚本之前的GitLab配置项变量引发YAML语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在定义一个变量JWT
,我将在其中存储一个稍后将在代码中使用的令牌。
我将通过cURL调用在before_script
步骤中获取它。
问题是,当我尝试运行管道时,它失败并显示错误:
在.gitlab-ci.yml:包含的文件中发现错误.gitlab-ci.yml
没有有效的YAML语法!
我已经阅读了此Stack Overflow answer以便正确插入USER
和PASS
环境变量。
这是我的.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屋!
查看全文