1

我正在处理一个多配置的 Jenkins 项目。两个配置轴是 Win/Linux 和 32/64 位。我想在版本控制更改时构建主要配置(32 位 Windows),但每周只构建一次其他配置(只是为了确保它们保持合理的最新状态)。

是否可以在不将项目分解为多个单独项目的情况下实现此计划?

4

2 回答 2

1

不幸的是,此时没有直接通过 Jenkins AFAIK。每个作业只有一个时间处理程序,多配置是一个作业,它有一个计时器。

有一个 hack,但它会很困难,而且我不确定所需的确切脚本,但如果你可以检查一周中的哪一天,你可以在你的脚本中尝试这样的事情:

if (day == Sunday |OR| $NODE_NAME == win32), then:
  <carry out build steps here>
finish

这边走:

  • 如果这一天是星期日,则所有步骤都将执行,而与 Node.js 无关。
  • 如果节点名是win32,也执行该步骤。
  • 但是,如果 day 不是星期日并且 $NODE_NAME 是 win64 或 linux32 或 linux64,则不会执行任何步骤。

请注意,这$NODE_NAME是一个标准的 Jenkins 环境变量。但是,这假定您的构建是通过“执行 Shell”或“执行 Windows 批处理”完成的

其他人不应该同时建造有什么理由吗?

您可以创建两个作业,一个用于您的主要作业,因此它是一个自由式作业,另一个用作 Win64/Linux 的多配置,并将其保留在单独的每周计时器上。

于 2012-10-04T21:26:21.430 回答
1

请考虑这一点:

为什么不每次都构建所有可用的配置
- 毕竟,这就是持续集成的全部理念......

可以在短时间内丢弃这些构建的工件,
因此它们不会阻塞您的磁盘,但如果有任何东西破坏了您的构建 - 您会立即知道。

还可以设置从属队列一次运行一个作业,这样构建就不会使构建服务器超载。

另一个解决方案需要:

  • 为您的构建提供两个“启动器”
  • 所有从站都可用

Job_A1设置为触发Job_B(主要的多配置构建过程)的每周调度程序。只要有源代码更改,就将Job_A2
设置为运行Job_B 。 设置Job_B以了解它是由Job_A1还是Job_A2触发(可以将其名称作为参数传递), 并且还设置Job_B以忽略来自Job_A2的调用(“exit 0”),如果当前配置。不同于Windows-32bit

这样,只要有源代码控制更改,所有 4 种配置都会运行,但只有一个会真正构建。

祝你好运!

于 2012-10-05T08:46:59.150 回答