使用groovy脚本在jenkins管道中注入变量

时间:2016-12-30 10:32:53

标签: jenkins groovy jenkins-pipeline

我正在构建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]

1 个答案:

答案 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(抱歉命名错误,无法提供原创内容)