簡體   English   中英

gitlab-ci.yml bash腳本來更新AWS route53無效的Yaml

[英]gitlab-ci.yml bash script to update AWS route53 invalid yaml

我正在嘗試在GitLab中創建作業以在部署應用程序時更新該應用程序的DNS。 我有一個可以在gitlab-runner上運行的bash oneliner。 但是我無法在gitlab-ci.yml文件中對其進行驗證。 這是在gitlabRunner上運行的原始腳本。

TARGET_ZONEID="Z2T1234"; TARGET_FQDN="appName.domain.com."; echo '{ "Comment": "DDNS update", "Changes":[ { "Action": "UPSERT", "ResourceRecordSet": { "ResourceRecords": [ { "Value": "web_server.domain.com" } ], "Name": "'"$TARGET_FQDN"'", "Type": "CNAME", "TTL": 60} } ] }'

這就是我在Gitlab-ci.yml中擁有的方式

update_public_dns:
  script: 
  - TARGET_ZONEID="Z2T1234"; TARGET_FQDN="appName.domain.com."; echo '{ "Comment": "DDNS update", "Changes":[ { "Action": "UPSERT", "ResourceRecordSet": { "ResourceRecords": [ { "Value": "web_server.domain.com" } ], "Name": "'"$TARGET_FQDN"'", "Type": "CNAME", "TTL": 60} } ] }'

失敗並顯示以下錯誤: (<unknown>): did not find expected key while parsing a block mapping at line 3 column 5.

在互聯網上搜索了幾個小時后,我發現一個建議,指示我應該轉義所有引號。 因此,我嘗試了以下操作:(注意,我取出了其中一個變量以嘗試簡化腳本。)

update_public_dns:
  script: 
  - echo '{ \"Comment\": \"DDNS update\", \"Changes\": [ { \"Action\": \"UPSERT\", \"ResourceRecordSet\": { \"ResourceRecords\": [ { \"Value\": \"web_server.panosoft.com\" } ], \"Name\": \"appName.domain.com\", \"Type\": \"CNAME\", \"TTL\": 60} } ] }' | aws route53 change-resource-record-sets --hosted-zone-id "Z2TLDA3UA15TJ8" --change-batch file:///dev/stdin'

結果是此錯誤:

(<unknown>): mapping values are not allowed in this context at line 3 column 54

我現在正竭盡全力試圖解決這個問題。 有什么建議么?

僅供參考,我不想創建一個bash腳本,然后再從gitlab調用它,因為我希望使用項目變量來自定義web_server和appName設置。

在第一個YAML示例中,在純標量(不帶引號)中,您不能具有諸如:冒號+空格)之類的序列,因為它們將指示鍵值對。

如果將其轉換為雙引號標量,則必須轉義雙引號和任何帶反斜杠的現有反斜杠。
如果將其制成單引號標量,則必須通過將其加倍來轉義任何單引號。

將字符串轉換為標量的最簡單方法是使其成為塊樣式文字標量:

update_public_dns:
  script: 
  - |-
    TARGET_ZONEID="Z2T1234"; TARGET_FQDN="appName.domain.com."; echo '{ "Comment": "DDNS update", "Changes":[ { "Action": "UPSERT", "ResourceRecordSet": { "ResourceRecords": [ { "Value": "web_server.domain.com" } ], "Name": "'"$TARGET_FQDN"'", "Type": "CNAME", "TTL": 60} } ] }'

在這樣的標量沒有逃逸完成和:不會引起問題可能發生。 破折號| 表示需要刪除最后的換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM