Есть ли способ переместить весь раздел post {} сборки в Jenkinsfile в глобальную конвейерную библиотеку? - PullRequest
2 голосов
/ 10 апреля 2019

Я относительно новичок в конвейерах Jenkins, но, реализовав уже несколько, я понял, что мне нужно начать использовать совместно используемую библиотеку jenkins, прежде чем я сойду с ума.

Уже выяснили, как определить некоторыеповторять шаги в библиотеке и вызывать их с меньшим количеством беспорядка из Jenkinsfile, но не уверен, можно ли сделать то же самое для всего раздела посткомпоновки (хотя я читал о том, как определить весь конвейер в lib и аналогично ), поскольку это практически статический конец каждого отдельного конвейерного кода:

@Library('jenkins-shared-library')_
pipeline {
    agent none
    stages {
        stage ('System Info') { agent any
            steps { printSysInfo() }
        }

        stage ('Init'){ agent {label 'WinZipSE'}
            steps { init('SCMroot') }
        }
        stage('Build') { agent any 
            steps { doMagic() }
        }
    }

    // This entire 'post {}' section needs to go to a shared lib
    // and be called just with a simple methed call, e.g.
    // doPostBuild()
    post {
        always {
            node ('master') {
                googlechatnotification (
                message: '[$BUILD_STATUS] Build $JOB_NAME $BUILD_NUMBER has finished',
                url: 'id:credential_id_for_Ubuntu')

                step (
                    [$class: 'Mailer',
                    recipients: 'sysadmins@example.com me@example.com',
                    notifyEveryUnstableBuild: true,
                    sendToIndividuals: true]
                )
            }
        }
        success {
            node ('master') {
                echo 'This will run only if successful'
            }
        }
        failure {
            node ('master') {
                echo 'This will run only if failed'
            }
        }
        // and so on
    }
}

Я просто не знаю, как синтаксически добиться этого.Конечно, я могу определить весь раздел пост-сборки a lib / var, например: doPotBuild.groovy

def call () {
  post {...}
}

, но как я в конечном итоге буду вызывать его из моего Jenkinsfile за пределами этого определенного post {} блока сборкираздел (этапы АКА).

Я могу назвать его в каком-то stage('post build){doPostBuild()}, но он не будет работать так, как должен работать настоящий раздел post {}, например, он не будет исполненна одном из предыдущих этапов произошел сбой.

Есть мысли по этому поводу и, в основном, рабочие примеры?

1 Ответ

0 голосов
/ 28 апреля 2019

Я не совсем уверен, что это будет работать, поскольку я не использую декларативные конвейеры, поэтому не уверен, насколько жесткой является структура верхнего уровня. Но я бы вернулся к блоку скрипта.

@Library('jenkins-shared-library')_
pipeline {
    agent none
    stages {
        stage ('System Info') { agent any
            steps { printSysInfo() }
        }

        stage ('Init'){ agent {label 'WinZipSE'}
            steps { init('SCMroot') }
        }
        stage('Build') { agent any 
            steps { doMagic() }
        }
    }

    // This entire 'post {}' section needs to go to a shared lib
    // and be called just with a simple methed call, e.g.
    // doPostBuild()
    script {
        doPostBuild()
    }
}
...