0

我有以下 JSON 文件 %Workspace%\solution\config\appsettings.json

{
"appName": "Test",
"appId": "1",
"env" : "Test",
"url" : "https://url.com",
"client_id": "",
"client_secret": "",
"QAEmail" : "itteam@email.com",
"Preuri" : "https://preuri.com",
"Ravuri" : "https://Ravuri.com",
"Q&A"    : "https://QandA.com"
}

由于安全问题,我将无法将客户端 ID 和客户端密码提交给 git,但我需要它们通过 Jenkins 运行我的 API 测试脚本。

因此,我们需要使用环境变量将上述 json 文件更改为以下文件。我创建了两个带有秘密文本的全局凭证CLIENT_IDCLIENT_SECRET.

有人可以帮我写一个 Windows 批处理命令来用CLIENT_IDand替换上面的 json 文件CLIENT_SECRET吗?

例如 ifCLIENT_ID = 123456CLIENT_SECRET = 654321, json 文件应该修改为如下。

{
"appName": "Test",
"appId": "1",
"env" : "Test",
"url" : "https://url.com",
"client_id": "123456",
"client_secret": "654321",
"QAEmail" : "itteam@email.com",
"Preuri" : "https://preuri.com",
"Ravuri" : "https://Ravuri.com",
"Q&A"    : "https://QandA.com"
}

任何帮助,将不胜感激。

4

4 回答 4

0

我给你写了一个小脚本:

set "file=test.json"
set "tmpF=%TEMP%\appsettingsJSON_%time:~9,2%.json"
set "tab=    "
for /F "tokens=1* delims=: " %%V in (%file%) do if %%V=="client_id" ( echo %tab%%%V:"%CLIENT_ID%">>%tmpF% ) else ( if %%V=="client_secret" ( echo %tab%%%V:"%CLIENT_SECRET%">>%tmpF% ) else ( if [%%W]==[] ( echo %%V>>%tmpF% ) else ( echo %tab%%%V:%%W>>%tmpF% ) ) )
move "%tmpF%" "%file%"

为我工作,你必须用你的json文件的路径替换“test.json”

于 2018-08-20T20:24:21.583 回答
0

实际上,我尝试过这种方式并且像魔术一样工作。

第 1 步:替换您的 JSON 文件,如下所示

{
"appName": "Test",
"appId": "1",
"env" : "Test",
"url" : "https://url.com",
"client_id": "CLIENT_ID_VALUE",
"client_secret": "CLIENT_SECRET_VALUE",
"QAEmail" : "itteam@email.com",
"Preuri" : "https://preuri.com",
"Ravuri" : "https://Ravuri.com",
"Q&A"    : "https://QandA.com"
}

第 2 步:将以下插件安装到 Jenkins

   **1)** Credentials plugin 

   **2)** Credential Binding Plugin

   **3)** Windows Power Shell Plugin

第 3 步:创建秘密文本并使用 Credentials Plugin 定义您的值 Client_Id = "12345", Client_Secret = "54321"(您可以在 Jenkins 的左侧找到它,您将在其中创建一个新作业)。现在使用绑定选项卡创建环境变量“CLIENT_ID_VALUE”和“CLIENT_SECRET_VALUE”。

第 4 步:现在添加一个执行 Windows Power Shell 的步骤并将以下脚本写入其中

(gc 'C:\Documents\application.json') -replace 'CLIENT_ID_VALUE', $env:CLIENT_ID_VALUE | Out-File 'C:\Documents\application.json'

(gc 'C:\Documents\application.json') -replace 'CLIENT_SECRET_VALUE', $env:CLIENT_SECRET_VALUE | Out-File
 'C:\Documents\application.json'
于 2018-08-22T15:53:16.400 回答
-1
@echo off
setlocal EnableDelayedExpansion

set "Field[CLIENT_ID]=123456"
set "Field[CLIENT_SECRET]=654321"

for /F "tokens=1,2 delims=: " %%a in (appsettings.json) do (
   if defined Field[%%~a] (
      echo     %%a: "!Field[%%~a]!"
   ) else if "%%~b" neq "" (
      echo     %%a : %%b
   ) else (
      echo %%a
   )
)

输入:

{
    "client_id": ""
    "client_secret": ""
    "Environment" : "Test"
    "Username" : "rocky"
    "Password" : "rock123"
}

输出:

{
    "client_id": "123456"
    "client_secret": "654321"
    "Environment" : "Test"
    "Username" : "rocky"
    "Password" : "rock123"
}
于 2018-08-20T21:31:59.240 回答
-3
  1. 获取合适的命令行编辑器(我们为此使用 SED,可在 CygWin、UnixUtils、GnuWin32 等中使用)

  2. 将可识别的占位符放在要编辑的位置:

{“client_id”:“@client@”“client_secret”:“@secret@”“环境”:“测试”“用户名”:“rocky”“密码”“rock123”}

  1. 通过您的编辑器传送您的文件以替换您的占位符。
于 2018-08-20T18:03:25.707 回答