2017-06-13 35 views
5

Podczas korzystania z rurociągu Jenkins gdzie każdy etap działa na innym środkiem, to good practice używać agent none na początku:Jak korzystać z kroków postu z potokiem Jenkinsa dla wielu agentów?

pipeline { 
    agent none 
    stages { 
    stage('Checkout') { 
     agent { label 'master' } 
     steps { script { currentBuild.result = 'SUCCESS' } } 
    } 
    stage('Build') { 
     agent { label 'someagent' } 
     steps { bat "exit 1" } 
    } 
    } 
    post { 
    always { 
     step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "[email protected]", sendToIndividuals: true]) 
    } 
    } 
} 

Ale robi to prowadzi do Required context class hudson.FilePath is missing komunikatu o błędzie, gdy e-mail powinien wyjść:

[Pipeline] { (Declarative: Post Actions) 
[Pipeline] step 
Required context class hudson.FilePath is missing 
Perhaps you forgot to surround the code with a step that provides this, such as: node 
[Pipeline] error 
[Pipeline] } 

Po zmianie z agent none na agent any, działa poprawnie.

W jaki sposób można uzyskać krok post do pracy bez korzystania z agent any?

Odpowiedz

6

owinąć step że robi mailingu na etapie node:

post { 
    always { 
    node('awesome_node_label') { 
     step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "[email protected]", sendToIndividuals: true]) 
    } 
    } 
} 
+0

użyłem 'węzła ('mistrz')' i teraz działa. Dziękuję Ci. Jeśli pominę etykietę, pojawia się błąd 'WorkflowScript: 15: Brakujący wymagany parametr:" etykieta "'. Czy potrafisz dostosować swoją odpowiedź? –

+0

pewnie, dzięki! – burnettk

+0

Zanim zadałem to pytanie, spróbowałem użyć 'węzła' zaraz po' post', co nie jest dozwolone, ale nigdy nie przyszło mi do głowy, że zawijam tylko 'krok'. Dzięki za pomoc. –