मेरे पास एक स्क्रिप्टेड पाइपलाइन है और मैं विभिन्न ऑपरेशन निष्पादित करना चाहता हूं:

  • हर दिन: परीक्षण चलाएं
  • हर सप्ताहांत: बहुत लंबा स्थैतिक विश्लेषण कार्य चलाएं

मुझे पता है कि मैं कई ट्रिगर्स को परिभाषित कर सकता हूं

properties(
    pipelineTriggers([cron("0 12 * * *"), cron("* * * * 6")])
)

लेकिन मुझे नहीं पता कि मैं बाद में नौकरी को कैसे परिभाषित कर सकता हूं

if (???) {
    sh "run complex task"
} else if (???) {
    sh "run tests"
}

मैं कैसे पता लगा सकता हूं कि कौन से क्रॉन नियम मेरे कार्य को ट्रिगर करते हैं?

1
Makers_F 4 अक्टूबर 2018, 18:21

1 उत्तर

सबसे बढ़िया उत्तर

मेरा मानना ​​​​है कि आप निर्माण के दौरान क्रॉन जानकारी नहीं प्राप्त कर सकते हैं। TimerTriggerCause में केवल वही जानकारी होती है जो बिल्ड टाइमर द्वारा ट्रिगर की गई थी।

node {
    properties([
    pipelineTriggers([cron("* * * * *")])
])
   def timeTriggerCause = currentBuild.rawBuild.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)
   println timeTriggerCause?.getShortDescription()
}

समाधान की जोड़ी:

  • निर्माण के दौरान तारीख की जाँच करें
  • कई पाइपलाइनों का प्रयोग करें। आप बूलियन पैरामीटर (यानी RunComplexTask) के साथ सभी तर्कों को एक पाइपलाइन में अलग कर सकते हैं। अन्य पाइपलाइन (टाइमर द्वारा ट्रिगर) इस पाइपलाइन को कॉल करेंगी और बूलियन पैरामीटर के लिए उचित मान पास करेंगी।

संपादित करें: मैंने कई पाइपलाइन सेटअप का उदाहरण जोड़ा है

PIPELINE_RUN_COMPLEX_TASK:

node {
    properties([pipelineTriggers([cron('* * * * 6')])])
    build job: 'PIPELINE_MAIN', parameters: [booleanParam(name: 'RunComplexTask', value: true)]
}

PIPELINE_RUN_TESTS:

node {
    properties([pipelineTriggers([cron('0 12 * * *')])])
    build job: 'PIPELINE_MAIN', parameters: [booleanParam(name: 'RunComplexTask', value: false)]
}

पाइपलाइन_मेन:

if(RunComplexTask.toBoolean())
{
    echo "Running complex task"
}
else
{
    echo "Running tests"
}

पाइपलाइन मुख्य में यह बूलियन पैरामीटर है जिसका मैंने उल्लेख किया है।

1
Krzysztof Błażełek 5 अक्टूबर 2018, 23:37