业务场景
日常工作中需要切换到不同平台(包括 Linux, AIX, Windows, Solris, HP-UX)不同的版本进行开发和验证问题,但是由于虚拟机有限,并不能保证每个开发和测试都有所以平台的虚拟机并且安装了不同的版本,因此准备各种各样的开发和测试环境会花费很长时间。
需求分析
对于这样的需求,一般都会首先想到 Docker;其次是从 Artifactory 取 Build 然后通过 CI 工具进行安装;最后从 Source Code 进行构建然后安装。
先说 Docker,由于我们所支持的平台繁多,包括 Linux, AIX, Windows, Solris, HP-UX, Docker 只适用于 Linux 和 Windows,因此不能满足这样的需求。
由于其他原因我们的 Artifactory 暂时还不能使用,最后只能选择用 Source Code 进行构建然后进行安装。这两种方式都需要解决锁定资源以及释放资源的问题。如果当前环境有人正在使用,那么这台虚拟机的资源应该被锁住,不允许 Jenkins 再去调用这台正在使用的 node,以保证环境在使用过程中不被破坏。
本文主要介绍如何通过 Jenkins Lockable Resources Plugin 来实现资源的上锁和解锁。
演示 Demo
设置 Lockable Resources
查看 Lockable Resources 资源池
测试锁资源
测试释放锁
Jenkins pipeline 代码
整个 pipeline 最关键的部分就是如何上锁和释放,这里是通过 lock 和 input message 来实现。
当前 Job 只要用户不点击 Yes,就会一直处于没有完成的状态,那么的它的锁会一直生效中。直到点击 Yes, Job 结束,锁也就释放了。
具体可以参考下面的 Jenkinsfile。
pipeline { |