在YAML文件中传递json-string命令arg

时间:2018-02-06 19:42:50

标签: json yaml google-container-registry google-kubernetes-engine build-triggers

我试图运行一个命令来改变kubernetes cronjob图像值,如here所述。 但是,不是向cmd键入此命令,而是尝试通过Container Registry的构建触发器运行它。

我试过'和\作为逃避字符。

  steps:
     - name: 'gcr.io/cloud-builders/kubectl'
      args: [
      "patch",
       "cronjob",
       "cron-history-orders",
       "--type=json",
      "-p=[{'"op'":'"replace'",'"path'":'"/spec/jobTemplate/spec/template/spec/containers/0/image'",'"value'":'"python:3.5'"}]"
       ]
      env:  ['CLOUDSDK_COMPUTE_ZONE=europe-west3-c','CLOUDSDK_CONTAINER_CLUSTER=xxx-prod']

或当我尝试

   "-p='[{\"op\":\"replace\", \"path\": \"/spec/jobTemplate/spec/template/spec/containers/0/image\", \"value\":\"python:3.5\"}]'"

  "-p='[{'op':'replace','path':'/spec/jobTemplate/spec/template/spec/containers/0/image','value':'python:3.5'}]'"

我得到error loading template: json: cannot unmarshal object into Go value of type []json.RawMessage

1 个答案:

答案 0 :(得分:1)

毫无疑问,你所面临的挑战是你正在处理转义层 - 你的yaml包含将在命令行传递的json。

我能够通过这个yaml传递此命令:

steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: [ "patch", "cronjob", "cron-history-orders", "--type=json", "-p='[{\"op\":\"replace\", \"path\": \"/spec/jobTemplate/spec/template/spec/containers/0/image\", \"value\":\"python:3.5\"}]'" ]
  env:  ['CLOUDSDK_COMPUTE_ZONE=europe-west3-c','CLOUDSDK_CONTAINER_CLUSTER=xxx-prod']