Jenkins - 有没有办法解析控制台输出并设置环境变量

abd*_*ulH 5 jenkins

我对詹金斯比较陌生。我进入了一个场景,我需要读取控制台输出并找到一个特定的字符串并将其设置为环境变量。这个变量我会在一些下游工作中使用。

例如:我的詹金斯工作的控制台将包含类似

product_build_number: 123456

我已经研究过 FindText,日志解析器之类的插件,但它们不能帮助我将此值设置为环境变量

有人可以帮助找到这个数字并将其传递给下游工作吗?

**

更新答案:

**

def matcher = manager.getLogMatcher(".*product_build_number=(\\d+.*)")
if(matcher.matches()) {
    pbn= matcher.group(1).substring(0)
    manager.build.setDescription(pbn) // you can do anything with this here
}
Run Code Online (Sandbox Code Playgroud)

luk*_*a5z 4

考虑使用Groovy Postbuild Plugin

例子:

下面的脚本会放置一个警告徽章,如果检测到使用了已弃用的方法,则将构建标记为不稳定。

if(manager.logContains(".*uses or overrides a deprecated API.*")) {
    manager.addWarningBadge("Thou shalt not use deprecated methods.")
    manager.createSummary("warning.gif").appendText("<h1>You have been warned!</h1>", false, false, false, "red")
    manager.buildUnstable()
}
Run Code Online (Sandbox Code Playgroud)

解决方案

完整的解决方案不仅使用Groovy Postbuild 插件来解析控制台输出并设置变量BUILD_MSG,还需要参数化触发器插件来使用预定义参数触发下游作业MSG=${BUILD_MSG}。下游作业自动访问MSG参数。

Groovy 后期构建脚本:

import hudson.model.*


matcher = manager.getLogMatcher('^build msg: (.*)$')

if (matcher.matches()) {
    buildMsg=matcher.group(1)

    manager.build.addAction(
        new ParametersAction([
            new StringParameterValue("BUILD_MSG", "${buildMsg}")
        ])
    )
}
Run Code Online (Sandbox Code Playgroud)