【发布时间】:2018-12-30 14:28:14
【问题描述】:
我已经实现了一个自定义的管道兼容 Jenkins 插件,它扩展了 SynchronousNonBlockingStepExecution 类。我想在 Jenkins Master 和 Jenkins Slave 上实现特定的执行逻辑。如果该步骤在 Master 上运行,我如何从插件代码中检查?
【问题讨论】:
我已经实现了一个自定义的管道兼容 Jenkins 插件,它扩展了 SynchronousNonBlockingStepExecution 类。我想在 Jenkins Master 和 Jenkins Slave 上实现特定的执行逻辑。如果该步骤在 Master 上运行,我如何从插件代码中检查?
【问题讨论】:
通常,插件执行发生在 Jenkins 从站的构建执行器上。但是,要验证插件代码的哪一部分在主/从上执行,您可以使用以下内容。
NODE_NAME env var。您可以通过http://localhost:8080/env-vars.html 找到 Jenkins 实例中所有可用的环境变量(替换主机名以匹配您的实例)。在那里,您会找到 NODE_NAME:NODE_NAME
如果构建在代理上,则为代理名称,如果在主机上运行,则为“master”
记录/打印环境变量。下面是一个代码 sn-p,它显示了如何打印它。在那里,我展示了使用setUp method of hudson BuildWrapper 的示例以供参考。
@Override
public Environment setUp(final AbstractBuild build, final Launcher launcher,
final BuildListener listener) throws IOException, InterruptedException {
String node = System.getenv("NODE_NAME");
String msg = "I'm executing on node: " + node;
listener.getLogger().println(msg); //prints to build log
logger.info(msg); // slf4j logger - prints to catalina log/jenkins log
}
或者,您也可以将值写入文件,然后从那里读取值。
【讨论】:
System.getenv("NODE_NAME") 返回 null - 不是 master 或代理名称。