Jenkins的Lockable Resource插件允许在Jenkins作业中进行资源锁定和同步。在本文中,我们将重点介绍如何在Freestyle Job中根据参数动态绑定资源。
测试团队尚未转移到Jenkins的Pipeline技术栈,Freestyle的Jenkins Job还会长期存在。我们的测试覆盖全平台,因此我们创建了多个Lockable Resource来对应各种操作系统的测试设备:ANDROID
、IOS
、MAC
、WIN
。另有4台各平台的测试设备连接了专用的混音设备,用于测试音乐相关的功能,它们对应的Lockable Resource为:ANDROID_MIXING
、IOS_MIXING
、MAC_MIXING
、WIN_MIXING
。
以前在Jenkins上共创建了8个Freestyle的Jenkins Job对应各个测试设备,每个Job启动时锁定了相应的Lockable Resource,而这8个Job运行的测试代码都是相同的。每个程序员都是处女座,而一个奈斯的程序员是尊重用户的处女座。我依然会沿用Freestyle的Job类型,创建一个参数化的Job,根据参数动态锁定对应的Lockable Resource。这在Pipeline中实现起来是很容易的,但是在Freestyle Job中就需要一些技巧。
Lockable Resource支持3种锁定资源的方法:
显然,通过Groovy表达式指定资源是最为灵活的方式
OS_NAME
,取值范围:ANDROID
、IOS
、MAC
、WIN
MIXING
resourceName==(MIXING ? OS_NAME + "_MIXING" : OS_NAME).toUpperCase()
ANDROID
+ MIXING
→ LOCK(ANDROID_MIXING
)
在运行的console里面可以看到:ANDROID_MIXING
被锁定
Running as SYSTEM
[lockable-resources] acquired lock on [ANDROID_MIXING]
MACOS
- MACOS
)Running as SYSTEM
[lockable-resources] acquired lock on [MAC]
这里的TIMESTAMP参数,请参考Jenkins的Lockable Resource插件 - 2:解决最多只能创建一个等待任务的问题