如何通过 Jenkins 参数修改 GIT 中的环境属性文件

问题描述 投票:0回答:1

这是我的用例。 在我的项目中,我们有 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 文件

jenkins-pipeline devops jenkins-plugins
1个回答
0
投票

我不确定我是否遵循“环境”的想法。我假设您克隆了 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")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.