jenkinsfile管道分组由代理分组

时间:2018-01-03 17:57:51

标签: jenkins jenkins-pipeline

我有什么

我正在尝试使用两个不同的代理运行我的jenkins管道。我想在同一个代理上执行一些进程,但到目前为止我无法做到这一点,因为代理定义只有两个选项:我可以在管道顶部做,或者我可以在每个阶段定义代理。我有这个:

pipeline{
    agent none
    stages {
        agent { label 'maven-build-slave' }
        stage("Unit Testing"){
            steps{
            }
        }
        stage('Sonar Scanner - Quality Gates') {
            steps{
            }
        }

        agent { label 'integration-slave' }
        stage("Integration"){
            steps{
            }
        }
        stage('SoapUI') {
            steps{
            }
        }
    }
}

在这种情况下,主要问题是即使代理是相同的,代码也会在每个阶段被拉出。

我想要什么

我想要这样的事情:

function wilson_newsletter_media_library(big_parent){
    var frame_uploader, datos_imagen;
    if ( undefined !== frame_uploader ) {
        frame_uploader.open();
        return;
    }

    frame_uploader = wp.media.frames.frame_uploader = wp.media({
        title: "Insert Media",
        button: {
            text: "Aceptar"
        },
        multiple: false
    });

    frame_uploader.on( 'select', function() {
        datos_imagen = frame_uploader.state().get( 'selection' ).first().toJSON();
        big_parent.children('img').attr("src", datos_imagen.url);
    });

    frame_uploader.open();
}

但是上面的定义是失败的,所以我想知道是否有人知道使用相同代理运行几个阶段的方法。

1 个答案:

答案 0 :(得分:1)

查看新版本(2018年7月)Sequential Stages in Declarative Pipeline 1.3

  

使用相同的代理,环境或选项运行多个阶段

     

虽然顺序阶段功能最初是由希望在并行分支中具有多个阶段的用户驱动的,但我们发现能够将多个阶段与同一个代理,环境,时间等组合在一起还具有许多其他用途。

     

例如,如果您在管道中使用多个代理,但是要确保使用同一代理的阶段使用相同的工作空间,则可以在其上使用带有代理指令的父阶段,然后将所有其stage指令中的stage将在同一工作区中的同一执行程序上运行。

pipeline {
    agent none

    stages {
        stage("build and test the project") {
            agent {
                docker "our-build-tools-image"
            }
            stages {
               stage("build") {
                   steps {
                       sh "./build.sh"
                   }
               }
               stage("test") {
                   steps {
                       sh "./test.sh"
                   }
               }
            }
            post {
                success {
                    stash name: "artifacts", includes: "artifacts/**/*"
                }
            }
        }