Jenkins-如何使用Groovy Postbuild插件设置环境变量

Jenkins-如何使用Groovy Postbuild插件设置环境变量,jenkins,groovy,jenkins-build-flow,Jenkins,Groovy,Jenkins Build Flow,我在谷歌上做了很多关于这个问题的研究,但没有发现任何有助于解决我的问题的东西 我试图解析Jenkins作业的控制台输出并设置环境变量。我需要在我的父作业中使用这个变量,它将在不同的从机上运行 我可以使用 def build = Thread.currentThread().executable def matcher = manager.getLogMatcher(".*myEnvironemntValue: (.*)") if(matcher != null && m

我在谷歌上做了很多关于这个问题的研究,但没有发现任何有助于解决我的问题的东西

我试图解析Jenkins作业的控制台输出并设置环境变量。我需要在我的父作业中使用这个变量,它将在不同的从机上运行

我可以使用

def build = Thread.currentThread().executable    
def matcher = manager.getLogMatcher(".*myEnvironemntValue: (.*)")

if(matcher != null && matcher.matches()) {
    log('found my value')
    myEnvironemntValue= matcher.group(1).substring(0)
    def pa = new ParametersAction([
          new StringParameterValue("MY_ENV_VALUE", myEnvironemntValue)
    ])
    build.addAction(pa)
    manager.addInfoBadge(myEnvironemntValue)
}

更新 我有一个作业(父作业),我将使用DSL脚本调用其他子作业,如

def b1 = build("child_job1", NODE: node)
def b2 = build("child_job2", NODE: node)
子作业
Child\u job 1
Child\u job 2
是多阶段作业,它们在不同阶段依次调用其他作业,例如
phase1\u job
phase2\u job
phase3\u job

一旦job
phase3\u job
执行完毕,我想从它的控制台获得一个特定的值



有人能帮忙解决这个问题吗?如果其他插件可以帮助我获取控制台值并将其设置为环境变量,那么我可以使用其他插件。需要注意的一点是,Groovy Post build运行在主机上,因此在主机上设置环境变量可能不是您想要的

也就是说,可能有很多方法可以将这些信息传递给家长。父作业是否正在等待子作业完成?如果是这样,您可以将环境变量保存为工件,并使用Jenkins模型、http甚至文件系统(如果父对象在主对象上运行,或者您通过父Groovy后期构建访问它)将其下拉


这能解决你的问题吗?如果没有,你能详细说明一下事情是如何设置的,并给我们举个例子吗

谢谢你的回复。是,父作业等待子作业执行结束。我已经为我的问题添加了更新谢谢澄清!在dsl的最末端使用复制上一次成功构建的工件如何?例如,像guy在做什么?我不能复制工件,因为如果我从groovy脚本创建一个文件,它会在服务器上而不是从节点上创建。此外,我将从父作业调用多个子作业,所有子作业都将使用相同的groovy脚本抱歉,我可能会再次感到困惑。。。您是否试图将一个已完成作业中的工件放入另一个作业的工作区?那么复制工件插件应该能够处理这个问题。它作为作业中的生成步骤运行。。它会将工件从一个作业的上一次成功、失败、不稳定等复制到另一个作业的从机上的工作区。因此,如果在phase3_作业构建步骤之后将该构建步骤添加到child_job2,则可以获取phase3_作业工件并将其拉入child_job2。关于从phase3_作业中保存工件,您是正确的,在后期构建中执行该操作会将其放在服务器上,而不是从机上。您可以在构建步骤中保存它吗?例如,在脚本步骤中,如“echo ENV_WORLD>my_file_on_the_slave.txt”。jenkins模型还能够使用build.getWorkspace().createTextTempFile(“temp”、“hello world”)之类的东西直接从父级将文件保存到从级上