当前位置: 首页 > 知识库问答 >
问题:

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

甄鹏云
2023-03-14

我正在构建一个jenkins管道,作业可以由远程触发。我需要知道哪个IP触发了作业。所以我有一个小Groovy脚本,它返回远程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]

共有1个答案

颛孙品
2023-03-14

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

如果您将文件< code>triggerIp.groovy放在目录< code>vars中,该目录位于< code>JENKINS_HOME根级别的目录< code>workflow-libs中,并将您的代码放在该文件中。完整的文件名将是< code > $ JENKINS _ HOME/workflow-libs/vars/IP trigger . 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触发器=ipTriger(当前构建)

IP地址将是,trigger.ip(抱歉命名不好,无法想出原创的东西)

 类似资料:
  • 我们有重复使用的詹金斯管道和使用相同功能的一些管道。现在我的问题是:重用它们的正确方法是什么。我使用一个共享库,但我不知道我是否必须添加漂亮的脚本或完整的管道?漂亮的脚本似乎是在根中执行的,而不是我的詹金斯工作区,这是一个大问题。你是如何正确处理这件事的?

  • 我正在尝试使用groovy构建脚本将构建管道迁移到“管道插件”。 我的管道通常是: 测试(梯度) 我想在我的jenkins构建脚本中使用像version/group等的gradle变量来发布到artiFactory中的正确文件夹中。这是artiFactory插件过去会为我处理的事情。如何实现? 对于单个gradle项目,我使用如下内容:

  • 问题内容: 我想将“ $ WORSKPACE”变量用于jenkins脚本调用的常规文件。但是在SO上找到的所有解决方案都失败了: 我得到的消息:脚本不允许使用groovy.lang.GroovyObject方法setProperty java.lang.String java.lang.Object(JenkinsHelper.name)。管理员可以决定是批准还是拒绝此签名。 对设置为允许Jenk

  • 问题内容: 我有以下内容: 作为全球描述共享库创建这里。没什么特别的,文件夹中的一个脚本名为,可以尝试-工作。图书馆被称为 名为 调用的管道脚本正在调用 现在,当我像这样运行构建时,出现以下错误: 错误:找不到库的任何定义[myOneLib] 但是当我简单地将行移动到所有工作的顶部时。 所以我的问题是如何在导入/包含的脚本中使用?还是有其他方法可以指定全局库? 很少有其他注释:并且都在同一个git

  • 我有一个领事密钥AAA / BBB /测试密钥,如“1,2,3”,AAA / CCC /测试密钥,如“4,5,6”等。 我在几个作业之间有一个共享的 Jenkinsfile。 我不想在每一份工作中都使用Jenkinfile。我想通过工作名称访问密钥,但我无法实现。 如果我在 URL 中对密钥进行硬编码,它可以工作,例如 但是,当我尝试在URL中使用时,它不起作用: 如何访问使用Groovy脚本定义

  • 我正在尝试在我的Jenkins管道中使用groovy-postbuild-plugin,我可以让它显示纯文本,但我不能使用它的参数。 所以这是有效的: 但是这个没有: 这是我得到的错误: