Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用groovy脚本在jenkins管道中注入变量_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

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

使用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=

我正在建立一个jenkins管道,该作业可以通过远程操作触发。我需要知道哪个IP触发了作业。我有一个小groovy脚本,它返回远程IP。有了EnvInject插件,我可以在正常的自由式作业中轻松地使用这个变量,但是如何在scirpt管道中使用这个变量呢?我无法将EnvInject插件与管道插件一起使用:(

以下是获取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]

您可以创建一个共享库函数(参见示例和目录结构)。这是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]
}