1

Mein Projekt verfügt über eine Jenkinsfile, die problemlos ausgeführt wird. Das Problem ist, dass ich nur bei bestimmten Gelegenheiten Befehle ausführen muss. Ich benutze das Github-Plugin. Ich muss die Bereitstellung nur ausführen, wenn sie sich im Master oder einem neuen Tag befindet, einer wird für die Bereitstellung und der andere für die Produktion verwendet.Verwenden von Jenkins zum Bereitstellen auf Staging und Produktion basierend auf Bedingung

pipeline { 
    agent any 
    stages { 
    stage('Test') { 
     steps { 
     sh 'node -v' 
     sh 'yarn install' 
     sh 'yarn test -- --coverage' 
     } 
    } 
    stage('Build') { 
     steps { 
     sh 'yarn build' 
     } 
    } 
    stage('Deploy') { 
     steps { 
     sh 'aws s3 sync ./build s3://my.bucket --only-show-errors' 
     } 
    } 
    } 
} 

Ich brauche den Master in einem Eimer zu implementieren und wenn es ein neues Tag zu einem anderen ist. Wie kann ich diese Bedingung erstellen?

Antwort

0

Wie funktioniert das Folgende als zwei Bedingungen für zwei separate Bereitstellungsszenarien? Ich denke, es ist besser, damit zu arbeiten, indem man Variablen verwendet, um Bereitstellungsszenarien anzuzeigen, anstatt diese in zwei deutlich unterschiedliche Schritte zu unterteilen. Du könntest zum Beispiel ein Shell-Skript schreiben, das alles in Abhängigkeit von Tags/Verzweigungen/was immer du benötigst, anstatt dich dazu zu zwingen, dies auf Pipeline-Ebene zu kontrollieren.

Jede Stufe wird nur ausgeführt, wenn when Teil erfüllt ist. Die Stufe Deploy funktioniert nur für den Zweig master, während die Stufe Deploy_NonMaster nur für alle Nicht-Master-Zweige funktioniert. Mit der in when geschriebenen Methode können Sie nach etwas suchen, einschließlich Tags oder Ähnlichem.

stage ('Deploy') { 

     when { 
      expression { 
       GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim() 
       return (GIT_BRANCH == 'master') 
      } 
     } 
     steps { 
      echo 'Do stuff/deploy.' 
     } 
    } 
stage ('Deploy_NonMaster') { 

     when { 
      expression { 
       GIT_BRANCH = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref HEAD').trim() 
       return !(GIT_BRANCH == 'master') 
      } 
     } 
     steps { 
      echo 'Do stuff/deploy.' 
     } 
    } 
+0

Dies würde Commits in jedem Zweig bereitstellen. Ich brauche einen Master und einen Tag Release, ist das möglich? –

+0

@IbnClaudius, änderte die Antwort, um die Erklärung zu geben, wie "wann" Bedingungen funktionieren. Man beachte das '! (GIT_BRANCH == 'master') in der' Deploy_NonMaster'-Stufe, die explizit angibt, dass diese Stufe für andere Zweige als Master ausgeführt wird. – Zloj

+0

Aber ich muss für Änderungen auf Master-und Github-Tag-Releases bereitstellen. Bei der Master-Bereitstellung für die Bereitstellung und für die Produktion. Wo in Ihrer Jenkinsfile ist die Bedingung, die nur auf Tags läuft? –

Verwandte Themen