Jenkins…在Jenkins中使用Groovy修改XML文件中的XML标记值

Jenkins…在Jenkins中使用Groovy修改XML文件中的XML标记值,jenkins,groovy,Jenkins,Groovy,我正在使用jenkins进行自动部署 我需要使用groovy脚本修改xml文件中的xml标记值。我正在使用下面的groovy代码。当我尝试编辑xml标记值时,收到错误未分类字段xml.uti.node错误 Node xml = xmlParser.parse(new File("c:/abc/test.xml")) xml.DeployerServer.host[0] = '172.20.204.49:7100' FileWriter fileWriter = new FileWriter("c

我正在使用jenkins进行自动部署

我需要使用groovy脚本修改xml文件中的xml标记值。我正在使用下面的groovy代码。当我尝试编辑xml标记值时,收到错误未分类字段xml.uti.node错误

Node xml = xmlParser.parse(new File("c:/abc/test.xml"))
xml.DeployerServer.host[0] = '172.20.204.49:7100'
FileWriter fileWriter = new FileWriter("c:/abc/test.xml")
XmlNodePrinter nodePrinter = new XmlNodePrinter(new PrintWriter(fileWriter))
nodePrinter.setPreserveWhitespace(true)
nodePrinter.print(xml)
我需要修改主机标记值,主机在DeployerServer标记中可用


任何帮助都将不胜感激。

以下是脚本,在线评论:

//Create file object
def file = new File('c:/abc/test.xml')
//Parse it with XmlSlurper
def xml = new XmlSlurper().parse(file)
//Update the node value using replaceBody
xml.DeployerServer.host[0].replaceBody '172.20.204.49:7100'
//Create the update xml string
def updatedXml = groovy.xml.XmlUtil.serialize(xml)
//Write the content back
file.write(updatedXml)

我使用powershell在app.config文件中进行了此更改。 我的问题是密码。因此,我在jenkins中创建了一个凭证来存储密码。 如果不需要使用凭据,只需删除withCredentials部分

这是我的詹金斯档案的一部分:

def appConfigPath = "\\server\folder\app.config"

stage('Change App.Config'){
    steps{
        withCredentials([string(credentialsId: 'CREDENTIAL_NAME', variable: 'PWD')]) {
            powershell(returnStdout: true, script: '''
                Function swapAppSetting {
                    param([string]$key,[string]$value )
                        $obj = $doc.configuration.appSettings.add | where {$_.Key -eq $key }
                    $obj.value = $value
                }

                $webConfig = "'''+appConfigPath+'''"

                $doc = [Xml](Get-Content $webConfig)

                swapAppSetting 'TAG_TO_MODIFY' 'VALUE_TO_CHANGE'

                $doc.Save($webConfig)
            ''')
        }
    }
}

别忘了更新你的powershell。(最低版本3)

我想在管道脚本中读取/操作CSProj文件和NUSPEC文件。如果没有可怕的“SAXParseException:prolog中不允许内容”,我就无法通过parseText()

关于此错误消息,有很多线程。不清楚的是CSProj和NUSPEC文件都是带有BOM的UTF-8,但这是不可见的

更糟糕的是,我一直在尝试自动创建NUSPEC文件,但我无法告诉工具更改文件编码。 上面的答案帮助解决了我的问题,有一次我添加了代码以查找65279作为第一个字符(并删除了它)。然后我可以解析XML并执行上述操作


似乎没有什么好的线索可以把这个摘要放在上面,所以把它添加到一个关于Jenkins,Groovy&XML文件的线索中,这就是我发现这个“已知Java”问题的地方

需要提及的重要细节:1。xml将是您的根节点,您不能再次指定ist。2.阵列访问[0]必须存在3。您必须在grooy沙箱中允许“replaceBody”方法