java - Jenkins 插件中的变量替换

标签 java jenkins jenkins-plugins

我正在开发一个新的 Jenkins 插件,它将在 Jenkins 作业的构建阶段执行,并且需要允许用户在插件的作业配置中指定变量名(而不是文字值) .目的是当作业执行时,用户指定的变量名将被替换为与该变量关联的真实值,然后插件将在运行执行方法时使用该真实值。

例如,如果变量 MY_VARIABLE值为 myValue被作业的另一部分注入(inject)构建环境,值${MY_VARIABLE}在我的插件的作业配置中指定,那么我希望插件替换 ${MY_VARIABLE}变量的实际值为 myValue .

enter image description here

经过一些研究,我了解到 Jenkins 不会自动用作业配置中的变量替换它们各自的值,这必须由插件处理。我无法解决的是在我的插件中执行替换的最佳方法。到目前为止我找到的唯一解决方案是解析从作业配置传递的字符串以查看它是否与变量的正确模式匹配,然后在我的代码中查找值。

我的问题是 Jenkins API 是否提供了一个更好的解决方案,允许我的插件用实际值替换变量?

最佳答案

您可以检索构建环境——一个 EnvVars 对象——它有一个便捷的方法 expand(String) .

这会识别 $VARIABLE${VARIABLE} 风格的字符串,并替换为环境中的相应值。

例如:

@Override
public boolean perform(AbstractBuild build, Launcher launcher,
  BuildListener listener) throws IOException, InterruptedException {
    ...
    final EnvVars env = build.getEnvironment(listener);
    String expandedDbUrl = env.expand(dbUrl);
    ...
}

关于java - Jenkins 插件中的变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512887/

相关文章:

java - 让它漂亮 : processing an array concurrently

java RMI + 源命中服务器来自互联网或来自内网

node.js - 勒纳致命 : ambiguous argument 'origin/heads/origin/master...heads/origin/master' : unknown revision or path not in the working tree

Jenkins 与 Sonar 集成不起作用

jenkins - 什么是 Jenkins 的种子工作,它是如何运作的?

java - 在 Wildfly 16 的应用程序中加载 pk12 文件

SonarQube 的 C 插件

jenkins - 是否可以暂停一个阶段,直到 Jenkins 声明性管道中的某个时间到达?

jenkins - Jenkins 电子邮件扩展插件发送的电子邮件未收到?

java - 如何将一组允许值中的字符串参数传递给函数