使用groovy脚本在jenkins管道中注入变量
我正在建立一个jenkins管道,该作业可以通过远程操作触发。我需要知道哪个IP触发了作业。我有一个小groovy脚本,它返回远程IP。有了EnvInject插件,我可以在正常的自由式作业中轻松地使用这个变量,但是如何在scirpt管道中使用这个变量呢?我无法将EnvInject插件与管道插件一起使用:( 以下是获取IP的小脚本:使用groovy脚本在jenkins管道中注入变量,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我正在建立一个jenkins管道,该作业可以通过远程操作触发。我需要知道哪个IP触发了作业。我有一个小groovy脚本,它返回远程IP。有了EnvInject插件,我可以在正常的自由式作业中轻松地使用这个变量,但是如何在scirpt管道中使用这个变量呢?我无法将EnvInject插件与管道插件一起使用:( 以下是获取IP的小脚本: import hudson.model.* import static hudson.model.Cause.RemoteCause def ipaddress=
import hudson.model.*
import static hudson.model.Cause.RemoteCause
def ipaddress=""
for (CauseAction action : currentBuild.getActions(CauseAction.class)) {
for (Cause cause : action.getCauses()) {
if(cause instanceof RemoteCause){
ipaddress=cause.addr
break;
}
}
}
return ["ip":ipaddress]
您可以创建一个共享库函数(参见示例和目录结构)。这是Jenkins的一个未记录(或者很难找到任何文档)功能 如果要将文件
triggerIp.groovy
放入vars
目录中,该目录位于JENKINS_HOME
根目录下的workflow libs
中,并将代码放入该文件中。
然后,完整文件名将是$JENKINS_HOME/workflow libs/vars/ipTrigger.groovy
(您甚至可以为共享库创建git repo并将其克隆到该目录中)
在重新启动Jenkins之后,从管道脚本中,您可以根据指定的文件名调用该方法
因此,从管道中只需调用def trigger=ipTrigger(currentBuild)
ip地址将是,
trigger.ip
(很抱歉命名不正确,无法找到原始名称)也许更好的名称应该是trigger.originIPAddress
,这会让它后面的内容更清楚一点。谢谢你的回复!我没有vars文件夹,所以我创建了一个。重新启动后,我得到:java.lang.NoSuchMethodError:在步骤中没有找到这样的DSL方法“ipTrigger”,所以我想他没有找到该方法?的名称文件是ipTrigger.groovy,管道脚本中的调用与您相同(可能是文件名和调用不匹配吗?)我有什么想法吗?对不起,我错了。目录结构应该是$JENKINS_HOME/workflow libs/vars/ipTrigger.groovy
。请注意我在示例中省略的工作流libs
目录。更新的答案也很好谢谢,这很有效,但是在管道脚本中从哪里获得当前构建变量?好的,谢谢,但我得到了一个脚本中出现错误。也许您也知道这里的答案:
// workflow-libs/vars/ipTrigger.groovy
import hudson.model.*
import static hudson.model.Cause.RemoteCause
@com.cloudbees.groovy.cps.NonCPS
def call(currentBuild) {
def ipaddress=""
for (CauseAction action : currentBuild.getActions(CauseAction.class)) {
for (Cause cause : action.getCauses()) {
if(cause instanceof RemoteCause){
ipaddress=cause.addr
break;
}
}
}
return ["ip":ipaddress]
}