मैं कथात्मक वाक्य रचना के साथ जेनकींस पाइपलाइन का उपयोग कर रहा है निम्न चरणों के साथ वर्तमान में,:(एजेंट कोई नहीं) एक कथात्मक पाइपलाइन चरण के लिए एक हल्के निष्पादक का प्रयोग करें
- बिल्ड (दो समानांतर चरणों के सेट तैयार करें)
- टेस्ट (भी दो कदम के समानांतर सेट)
- अगर/जहां
- तैनात
चरण 1, 2, 3, और 5 के लिए मुझे आवश्यकता है और एजेंट (एक निष्पादक) क्योंकि वे कार्यक्षेत्र पर वास्तविक कार्य करते हैं। चरण 4 के लिए, मुझे एक की आवश्यकता नहीं है, और मैं उपयोगकर्ता इनपुट की प्रतीक्षा करते समय अपने उपलब्ध निष्पादकों को अवरुद्ध नहीं करना चाहता हूं। इसे क्लासिक, लिखित वाक्यविन्यास के लिए या तो "फ्लाईवेट" या "लाइटवेट" निष्पादक के रूप में जाना जाता है, लेकिन मुझे घोषणात्मक वाक्यविन्यास के साथ इसे प्राप्त करने के तरीके के बारे में कोई जानकारी नहीं मिल रही है।
अब तक मैं कोशिश की है:
- सीधे एक एजेंट की स्थापना पाइप लाइन विकल्प में, और उसके बाद मंच पर
agent none
की स्थापना। इसका कोई प्रभाव नहीं पड़ता है, और पाइपलाइन मानक के रूप में चलती है, इनपुट के इंतजार के दौरान निष्पादक को अवरुद्ध करती है। दस्तावेज में यह भी उल्लेख किया गया है कि इसका कोई प्रभाव नहीं पड़ेगा, लेकिन मैंने सोचा कि मैं इसे एक शॉट भी दूंगा। - पाइपलाइन विकल्पों में
agent none
सेट करना, और फिर # 4 को छोड़कर प्रत्येक चरण के लिए एजेंट सेट करना। दुर्भाग्यवश, लेकिन उम्मीद है कि, यह हर चरण के लिए एक नया कार्यक्षेत्र आवंटित करता है, जिसके बदले में मुझे छेड़छाड़ और अनावश्यकता की आवश्यकता होती है। यह दोनों गन्दा है और मुझे समानांतर चरणों (2 और 3) में और समस्याएं देता है क्योंकि मेरे पासparallel
निर्माण के बाहर कोड नहीं हो सकता है। मुझे लगता है कि समान कार्यक्षेत्र में समानांतर कदम चलते हैं, इसलिए दोनों में छेड़छाड़/अस्थिरता के दुर्भाग्यपूर्ण परिणाम होंगे।
यहाँ मेरी Jenkinsfile की एक रूपरेखा है:
pipeline {
agent {
label 'build-slave'
}
stages {
stage("Prepare build") {
steps {
// ...
}
}
stage("Build") {
steps {
parallel(
frontend: {
// ...
},
backend: {
// ...
}
)
}
}
stage("Test") {
steps {
parallel(
jslint: {
// ...
},
phpcs: {
// ...
},
)
}
post {
// ...
}
}
stage("Select deploy target") {
steps {
script {
// ... code that determines choiceParameterDefinition based on branch name ...
try {
timeout(time: 5, unit: 'MINUTES') {
deployEnvironment = input message: 'Deploy target', parameters: [choiceParameterDefinition]
}
} catch(ex) {
deployEnvironment = null
}
}
}
}
stage("Deploy") {
when {
expression {
return binding.variables.get("deployEnvironment")
}
}
steps {
// ...
}
}
}
post {
// ...
}
}
मैं यहाँ कुछ कमी कर रहा हूँ, या यह वर्तमान संस्करण में सिर्फ नहीं हो सकता है?
यह जानना अच्छा होगा कि यह वास्तव में गारंटीकृत था, खासकर क्योंकि मैं कई बिल्ड गुलामों का उपयोग करना चाहता हूं।डॉकर उदाहरणों के लिए इसे लागू करने के कुछ उल्लेखों को छोड़कर, मुझे इसके बारे में दस्तावेज़ों में कुछ भी नहीं मिल रहा है। – runemoennike
@runemoennike यह गारंटी नहीं है; मैंने इसे प्रतिबिंबित करने के लिए अपना उत्तर संपादित कर लिया है, और यह उल्लेख करने के लिए कि आप 'स्क्रिप्ट' ब्लॉक का उपयोग (वर्तमान) आवश्यकता के आसपास होने के लिए स्टैश/अनस्टैश करने के लिए कर सकते हैं, जो 'समानांतर' 'चरणों 'के भीतर एकमात्र आइटम हो। –
ठीक है, धन्यवाद! – runemoennike