【问题标题】:Jenkins trigger time parameters plug-inJenkins触发时间参数插件
【发布时间】:2012-05-15 18:35:27
【问题描述】:

我们有很多处理一些与日期相关的数据的詹金斯任务, 例如,每小时、每天的聚合。

所有这些都配置为定期运行 但是原生 jenkins 无法使用动态参数自动触发定期作业,我们必须在脚本中计算所需参数 执行时间处理时间, 例如在 bash 脚本代码中:

PREVHOUR=$(date --date="-1 hour" "+%Y-%m-%d %H")

我们还可以使用 $BUILD_ID 环境变量来获取构建开始时间。

问题是: 当所有的槽(工人)都忙的时候,詹金斯把这个工作放到 队列。 而这样的任务在进行时参数计算会出错 触发后一小时执行。

所以,我们找不到获取TRIGGER时间的方法,不是构建开始时间

当然,有几个不方便的解决方案:

  • 在保留的机器上运行简单的定期作业,该作业通过带有参数的 url 触发其他作业
  • 跟踪脚本上次运行时间的文件

我们已经尝试找到适合我们需求的插件,并且已经找到 this plugin,但它只能在手动(UI“立即构建”点击)模式下工作。

Jenkins有没有插件可以计算周期性触发时的动态参数?

谢谢!

【问题讨论】:

    标签: parameters jenkins jenkins-plugins


    【解决方案1】:

    您可以使用ScriptTrigger 插件。它定期评估 Groovy 脚本并支持参数化构建。

    1. TRIGGER_TIME 参数添加到项目中。
    2. 使用 Groovy 脚本:

      now = new Date();
      param = new File("trigger.time");
      param.write("TRIGGER_TIME="+now.toString());
      return true;
      

      它会在每次轮询时将触发时间写入属性文件“trigger.time”并触发新的构建。

    3. Properties File Path(在高级设置中)设置为“trigger.time”,每个计划的构建都会得到TRIGGER_TIME参数和指定的时间。

    【讨论】:

    • 非常感谢!听起来不错,但我担心并发构建:据我所知,当出现一些空闲插槽时,新构建将读取一个属性文件,不是吗?我的意思是,他们可能会计算这种构建的最后触发时间。但我看到了防止它的方法:在每次触发时将时间值附加到文件中,并通过脚本读取和删除第一个值。可能,我们应该注意脚本内部的文件写锁定/等待锁定释放。
    • 如果您喜欢某个答案,请通过单击点上方的向上箭头来显示它。
    • 如何使用TRIGGER_TIME 来轮询SCM?答案似乎已经告诉了如何创建TRIGGER_TIME
    【解决方案2】:

    两个建议:

    1. 恕我直言,触发作业是一个完全合理的解决方案。不过,您可以使用更方便的方法来触发作业 - Parameterized Trigger Plugin

    2. 另一种方法是使用EnvInject Plugin。例如,您可以在脚本中计算参数,将它们保存到属性文件中,然后使用插件从文件中注入环境变量。 See this answer

    【讨论】:

    • 感谢您的回复!我认为第二个建议更方便,因为我在另一个(但实际上非常相似)答案中评论了一些注释。
    • 是的,这个也碰一下 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2022-06-13
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多