如何将Jenkins groovy文件中的JSON文件内容字符串化

问题描述 投票:0回答:1

我必须通过Cloudformation将Json文件放入AWS SSM参数中。 我已经编写了 CFT 来创建 SSM 参数,但我在传递参数值(即 JSON 文件内容)时面临挑战。

Parameters:
  Environment:
    Description: 'Deployment Environment'
    Type: String
    Default: dev
  SSMParameterName:
    Description: 'SSM Parameter Name'
    Type: String
    Default: testswapeligibility
  JsonFormatToPutInSSM:
    Description: 'Provide the text in JSON format to put on SSM parameter'
    Type: String
    Default: '{"This_is_sample":"Sample1,Sample2","Name":"some thing here","anything_else":""}'

Resources:  
  JsonFormatToPutInSSM:
    Type: AWS::SSM::Parameter
    Properties:
      Description: 'SSM Parameter to hold LogGroup names and details for which Subscription filter needs to be created'
      Name: !Sub '/app/rds/${SSMParameterName}-${Environment}'
      Type: String
      Value:  !Sub '${JsonFormatToPutInSSM}'

现在我有 Jenkins 工作来部署这个 CFT。 在该 Jenkins 作业中,我从 Git 获取 JSON 文件并读取 JSON 文件,并希望将该 JSON 文件内容作为值传递给“SSMParameterName”参数。

在云形成中,它不直接支持 JSON 文件,需要使用额外的反斜杠转义保留的 JSON 字符,例如退格符、换页符、换行符、回车符、制表符、双引号和反斜杠。 我想在 groovy 本身中执行此操作,并将格式化的 JSON 文件内容作为 json 字符串传递给 Cloudformation 参数值。 如何转换: 例如

{"This_is_sample":"Sample1,Sample2","Name":"some thing here","anything_else":""}

进入

{\"This_is_sample\":\"Sample1,Sample2\",\"Name\":\"some thing here\",\"anything_else\":\"\"}

在 Jenkins 文件本身中并将其作为参数值传递给 Cloudformation 命令。

json groovy stringify cft
1个回答
0
投票

所以我认为你正在做这样的事情:

stage('SSMConfig') {
   steps {
      def jsonParams = readJson file: "path/to/json/parameters"

      script {
         def escapedJson = JsonOutput.toJson( JsonOutput.toJson( jsonParams ) )
      }
   }   
}

通过运行

JsonOutput.toJson
两次,第二次执行将转义 JSON 字符串中的所有内容。 另外,通过解析 GIT 文件中的 JSON,您可以删除所有空格和其他在将输出放入参数时可能会出错的内容,这样输出中就不会出现任何可能让您出错的
\n
\t
.

© www.soinside.com 2019 - 2024. All rights reserved.