Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量

一、这是一个demo

不单单用作并发构建docker镜像,因为使用sh'''  也是shell,也可作用其他类似用途

Jenkins并发还有另一个写法(详情看 在下面第四个)(不好扩展,新增并发步骤需要写上)

而单stage并发可让传入的参数个数去控制流程步骤,如传入S1-S18会有18个步骤,传入S1-S5就会生成5个

二、pipeline
def build_docker(service) {
stages = {
    def thing = null
    waitUntil {
        // 获取一个资源
        thing = latch.pollFirst();
        return thing != null;
    }
    try {
        // 执行步骤 
        stage("构建${service}服务Docker镜像") {
            withEnv(["service=${service}"]){
            sh '''
                echo "正在构建 ${service} 镜像"
                sleep 15
            '''
            }
        }
    }
    finally {
        // 释放一个资源
        latch.offer(thing)
    }        
}
return stages
}

pipeline {
agent {
    node {
        label "master"
    }
}

environment {
    // 规范:从Jenkins传入的变量,必须在这里填写后在引用
    build_com = "${build_com}"
}
        
parameters {
    // 参数化构建
    string defaultValue: 'S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 S17 S18', description: '需要构建的服务', name: 'build_com', trim: true
}

options {
    // 添加控制台时间戳
    timestamps()
    // 超时时间/分
    timeout(30)
    // 不允许并发编译
    disableConcurrentBuilds()
}

stages {
    stage("开始") {
        steps {
            script {
                sh '''
                     echo "start"
                '''
            }
        }
    }
    
    stage("并发进行构建Docker镜像") {
        steps {
            script {
                def stages = [:]
                // 并行进程数量
                MAX_CONCURRENT = 5
                // 创建fifo
                latch = new java.util.concurrent.LinkedBlockingDeque(MAX_CONCURRENT)
                 
                // 往fifo中,填入最大个数元素
                for(int i=0; i

注意项:不要勾选使用 Groovy 沙盒

Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量_第1张图片

不然会出错误

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.util.concurrent.LinkedBlockingDeque int

Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量_第2张图片

三、结果图

Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量_第3张图片

Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量_第4张图片
Jenkins-Pipeline单stage控制并发构建流程,限制并发线程数量_第5张图片

四、另一种Jenkins并发写法
pipeline {

    agent {
            node {
                label "master"
            }
    }

    stages {

        stage('开始') {
            steps {
                sh '''
                    echo "start"
                '''
            }
        }

        stage('并发步骤') {
            parallel {
                stage('步骤1') {
                    steps {
                        sh '''
                            echo "步骤1"
                        '''
                    }
                }

                stage('步骤2') {
                    steps {
                        sh '''
                            echo "步骤2"
                        '''
                        }
                    }

                }
            }
        }

        stage('结束') {
            steps {
                sh '''
                    echo "done"
                '''
            }
        }
                
    }
}

原文链接:https://www.sdk.cn/details/1pBvm69lXRRek7ReoP
SDK社区是一个中立的社区,这里有多样的前端知识,有丰富的api,有爱学习的人工智能开发者,有风趣幽默的开发者带你学python,还有未来火热的鸿蒙,当各种元素组合在一起,让我们一起脑洞大开共同打造专业、好玩、有价值的开发者社区,帮助开发者实现自我价值!

你可能感兴趣的:(框架学习)