这是我的用例。 在我的项目中,我们有 5 个不同的环境 SIT1、SIT2、UAT1、UAT2 和 PROD,它们位于 Git 存储库中。所有环境都有特定的属性文件,如sit1.properties 文件等。在每个属性文件中,我们都有一个名为 user.access 的属性,它将包含用于身份验证目的的消费者姓名。
user.access= user1,user2
因此,我需要创建一个 Jenkins 作业,将新用户名添加到我在构建参数中传递的 user.access 属性。例如,如果我在 Jenkins 作业中有 3 个参数
applicationName = abc
enviornment = sit1
userid = user3
然后它将使用 user.access= user1,user2,user3 更新我的 sat1.properties 文件
我不确定我是否遵循“环境”的想法。我假设您克隆了 git repo 并且您有一些可以使用的目录结构。无论如何,当您要更新的文件位于您的工作区中时,您可以执行以下操作:
pipeline{
parameters { string(name: 'userid', defaultValue: 'test1', description: '') }
agent {label 'master'}
stages{
stage('1'){
steps{
script{
// read content to map
Map content = readProperties file: "a.properties"
List userAccessValue = content["user.access"].tokenize(",")
// modify desired value
userAccessValue.add(params.userid)
// modify map
content["user.access"]=userAccessValue.join(",")
// recreate content: convert map to list and then to string separating each key=value with OS line separator
String listAsString = content.collect().join(System.getProperty("line.separator"))
// write everything back, overwriting previous content
writeFile file: "a.properties", text: listAsString
}
}
}
}
}
如果你的属性文件很少,你可以使用 dir 指令:
dir("dir1/location1"){
// read content to map
Map content = readProperties file: "a.properties"
...
}
dir("dir2/location2"){
// read content to map
Map content = readProperties file: "a.properties"
...
}
或者您可以创建专用方法来导航到特定目录并覆盖文件(overwriteFile 当然是我在第一个示例中给出的代码):
pipeline{
parameters { string(name: 'userid', defaultValue: 'test1', description: '') }
agent {label 'master'}
stages{
stage('1'){
steps{
script{
multipleOverwrite(["dir1/location1", "dir2/location2"])
}
}
}
}
}
def multipleOverwrite(list){
list.each{loc ->
dir(loc){
overwriteFile("a.properties")
}
}
}