我有一个Jenkins实例,该实例的工作严重受服务器偏见。我正在运行诸如停止和启动服务之类的任务,检查消息队列是否处于活动状态,将文件复制到特定位置等。我有一个表,该表由与每个服务器关联的各种值组成,例如名称,RSA密钥,家庭位置,进程控制等等。
作为一个示例,一个管道首先检查五个服务器是否处于活动状态,然后重新启动进程,然后运行性能测试。看起来像这样;
node {
stage('check_servers'){
build job: "Check Server", parameters: [string(name: 'Server', value: 'server1@example.com'), string(name: 'home_location', value: '/opt/bob/carolgees/bin'), string(name: 'process', value: 'big_process')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server2@example.com'), string(name: 'home_location', value: '/opt/bob/carolgees/bin'), string(name: 'process', value: 'bigger_process')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server3@example.com'), string(name: 'home_location', value: '/opt/bob/holness/bin'), string(name: 'process', value: 'small_process')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server4@example.com'), string(name: 'home_location', value: '/opt/bob/hope/bin'), string(name: 'process', value: 'smaller_process')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server5@example.com'), string(name: 'home_location', value: '/opt/no/bob/bin'), string(name: 'process', value: 'what_process')]
}
}
但是,这变得非常困难,尤其是当我们努力工作并确定使工作更加灵活的额外价值时。我想做的就是将管道更改为;
node {
stage('check_servers'){
build job: "Check Server", parameters: [string(name: 'Server', value: 'server1@example.com')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server2@example.com')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server3@example.com')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server4@example.com')]
build job: "Check Server", parameters: [string(name: 'Server', value: 'server5@example.com')]
}
}
然后使每个作业都能够访问查找表,并使用服务器名称来访问作业所需的其他值。
理想情况下,我希望能够使用脚本中的名称,例如;
echo $Server('server5@example.com').home_location
但是我不知道那是否是一回事。这些作业都是Powershell脚本,因此它必须是基于Powershell的解决方案。
我可以看到传入单个字符串参数的解决方案,其中包含定界的值列表,但这又不是很灵活(添加列时我需要更改每个作业)。
有人可以建议一种方法吗?
答案 0 :(得分:0)
谢谢Vitalii,您的建议足以使我想起我在其他地方使用过的东西。我已经将一个名为ServerXmlContent的XML文件设置为配置文件,可以将其带入每个作业。在Powershell工作开始时,我有
[xml]$content = Get-Content - Path $env:ServerXmlContent
这将显示XML对象$ content中的所有详细信息。现在,我需要做的只是Select-Xml,以从通过管道传入的服务器中获取相关的服务器详细信息;
[string]$home_location = Select-Xml -Xml $content -XPath "//server[hostname='$env:server']/home_location/text()"
[string]$process = Select-Xml -Xml $content -XPath "//server[hostname='$env:server']/process/text()"