Ora che il tipo di lavoro Pipeline Multibranch è scaduto, c'è qualche motivo per utilizzare più il tipo di lavoro Pipeline semplice? Anche se oggi hai solo una filiale, è probabilmente saggio prevedere la possibilità di più filiali in futuro, e quindi quale sarebbe la motivazione per usare il tipo di lavoro Pipeline per la tua pipeline Jenkins e sempre usando il tipo di lavoro Pipeline Multibranch, partendo dal presupposto che stai memorizzando il tuo Jenkinsfile in SCM? Esiste una parità di funzionalità tra i due tipi di lavoro ora?Lavoro Multibranch Pipeline vs Pipeline
risposta
In una situazione CI/CD, potrebbe non essere consigliabile inviare ogni ramo all'ambiente di destinazione. L'utilizzo della pipeline e la specifica di un singolo ramo consentono di filtrare e inviare solo/master agli ambienti di gestione o di produzione. Multibranch sarebbe utile per inviare qualsiasi modifica su qualsiasi ramo specifico per un ambiente di test.
D'altra parte, se il processo QA/AutomatedTesting è sufficientemente completo, il rischio con l'invio di qualsiasi filiale alla produzione potrebbe essere accettabile.
Nella mia esperienza con le pipeline multibranch, l'UNICO lato negativo è che non è possibile visualizzare le ultime colonne successo/fallimento/durata nella pagina principale di Jenkins. Mostrano solo "NA" sulla prima pagina di Jenkins poiché tecnicamente è una "cartella" di lavori secondari.
Oltre a questo non riesco a pensare a nessun altro "contro" nell'usare il multibranch.
Non sono d'accordo con l'altra risposta .... quel caso era che il multibranch invia modifiche per "qualsiasi" ramo. Questo non è necessariamente vero. Se un Jenkinsfile esiste su un ramo di funzionalità casuali, ma quel ramo non è definito nella pipeline, allora non puoi farci niente usando i condizionali if/else tipici.
Ad esempio:
node {
checkout scm
def workspace = pwd()
if (env.BRANCH_NAME == 'master') {
stage ('Some Stage 1 for master') {
sh 'do something'
}
stage ('Another Stage for Master') {
sh 'do something else here'
}
}
else if (env.BRANCH_NAME == 'stage') {
stage ('Some stage branch step') {
sh 'do something'
}
stage ('Deploy to stage target') {
sh 'do something else'
}
}
else {
sh 'echo "Branch not applicable to Jenkins... do nothing"'
}
}