如何通过Jenkins使用Power Shell脚本插件创建环境变量并更改JSON文件

时间:2018-08-20 17:27:35

标签: json shell powershell jenkins jenkins-plugins

我在%Workspace%\solution\config\appsettings.json下有下面的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_IDCLIENT_SECRET替换上面的json文件吗?

例如,如果CLIENT_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 个答案:

答案 0 :(得分:1)

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

第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:使用凭据插件(您将在Jenkins的左侧找到它)创建机密文本并定义值Client_Id =“ 12345”,Client_Secret =“ 54321”将创建新工作)。现在,使用“绑定”选项卡创建环境变量“ 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'

答案 1 :(得分: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”

答案 2 :(得分:-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"
}

答案 3 :(得分:-3)

  1. 获取合适的命令行编辑器(为此我们使用SED,可在CygWin,UnixUtils,GnuWin32等中使用)

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

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

  1. 通过编辑器将文件插入管道以替换占位符。