我需要为maven构建提供服务器名称 . 在maven构建期间,此服务器名称将用于进行调用,服务器在该服务器上执行某些测试 .
我们的服务器上有jenkins从属服务器,并使用标签进行分组
例
Slaves/Node | Label
Server1 | BackEndServers
Server2 | BackEndServers
Server3 | FrontEndServers
Server4 | FrontEndServers
使用Elastic Axis插件,我可以说在此节点标签上运行我的Jenkins作业(例如在BackEndServers上),并且将在两个服务器(Server1和Server2)上执行相同的项目 .
在我的情况下,我不能这样做,因为我的代码运行的BackEndServers上没有安装maven . 但是maven构建需要知道服务器名称 .
那么有一种方法可以从标签获取服务器名称,然后多次运行相同的作业将每个服务器名称传递给maven构建吗?
例
-
给我标签'BackEndServers'
-
获取节点名称'Server1,Server2'的列表
-
并为每个节点名称运行我的作业并将参数传递给它
-
又名
-
有工作(带参数Server1)
-
有工作(带参数Server2)
4 回答
列出标签名称LABELNAME的所有节点:
http://ServerIP:8080/label/LABELNAME/api/json?pretty=true
在构建作业的Maven命令中使用Jenkins environment variables,如 NODE_NAME 作为系统属性的值 . 例如:
在您的Maven项目(pom.xml)中,使用以下属性配置插件,该插件需要节点名称: $
以下是一些链接 - 如何远程触发Jenkins构建:
How to trigger Jenkins builds remotely and to pass paramter
Triggering builds remotely in Jenkins
Launching a build with parameters
如果可能的话,我不会这样做 . 但提供的信息应该可以帮助您找到解决方案 .
试试
Jenkins.getInstance().getComputer(env.NODE_NAME).getNode()
在official Doc上查看更多最后我创造了2个工作岗位 .
为我插入Jenkens节点并构建一串要使用的服务器
然后使用Dynamic Axis lable和我在Job 1中的列表来执行我的maven构建
在Job 1中 - 我使用了EnjEnv插件,它有一个'Evaludated Groovy Script'部分,基本上你可以做任何事情......但它应该返回一个属性映射 . 我不知道如何从Groovy脚本返回一个值,所以这对我来说很有用,因为我可以从几乎任何软件中引用属性(或环境变量)
然后我有一些问题将Environment var传递给我的下一份工作 . 所以我只是在Build过程中使用windows batc脚本将我想要的值写入属性文件
然后作为一个后期构建操作,我有一个“其他项目的触发器参数化构建”调用我的第二个工作,我将baseEnvMap.properties传递给它 .
然后在作为Multiconfig作业的Job 2上,我使用通过属性文件传递给作业2的环境var添加了动态轴 .
这将复制Job 2,并且每次都使用groovy脚本构建的值执行它,我可以在我的mvn参数中引用它 .