如何通过Jenkins使用PowerShell脚本插件创建环境变量并更改JSON文件
我在如何通过Jenkins使用PowerShell脚本插件创建环境变量并更改JSON文件,json,shell,powershell,jenkins,jenkins-plugins,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" : "
%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文件更改为下面的json文件。我已创建了两个全局凭据,其中包含一个机密文本CLIENT\u ID
和CLIENT\u secret
有人能帮我写一个windows批处理命令,用CLIENT\u ID
和CLIENT\u SECRET
替换上面的json文件吗
例如,如果CLIENT\u ID=123456
和CLIENT_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"
}
任何帮助都将不胜感激
获取一个合适的命令行编辑器(我们使用SED,可以在CygWin、UnixUtils、GnuWin32等中获得)
在要编辑的位置放置可识别的占位符:
{
“客户id”:“@client@”
“客户机密”:“@secret@”
“环境”:“测试”
“用户名”:“rocky”
密码“”“123”
}
通过编辑器导入文件以替换占位符
我给你写了一个小剧本:
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”
@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"
}
事实上,我试过这种方法,效果很好
步骤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'
可能重复的应该是“Password”:“rock123”
?我稍微更改了我的json文件,同样的脚本也适用于上面的json文件吗?这是您应该使用的解决方案,特别是当您有更多变量时。但是它有一些问题:如果您有空字符串,您只需回显键而不是值()示例“:”,
将成为“示例”
),它只会回显所有内容,然后关闭,不会创建/更改任何文件。这很有趣!我的答案产生的输出与问题中发布的输出示例(修改前)完全相同。投票人能否至少解释他/她的原因?>“我的答案产生的输出与输出示例完全相同”您的代码永远不会更改文件(>“json文件应更改为以下内容”)我稍微更改了我的json文件,相同的脚本是否也适用于上述json文件?是的,它仍然有效。(但它仍然添加了您在第一个示例中使用的选项卡。JSON与选项卡的工作方式相同(并且看起来更好),但是如果您想删除它们,只需将tab设置为空字符串set“tab=“
)我可以在jenkins中使用execute shell脚本吗?或者我需要安装任何插件来运行此脚本吗?当我使用execute shell脚本C:\Program Files(x86)\Jenkins\workspace\AfsAutomation\u Test>exit 0[AfsAutomation\u Test]$sh-xe C:\Users\por\AppData\Local\Temp\Jenkins 6457885774024126472.sh时,出现以下错误。系统找不到指定的文件,原因是:java.io.IOException:无法运行程序“sh”(在目录“C:\Program Files(x86)中)\Jenkins\workspace\AfsAutomation_Test”):CreateProcess error=2,系统找不到文件specöhm。。。这是一个批处理脚本。我发现这个问题是因为标签“batchfile”,它的标题是“如何在jenkins中使用windows批处理命令更改json文件”。。。