4

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

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

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

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

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

因此,我们找不到获取TRIGGER time的方法,而不是构建 start time

当然,也有一些不方便的解决方案,例如:

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

我们试图找到适合我们需求的插件,并找到 了这个插件,但它只能在手动(UI“立即构建”点击)模式下工作。

Jenkins是否有任何插件可以在周期性触发时计算动态参数?

谢谢!

4

2 回答 2

4

您可以使用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指定时间的参数。
于 2012-05-15T10:35:27.847 回答
2

两个建议:

  1. 恕我直言,触发工作是一个完全合理的解决方案。您可以使用更方便的方法来触发作业 -参数化触发器插件

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

于 2012-05-15T05:56:18.723 回答