专栏首页持续集成如何通过 Jenkins 进行资源的锁定和释放

如何通过 Jenkins 进行资源的锁定和释放

业务场景

日常工作中需要切换到不同平台(包括 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

1. 设置 Lockable Resources

  • Jenkins -> configuration -> Lockable Resources Manager -> Add Lockable Resourc

2. 查看资源池

  • Lockable Resources 显示有两个资源可用

3. 测试锁资源

  • 这里配置的是参数化类型的 Job,可以选择不同平台,不同仓库进行构建
  • 运行第一个 Job
  • 查看当前可用资源数量 Free resources = 1,看到已经被 #47 这个 Job 所使用
  • 继续运行第二个 Job
  • 查看当前可用资源数量 Free resources = 0,看到已经被 #48 这个 Job 所使用
  • 最关键是这一步,如果继续运行第三个 Job,是否能够被继续行呢
  • 可以看到这个任务没有被执行,通过日志发现,当前正在等待可用的资源

4. 测试释放资源

  • 现在释放一个资源,看下第三个 Job 是否能拿到资源,并且执行
  • 从下图可以看到 第三个 Job 已经运行成功了

Jenkins pipeline 代码

整个 pipeline 最关键的部分就是如何上锁和释放,这里是通过 lock 和 input message 来实现。

当前 Job 只要用户不点击 Yes,就会一直处于没有完成的状态,那么的它的锁会一直生效中。直到点击 Yes, Job 结束,锁也就释放了。

具体可以参考下面的 Jenkinsfile。

pipeline {
    agent {
        node {
            label 'PreDevENV'
        }
    }
    options {
        lock(label: 'PreDevENV', quantity: 1)
    }

    parameters {
        choice(
            name: 'platform',
            choices: ['Linux', 'AIX', 'Windows', 'Solris', 'HP-UX'],
            description: 'Required: which platform do you want to build')
        choice(
            name: 'repository',
            choices: ['repo-0.1', 'repo-1.1', 'repo-2.1', 'repo-3.1', 'repo-4.1'],
            description: 'Required: which repository do you want to build')
        string(
            name: 'branch',
            defaultValue: '',
            description: 'Required: which branch do you want to build')
    }

    stages {
        stage('git clone'){
            steps {
                echo "git clone source"
            }
        }
        stage('start build'){
            steps {
                echo "start build"
            }
        }
        stage('install build'){
            steps{
                echo "installing"
            }
        }
        stage('unlock your resource'){
            steps {
                input message: "do you have finished?"
                echo "Yes, I have finished"
            }
        }
    }
}

本文分享自微信公众号 - DevOps攻城狮(DevOps-Engineer),作者:Peter Shen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通过 generic-webhook-trigger 插件实时获取 Bitbucket Repository Events

    本篇讨论如何通过 Jenkins generic webhook trigger 插件来获取 Git 仓库事件(Events)。比如获取仓库的 Pull Req...

    Peter Shen
  • 自动化测试element位置变化怎么办?

    在我们的系统中存在这样一个场景,当管理员登录时候,点击头像有三个选项,下拉菜单是这样的:

    Peter Shen
  • 一名软件测试工程师的成长之路

    关注本公众号的读者们可能会感到困惑,我最开始分享是软件功能测试、自动化测试;之后短暂的分享过一点开发;再之后主要在分享 CI/CD 及 DevOps 相关的内容...

    Peter Shen
  • MySQL执行Select语句将结果导出到文件

    -N代表输出SQL语句执行结果中不带第一行的字段名称,-e表示要执行SQL语句,如果是文件不用加上-e参数

    JouyPub
  • 定时器有几种实现方式?

    在开始正题之前,先闲聊几句。有人说,计算机科学这个学科,软件方向研究到头就是数学,硬件方向研究到头就是物理,最轻松的是中间这批使用者,可以不太懂物理,不太懂数学...

    kirito-moe
  • 让sublime实现js控制台(前提是安装了nodejs)

    用户1749219
  • 真空竟能热传导,甚至能传播声音!华人团队新研究突破认知,登上Nature

    他们用实验证明了:热量可以跨越几百纳米的完全真空,从一片金属传导到另一片金属上。这一发现未来在可能在芯片散热设计中发挥重要的作用。

    量子位
  • 【Scikit-Learn 中文文档】内核岭回归 - 监督学习 - 用户指南 | ApacheCN

    1.3. 内核岭回归 Kernel ridge regression (KRR) (内核岭回归)[M2012]_ 由 使用内核方法的 :ref:`ridge...

    片刻
  • Android多媒体录制--MediaRecorder视频录制

    听着music睡
  • angularjs学习第一天笔记

        您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,...

    小小许

扫码关注云+社区

领取腾讯云代金券