【问题标题】:Jenkins plugin development - how to check if plugin is executing on Jenkins MasterJenkins 插件开发 - 如何检查插件是否在 Jenkins Master 上执行
【发布时间】:2018-12-30 14:28:14
【问题描述】:

我已经实现了一个自定义的管道兼容 Jenkins 插件,它扩展了 SynchronousNonBlockingStepExecution 类。我想在 Jenkins Master 和 Jenkins Slave 上实现特定的执行逻辑。如果该步骤在 Master 上运行,我如何从插件代码中检查?

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    通常,插件执行发生在 Jenkins 从站的构建执行器上。但是,要验证插件代码的哪一部分在主/从上执行,您可以使用以下内容。

    1. 找出一个特定于您的从站的环境变量。为此,我使用NODE_NAME env var。您可以通过http://localhost:8080/env-vars.html 找到 Jenkins 实例中所有可用的环境变量(替换主机名以匹配您的实例)。在那里,您会找到 NODE_NAME:

    NODE_NAME

    如果构建在代理上,则为代理名称,如果在主机上运行,​​则为“master”

    1. 记录/打印环境变量。下面是一个代码 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
      }
      

    或者,您也可以将值写入文件,然后从那里读取值。

    【讨论】:

    • 尽管手册在您指向我的 URL 下说了什么,System.getenv("NODE_NAME") 返回 null - 不是 master 或代理名称。
    • 这有点奇怪。无论如何,您可以回退到替代方法。如果你的 master 和 slave 位于不同的 VM 上,那么你可以看到它被写入了哪个 VM 的文件系统。
    • 不幸的是,这似乎不是确定执行是否在 master 上发生的可靠方法。
    • 是的,当然。我的印象是,出于开发/调试目的,您需要知道这一点。我们当然需要一种更好的生产代码方式。知道您想要解决什么样的高级用例以便深入研究这一点会很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2014-10-28
    • 2021-09-06
    相关资源
    最近更新 更多