Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源

Jenkins的Lockable Resource插件允许在Jenkins作业中进行资源锁定和同步。在本文中,我们将重点介绍如何在Freestyle Job中根据参数动态绑定资源。

实际问题

测试团队尚未转移到Jenkins的Pipeline技术栈,Freestyle的Jenkins Job还会长期存在。我们的测试覆盖全平台,因此我们创建了多个Lockable Resource来对应各种操作系统的测试设备:ANDROIDIOSMACWIN。另有4台各平台的测试设备连接了专用的混音设备,用于测试音乐相关的功能,它们对应的Lockable Resource为:ANDROID_MIXINGIOS_MIXINGMAC_MIXINGWIN_MIXING

以前在Jenkins上共创建了8个Freestyle的Jenkins Job对应各个测试设备,每个Job启动时锁定了相应的Lockable Resource,而这8个Job运行的测试代码都是相同的。每个程序员都是处女座,而一个奈斯的程序员是尊重用户的处女座。我依然会沿用Freestyle的Job类型,创建一个参数化的Job,根据参数动态锁定对应的Lockable Resource。这在Pipeline中实现起来是很容易的,但是在Freestyle Job中就需要一些技巧。

解决方案

Lockable Resource支持3种锁定资源的方法:

  • 指定资源的名称:构建时尝试锁定指定的资源。如果某些(或全部)资源已被其他构建锁定,则该构建将排队等待它们被释放。
  • 指定资源的标签(Label):具有相同标签的资源可以被视为一个资源池。通过指定标签和数量(默认为全部),可以锁定指定数量的相关资源。
  • 通过Groovy表达式指定资源:使用一个Groovy表达式判定资源是否适用于构建。该表达式应返回一个布尔值。除了访问Job的参数外,还可以使用以下变量:
    • resourceName:根据资源配置的资源名称
    • resourceDescription:根据资源配置的资源描述
    • resourceLabels:根据资源配置的标签

显然,通过Groovy表达式指定资源是最为灵活的方式

操作步骤

  1. 创建Choice Parameter: OS_NAME ,取值范围:ANDROIDIOSMACWIN
    Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源_第1张图片
  2. 创建Boolean Parameter: MIXING
    Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源_第2张图片
  3. 通过Groovy表达式指定Lockable Resource:resourceName==(MIXING ? OS_NAME + "_MIXING" : OS_NAME).toUpperCase()
    Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源_第3张图片

运行效果

测试1: ANDROID + MIXING → LOCK(ANDROID_MIXING)

Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源_第4张图片
在运行的console里面可以看到:ANDROID_MIXING被锁定

Running as SYSTEM
[lockable-resources] acquired lock on [ANDROID_MIXING]
测试2: MACOS - MIXING → LOCK(MACOS)

Jenkins的Lockable Resource插件 - 3:在Freestyle Job中实现根据参数动态绑定资源_第5张图片
在运行的console里面可以看到:MAC被锁定

Running as SYSTEM
[lockable-resources] acquired lock on [MAC]

这里的TIMESTAMP参数,请参考Jenkins的Lockable Resource插件 - 2:解决最多只能创建一个等待任务的问题

你可能感兴趣的:(软件开发,jenkins,ci/cd)