繁体   English   中英

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

[英]Inject variable in jenkins pipeline with groovy script

我正在建立一个詹金斯管道,这项工作可以由远程触发。 我需要知道哪个IP触发了这项工作。 因此,我有一个简单的脚本,它返回了远程IP。 使用EnvInject-plugin,我可以轻松地在常规的自由式作业中使用此变量,但是如何在管道脚本中使用它呢? 我不能将EnvInject-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]

您可以创建一个共享库函数(有关示例和目录结构,请参见此处 )。 这是Jenkins的未记录(或者很难找到任何文档)功能之一。

如果您将文件triggerIp.groovy放在目录vars ,该目录位于JENKINS_HOME根目录下的目录workflow-libs中,然后将代码放入该文件中。 完整的文件名将是$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 (抱歉,命名错误,无法提供原始内容)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM