我正在构建jenkins管道,并且可以通过远程触发作业。我需要知道哪个IP触发了这项工作。所以我有一个groovy脚本,它返回远程IP。使用EnvInject-plugin,我可以在普通的自由式作业中轻松使用这个变量,但是如何在管道scirpt中使用它呢?我不能将EnvInject-plugin与pipeline-plugin一起使用:(
以下是获取IP的小脚本:
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]
答案 0 :(得分:0)
您可以创建共享库函数(有关示例和目录结构,请参阅here)。这是Jenkins的无证(或者很难找到任何文档)功能之一。
如果要将文件triggerIp.groovy
放在目录vars
中,该目录位于workflow-libs
根目录的JENKINS_HOME
目录中,并将您的代码放在该文件中。
完整的文件名将是$JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy
(您甚至可以为共享库创建一个git repo并将其克隆到该目录中)
// 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]
}
重启Jenkins后,从您的管道脚本中,您可以通过您提供的文件名调用该方法。
因此,从您的管道中调用def trigger = ipTrigger(currentBuild)
ipaddress将是,trigger.ip
(抱歉命名错误,无法提供原创内容)