मैं अपने जेनकींस / हडसन इतिहास को कैसे स्पष्ट करूं?


87

मैंने हाल ही में अपने एक हडसन बिल्ड के कॉन्फ़िगरेशन को अपडेट किया है। बिल्ड इतिहास सिंक से बाहर है। क्या मेरा निर्माण इतिहास साफ़ करने का कोई तरीका है?

कृपया और धन्यवाद


क्या आप "पूरी तरह से गड़बड़" पर विस्तार से बता सकते हैं? हो सकता है कि किसी ने पहले भी इसी तरह के मुद्दे का अनुभव किया हो और आपको यह तय करने के लिए निर्देशित कर सकता है कि इसे कैसे ठीक किया जाए।
रोब हौत्रका

अस्पष्टता के बारे में खेद है। तय की।
22us पर myusuf3

यहाँ एक नया और थोड़ा और विशिष्ट प्रश्न है: stackoverflow.com/questions/13052390/…
एरवान लेग्रैंड


यहाँ सबसे अच्छा जवाब मुझे मिला है: superuser.com/questions/1418885/…
Asma Zubair

जवाबों:


51

यदि आप डिस्क से प्रबंधित हडसन / रीलोड कॉन्फ़िगरेशन पर क्लिक करते हैं, तो हडसन सभी बिल्ड इतिहास डेटा को फिर से लोड करेगा।

यदि डिस्क पर डेटा गड़बड़ है, तो आपको अपने% HUDSON_HOME% \ jobs \ < projectname > निर्देशिका में जाना होगा और बिल्ड निर्देशिकाओं को पुनर्स्थापित करना होगा, क्योंकि वे होना चाहिए। फिर कॉन्फ़िगर डेटा पुनः लोड करें।

यदि आप बस पूछ रहे हैं कि सभी बिल्ड इतिहास को कैसे हटाया जाए, तो आप यूआई के माध्यम से बिल्ड को एक-एक करके हटा सकते हैं यदि कुछ ही हैं, या% HUDSON_HOME% \ jobs \ < प्रोजेक्टनेम > निर्देशिका में जाएं और सभी को हटा दें उपनिर्देशिका वहाँ - वे बनाता है के अनुरूप हैं। बाद में परिवर्तनों को प्रभावी करने के लिए सेवा को फिर से शुरू करें।


मैंने "/ var / lib / jenkins / jobs / Demo" के अंदर सभी फ़ाइलों और फ़ोल्डरों को हटा दिया है, लेकिन जब मैं इस JOB के अंदर जेनकींस UI पर जाता हूं तो मुझे अभी भी इतिहास बनाता है।
पौल

1
निर्देशिका संरचना के साथ "बंदर" के बाद, बस "जेनकिंस प्रबंधित करें" पर जाएं और "डिस्क से रीलोड कॉन्फ़िगरेशन" चुनें
दानबकर

1
@ अंपुल, वहां फोल्डर डिलीट करने के बाद, UI से गायब हुए हिस्ट्री को देखने के लिए जेनकिन्स की रिस्टार्ट की जरूरत होती है। BTW, अगर हम जेनकिंस का उपयोग कर रहे हैं, तो पथ आम तौर पर / var / jenkins_home / jobs / {project name} / buildds पर स्थित है
उज्ज्वल

मुझे लगता है कि इस समाधान के लिए सिस्टम साइड पर बहुत अधिक कदमों की आवश्यकता है, @Nayana Adassuriya से उत्तर में बहुत अधिक स्वच्छ समाधान प्रदान किया गया है
lfn

107

स्क्रिप्ट कंसोल का उपयोग करें (जेनकींस को प्रबंधित करें> स्क्रिप्ट कंसोल) और कुछ इस तरह की स्क्रिप्ट एक नौकरी के निर्माण के इतिहास को नष्ट करने के लिए थोक के लिए https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulactDeleteBuilds.groovy

वह स्क्रिप्ट मानती है कि आप केवल बिल्ड की एक श्रेणी को हटाना चाहते हैं। किसी दिए गए कार्य के लिए सभी बिल्ड को हटाने के लिए, इस (परीक्षण) का उपयोग करें:

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()

5
महान!! निश्चित रूप से सबसे अच्छा तरीका! :)
hek2mgl

महान चाल, लेकिन बिल्ड काउंटर को रीसेट करने के बारे में कैसे? उसके लिए कोई स्क्रिप्टिंग?
जेस चर्गुइ

1
@JesChergui मैंने बिल्ड नंबर रीसेट करने के लिए अपडेट किया है। स्क्रिप्ट कंसोल आपको सभी प्रकार की चीजों को नियंत्रित करने देता है, javadoc.jenkins-ci.org देखें (AbstractProject, नौकरियों के साथ खेलने के लिए शुरू करने के लिए एक अच्छी जगह है)
rjohnston

मेरे जेनकींस ने शिकायत की कि इसे इंस्टेंस तक पहुंचने की अनुमति नहीं थी, या जैसे कि। मैं इसे एक नई पाइपलाइन से चला रहा था जिसे मैं विशेष रूप से इस विलोपन के लिए सेटअप कर रहा था और मैंने ऊपर दिए गए कोड में चिपका दिया और नाम बदल दिया।
विल

@Will यह स्क्रिप्ट सिक्योरिटी प्लगइन के कारण है जो एक सुपर प्रतिबंधक सैंडबॉक्स में पाइपलाइन नौकरियां डालता है। देखें कि क्या आपके पास "प्रबंधित जेनकींस"> "इन-प्रोसेस स्क्रिप्ट अनुमोदन" के तहत अनुमोदन करने के लिए एक हस्ताक्षर है। एक अन्य विकल्प स्क्रिप्ट स्क्रिप्ट प्लगइन की नौकरी में व्यवस्थापक स्क्रिप्ट चलाने की क्षमता का उपयोग करना होगा: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

यह जवाब जेनकिंस के लिए है

  1. अपने जेनकींस होम पेज पर जाएं → जेनकिंसस्क्रिप्ट कंसोल प्रबंधित करें

    यहां छवि विवरण दर्ज करें

  2. निम्नलिखित स्क्रिप्ट को वहां चलाएँ। बदलें copy_folderकरने के लिएyour project name

कोड:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

मेरा पद


4
अब तक का सर्वश्रेष्ठ उत्तर
दिमित्री ज़ेत्सेव

1
यह सबसे तेज उपाय है।
21

हाँ, लेकिन इस के लिए, जेनकींस को फिर से शुरू न करें या जब आप पुनः आरंभ करने के बाद एक बिल्ड करते हैं, तो यह अगली बिल्ड 1 को अपडेट नहीं करता है। मेरा शुरू 39 पर हुआ इसलिए मुझे यह फिर से करना पड़ा।
विल

जेनकिंस 2.75 के रूप में कार्य करना
20

22

यहां एक और विकल्प है: बिल्ड को cURL के साथ हटाएं।

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

उपर्युक्त डिलीट जॉब myJob के लिए # 1 से # 56 का निर्माण करता है।

यदि प्रमाणीकरण जेनकिन्स उदाहरण पर सक्षम है, तो एक उपयोगकर्ता नाम और एपीआई टोकन इस तरह प्रदान किया जाना चाहिए:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

/me/configureJenkins में पृष्ठ से API टोकन प्राप्त किया जाना चाहिए । उपयोगकर्ता नाम और एपीआई टोकन दोनों को प्रदर्शित करने के लिए "शो एपीआई टोकन ..." बटन पर क्लिक करें।

संपादित करें: एक को बदलने के लिए हो सकता है doDeleteAllद्वारा doDeleteयूआरएल में ऊपर इस काम करने के लिए, विन्यास या इस्तेमाल जेनकींस के संस्करण के आधार।


10

यहाँ सभी जॉब्स के लिए सभी निर्माणों को कैसे हटाया जाए …… जेनकिंस स्क्रिप्टिंग का उपयोग करके।

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

9

आप केवल अंतिम 1 बिल्ड को बचाने के लिए अस्थायी रूप से प्रोजेक्ट कॉन्फ़िगरेशन को संशोधित कर सकते हैं, कॉन्फ़िगरेशन को फिर से लोड कर सकते हैं (जो पुराने बिल्ड को रद्दी करना चाहिए), फिर कॉन्फ़िगरेशन सेटिंग को फिर से अपने इच्छित मूल्य में बदल दें।


क्षमा करें, हडसन का उपयोग अब कुछ वर्षों के लिए नहीं किया गया है, लेकिन कॉन्फ़िगरेशन को पुनः लोड करने के बारे में इसे देखें: stackoverflow.com/questions/5216552/…
the_mandrill

जैसे कि जिन लोगों के पास जेनकींस के लिए व्यवस्थापक अनुमति नहीं है, यह एकमात्र विकल्प था जो मेरे लिए काम करता था।
DrStrangepork

4

यदि आप MultiBranchProject (जैसे पाइपलाइन) के निर्माण के इतिहास को साफ़ करना चाहते हैं, तो अपने जेनकींस होम पेज पर जाएं → जेनकिंस → स्क्रिप्ट कंसोल प्रबंधित करें और निम्न स्क्रिप्ट चलाएँ:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}

4

यह एक सबसे अच्छा विकल्प उपलब्ध है।

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

यह कोड सभी जेनकींस जॉब बिल्ड हिस्ट्री को डिलीट कर देगा।


2
उपरोक्त कोड को चलाने का तरीका जानने वाले किसी के लिए, जेनकिंस होम> मैनेज जेनकिंस> स्क्रिप्ट कंसोल पर जाएं। वहाँ एक पाठ फ़ील्ड होगा जिसे आप इस स्क्रिप्ट में दर्ज कर सकते हैं।
फिरौन टूल्स

2

स्क्रिप्ट कंसोल का उपयोग करना।

यदि नौकरियों को समूहीकृत किया जाता है, तो या तो इसे आगे की स्लैश के साथ पूरा नाम देना संभव है:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

या पदानुक्रम को इस तरह से पार करें:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

2

फ़ाइल सिस्टम से सीधे हटाना सुरक्षित नहीं है। आप सभी नौकरियों (पुनरावर्ती) से सभी बिल्ड को हटाने के लिए नीचे स्क्रिप्ट चला सकते हैं।

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}

1

बिल्ड को साफ करने का एक और आसान तरीका यह है कि अपनी नौकरियों के अंत में Discard Old Plugin को शामिल किया जाए। बचाने के लिए बिल्ड की अधिकतम संख्या सेट करें और फिर से काम चलाएं:

https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin


1

%HUDSON_HOME%\jobs\<projectname>निकालें buildsdir पर जाएं और lastStable, lastSuccessfulलिंक हटाएं , और nextBuildNumberफ़ाइल निकालें ।

उपरोक्त चरण करने के बाद UI से नीचे लिंक पर जाएं
जेनकींस जाएं-> जेनकिंस प्रबंधित करें -> डिस्क से कॉन्फ़िगरेशन पुनः लोड करें

यह आपकी जरूरत के अनुसार ही करेगा


1

यदि स्क्रिप्ट कंसोल विधि का उपयोग कर रहे हैं तो नौकरियों को फ़ोल्डर कंटेनर में वर्गीकृत किया जा रहा है, तो खाते में लेने के बजाय निम्नलिखित का उपयोग करने का प्रयास करें।

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

या

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

0

पर जाए: %JENKINS_HOME%\jobs\jobName

"NextBuildNumber" फ़ाइल खोलें और नंबर बदलें। उसके बाद जेनकिंस कॉन्फ़िगरेशन पुनः लोड करें। नोट: "nextBuildNumber" फ़ाइल में अगला बिल्ड नंबर है जो जेनकिंस द्वारा उपयोग किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.