这是我在 gitlab bash 中使用的代码:
kubectl --kubeconfig=$KUBECONFIG -n $NAMESPACE_NAME patch service $CI_PROJECT_NAME -p '{"spec": {"selector": {"app.kubernetes.io/instance": "${HELM_NAME}-blue"}}}'
但是部署时出现如下错误: 来自服务器的错误(BadRequest):寻找对象键字符串开头的无效字符's'
我想使用
kubectl patch <resource>
更新对象。
代码问题出在哪里?我哪里做错了? 我认为错误与 json 对象中的单引号和双引号有关。但我找不到正确的语法。
解决方案:
kubectl --kubeconfig=$KUBECONFIG -n $NAMESPACE_NAME patch service $CI_PROJECT_NAME -p "{\"spec\": {\"selector\": {\"app.kubernetes.io/instance\": \"${HELM_NAME}-blue\"}}}"
为什么?
这是 Bash 的事情,以及
"
和 '
之间的区别。
"
- 字符串中引用的环境变量被扩展
$ export HELM_NAME=release123
$ echo "${HELM_NAME}"
release123
'
- 环境变量未扩展
$ export HELM_NAME=release123
$ echo '${HELM_NAME}'
${HELM_NAME}