我正在处理一个多配置的 Jenkins 项目。两个配置轴是 Win/Linux 和 32/64 位。我想在版本控制更改时构建主要配置(32 位 Windows),但每周只构建一次其他配置(只是为了确保它们保持合理的最新状态)。
是否可以在不将项目分解为多个单独项目的情况下实现此计划?
我正在处理一个多配置的 Jenkins 项目。两个配置轴是 Win/Linux 和 32/64 位。我想在版本控制更改时构建主要配置(32 位 Windows),但每周只构建一次其他配置(只是为了确保它们保持合理的最新状态)。
是否可以在不将项目分解为多个单独项目的情况下实现此计划?
不幸的是,此时没有直接通过 Jenkins AFAIK。每个作业只有一个时间处理程序,多配置是一个作业,它有一个计时器。
有一个 hack,但它会很困难,而且我不确定所需的确切脚本,但如果你可以检查一周中的哪一天,你可以在你的脚本中尝试这样的事情:
if (day == Sunday |OR| $NODE_NAME == win32), then:
<carry out build steps here>
finish
这边走:
请注意,这$NODE_NAME
是一个标准的 Jenkins 环境变量。但是,这假定您的构建是通过“执行 Shell”或“执行 Windows 批处理”完成的
其他人不应该同时建造有什么理由吗?
您可以创建两个作业,一个用于您的主要作业,因此它是一个自由式作业,另一个用作 Win64/Linux 的多配置,并将其保留在单独的每周计时器上。
请考虑这一点:
为什么不每次都构建所有可用的配置?
- 毕竟,这就是持续集成的全部理念......
可以在短时间内丢弃这些构建的工件,
因此它们不会阻塞您的磁盘,但如果有任何东西破坏了您的构建 - 您会立即知道。
还可以设置从属队列一次运行一个作业,这样构建就不会使构建服务器超载。
另一个解决方案需要:
将Job_A1设置为触发Job_B(主要的多配置构建过程)的每周调度程序。只要有源代码更改,就将Job_A2
设置为运行Job_B 。
设置Job_B以了解它是由Job_A1还是Job_A2触发(可以将其名称作为参数传递),
并且还设置Job_B以忽略来自Job_A2的调用(“exit 0”),如果当前配置。不同于Windows-32bit。
这样,只要有源代码控制更改,所有 4 种配置都会运行,但只有一个会真正构建。
祝你好运!