如何使用Jenkins参数替换属性文件中的值

jvidinwx  于 2023-08-03  发布在  Jenkins
关注(0)|答案(2)|浏览(298)

我有settings.properties文件,其中有许多键值对,如下所示

browserName=Chrome
ExecutionMode=Local

字符串
我正在使用settings.properties文件传递输入参数以运行自动化脚本。
例如,当我使用build参数运行jenkins作业时,我输入browserName作为InternetExplorer,它应该替换settings.properties文件中的值。
我正在使用下面的命令来实现我的目标。
第一个月
但它并没有取代“browserName=Chrome”,而是在末尾添加了“browserName=InternetExplorer”。
请告诉我如何替换browserName值?

yjghlzjz

yjghlzjz1#

不能使用“>>”,因为它会将数据追加到文件中。如果你使用“>”,它会在插入echo之前擦除文件的所有内容。
所以你必须使用sed命令。我认为你应该运行的命令是这样的:
sh“sed -i 's/browserName=.*/browserName=${BROWSER_NAME}/g' settings.properties“
编辑:增加了两个窗口的方法
我发给你的代码只能在linux下运行。我会让你尝试两种方法:

纯Groovy(Windows和Linux):

config = readFile "settings.properties"
newconfig = a.replaceAll("browserName=.*","browserName=${BROWSER_NAME}")
writeFile file: "settings.properties", text: "${newconfig}"

字符串

使用powershell(仅限windows)

newconfig=powershell(returnStdout: true, script:"cat settings.properties | %{$_ -replace 'browserName=.*','browserName=${BROWSER_NAME}'}")
writeFile file: "settings.properties", text: "${newconfig}"

**警告:**我没有也没有访问基于Windows的Jenkins,所以我假设powershell版本可以工作。我基于这个脚本这个博客

xqnpmsa8

xqnpmsa82#

@mndrye的答案非常有用,但它包含了Groovy脚本中的一个小错误,所以不允许我编辑这个错误或将其作为评论报告,所以我在下面添加了更正的版本和一个小的解释。
应该是config.replaceAll()而不是a.replaceAll()。否则,Jenkins会给出这样的错误:

hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No such property: a for class: WorkflowScript

字符串
修正版本;

config = readFile "settings.properties"
newconfig = config.replaceAll("browserName=.*","browserName=${BROWSER_NAME}")
writeFile file: "settings.properties", text: "${newconfig}"


来解释这里发生了什么;

  • 首先,我们将文件的内容写入变量
  • 然后我们改变这个变量中的相关值,并将其写入一个新变量。
  • 然后我们将这个新变量重写到同一个文件中。因为我们在这里没有使用append,所以我们实际上是在重新创建整个文件。

这与这个问题没有什么关系,但是我为像我这样的新手添加了一个小技巧,他们希望在属性文件中更改值并在这里找到方法。如果您想在声明性管道中运行这个groovy脚本,但还没有弄清楚如何实现,可以在脚本块中运行它,如下所示;

pipeline {
   agent any
   stages {
       stage('replace') {
           steps {
               script {
                   config = readFile "/path/to/settings.properties"
                   newconfig = config.replaceAll("browserName=.*","browserName=${BROWSER_NAME}")
                   writeFile file: "/path/to/settings.properties", text: "${newconfig}"
               }
           }
       }
   }
}

相关问题