আমি কীভাবে আমার জেনকিন্স / হাডসনকে বিল্ডিংয়ের ইতিহাস সাফ করব?


87

আমি সম্প্রতি আমার একটি হাডসন বিল্ডের কনফিগারেশন আপডেট করেছি। বিল্ডের ইতিহাস সিঙ্কের বাইরে। আমার বিল্ডিংয়ের ইতিহাস সাফ করার কোনও উপায় আছে?

অনুগ্রহ করে এবং ধন্যবাদ


আপনি কি "সম্পূর্ণ জগাখিচুড়ি" নিয়ে বিস্তারিত বলতে পারেন? হয়তো কেউ এর আগেও একই রকম সমস্যা পেয়েছে এবং কীভাবে এটি ঠিক করতে হবে আপনাকে নির্দেশ দিতে পারে।
রব হুরস্কা

অস্পষ্টতার জন্য দুঃখিত। স্থির
myusuf3

এখানে একটি নতুন এবং কিছুটা সুনির্দিষ্ট প্রশ্ন রয়েছে: স্ট্যাকওভারফ্লো.
com/


এখানে আমি খুঁজে পেয়েছি সেরা উত্তর: superuser.com
আসমা জুবায়ের

উত্তর:


51

আপনি যদি ডিস্ক থেকে হাডসন / পুনরায় লোড কনফিগারেশন পরিচালনা করে ক্লিক করেন তবে হাডসন সমস্ত বিল্ড ইতিহাসের ডেটা পুনরায় লোড করবেন।

ডিস্কে ডাটা বিশৃঙ্খলার সৃষ্টি হলে, আপনি আপনার% HUDSON_HOME% \ কাজ \ <যেতে হবে projectname > ডিরেক্টরি ও তারা হতে অনুমিত করছি বিল্ড ডিরেক্টরি ফিরিয়ে আনুন। তারপরে কনফিগার ডেটা পুনরায় লোড করুন।

আপনি কেবল সব বিল্ড ইতিহাস সরানো যাবে কিভাবে বলছি, তাহলে মুছে দিতে পারেন UI 'তে মাধ্যমে একের পর এক তৈরী করে যদি সেখানে মাত্র কয়েক, অথবা \ <% HUDSON_HOME% \ কাজ ফিরে যেতে projectname > ডিরেক্টরির করতে এবং মুছে সব সেখানে উপ-ডিরেক্টরি - তারা বিল্ডগুলির সাথে সম্পর্কিত। এরপরে পরিবর্তনগুলি কার্যকর হওয়ার জন্য পরিষেবাটি পুনরায় চালু করুন।


আমি "/ var / lib / jenkins / জবস / ডেমো" এর ভিতরে থাকা সমস্ত ফাইল এবং ফোল্ডারগুলি মুছে ফেলেছি তবে আমি এই JOB এর ভিতরে জেনকিন্স UI এ গেলে এখনও বিল্ডিংয়ের ইতিহাস দেখতে পাই।
পল

4
ডিরেক্টরি কাঠামোর সাথে "বানর" করার পরে, কেবল "জেনকিনস পরিচালনা করুন" এ যান এবং "ডিস্ক থেকে কনফিগারেশন পুনরায় লোড করুন" নির্বাচন করুন
ড্যানবেকার

4
@ পল, সেখানে ফোল্ডারগুলি মুছে ফেলার পরে, ইউআই থেকে বিল্ড হিস্ট্রিটি অদৃশ্য হয়ে দেখার জন্য জেনকিন্স পুনরায় চালু করা দরকার। বিটিডাব্লু, যদি আমরা জেনকিন্স ব্যবহার করি তবে পাথটি সাধারণত / var / jenkins_home / jobs / {প্রকল্পের নাম} / বিল্ডস /
উজ্জ্বল

আমি মনে করি এই সমাধানটি সিস্টেমের অনেক পদক্ষেপের প্রয়োজন, @ নায়ানা অ্যাডাসুরিয়া
Lfn

111

কোনও কাজের বিল্ড হিস্ট্রি https://github.com/jenkinsci/jenkins-scriptts/blob/master/scriptler/bulkDeleteBuilds.groovy মুছে ফেলার জন্য স্ক্রিপ্ট কনসোল (জেনকিনস> স্ক্রিপ্ট কনসোল পরিচালনা করুন) এবং এই স্ক্রিপ্টের মতো কিছু ব্যবহার করুন script

এই স্ক্রিপ্টটি ধরে নিয়েছে যে আপনি কেবল কয়েকটি বিস্তৃত বিল্ড মুছতে চান। প্রদত্ত কাজের জন্য সমস্ত বিল্ড মুছতে, এটি ব্যবহার করুন (পরীক্ষিত):

// 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()

4
দুর্দান্ত !! অবশ্যই সেরা পদ্ধতির! :)
hek2mgl

দুর্দান্ত কৌশল, তবে বিল্ড কাউন্টারটি কীভাবে পুনরায় সেট করবেন? কোন স্ক্রিপ্টিং এর জন্য?
জেস চেরগুই

4
@ জেস চেরগুই আমি বিল্ড নম্বরটি পুনরায় সেট করতে দেখিয়ে আপডেট করেছি। স্ক্রিপ্ট কনসোল আপনাকে সমস্ত ধরণের জিনিস নিয়ন্ত্রণ করতে দেয় javadoc.jenkins-ci.org দেখুন (চাকরি নিয়ে খেলতে শুরু করার জন্য অ্যাবস্ট্রাক্টপ্রজেক্ট একটি ভাল জায়গা)
rjohnston

আমার জেনকিন্স অভিযোগ করেছেন যে এটির উদাহরণ বা এ জাতীয় পছন্দগুলিতে অ্যাক্সেস করার অনুমতি নেই। আমি এটি মুছে ফেলার জন্য বিশেষভাবে সেটআপ করেছি এমন একটি নতুন পাইপলাইন থেকে চালাচ্ছি এবং আমি উপরের কোডটিতে পেস্ট করেছি এবং নামটি পরিবর্তন করেছি।
উইল

@ এটি স্ক্রিপ্ট সুরক্ষা প্লাগইনের কারণে ঘটবে যা পাইপলাইন কাজগুলিকে একটি সুপার সীমাবদ্ধ স্যান্ডবক্সে রাখে। "জেনকিন্স পরিচালনা করুন"> "ইন-প্রসেস স্ক্রিপ্ট অনুমোদনগুলি" এর আওতায় অনুমোদনের জন্য আপনার স্বাক্ষর রয়েছে কিনা তা দেখুন। : আরেকটি বিকল্প একটি কাজ অ্যাডমিন স্ক্রিপ্ট চালানোর জন্য Scriptler প্লাগইন সামর্থ্য ব্যবহার করতে হবে 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
এখন পর্যন্ত সেরা উত্তর
দিমিত্রি জায়েতসেভ

4
এটি দ্রুততম সমাধান solution
ডেভেলাল্যান্ট

হ্যাঁ, তবে এইটির জন্য, জেনকিন্স পুনরায় আরম্ভ করবেন না বা আপনি পুনরায় চালু করার পরে কোনও বিল্ড তৈরি করার সময় পরবর্তী বিল্ডনम्बरটি 1-এ আপডেট করবেন বলে মনে হয় না। আমার 39 মিনিটে শুরু হয়েছিল তাই আমাকে এটি আবার করতে হবে।
উইল

জেনকিন্স
২.75৫

22

এখানে আরও একটি বিকল্প রয়েছে: সিআরএল সহ বিল্ডগুলি মুছুন।

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

উপরের মুছে ফেলা আমার জব এর জন্য # 1 থেকে # 56 তৈরি করে।

যদি জেনকিন্স উদাহরণে প্রমাণীকরণ সক্ষম করা থাকে তবে একটি ব্যবহারকারীর নাম এবং এপিআই টোকেন অবশ্যই এইভাবে সরবরাহ করা উচিত:

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

এপিআই টোকেনটি /me/configureজেনকিন্সের পৃষ্ঠা থেকে আনতে হবে । ব্যবহারকারীর নাম এবং এপিআই টোকেন উভয়ই প্রদর্শন করতে কেবল "شو এপিআই টোকেন ..." বোতামে ক্লিক করুন।

সম্পাদনা: প্রতিস্থাপন করতে থাকতে পারে doDeleteAllদ্বারা doDeleteURL গুলিতে উপরে এই কাজ করতে, কনফিগারেশন বা ব্যবহৃত জেনকিন্স সংস্করণ উপর নির্ভর করে।


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

আপনি যদি মাল্টিব্রাঞ্চপ্রজেক্টের বিল্ড হিস্ট্রি (উদাহরণস্বরূপ পাইপলাইন) সাফ করতে চান তবে আপনার জেনকিন্সের হোম পৃষ্ঠা Jen জেনকিন্স পরিচালনা করুন → স্ক্রিপ্ট কনসোলটিতে যান এবং নিম্নলিখিত স্ক্রিপ্টটি চালান:

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() } }

এই কোডটি সমস্ত জেনকিন্স জব ইতিহাসের ইতিহাস মুছে ফেলবে।


4
উপরের কোডটি কীভাবে চালাবেন সে সম্পর্কে যে কেউ ভাবছেন, জেনকিন্স হোম> জেনকিনস পরিচালনা করুন> স্ক্রিপ্ট কনসোল এ যান। সেখানে একটি পাঠ্য ক্ষেত্র থাকবে যাতে আপনি এই স্ক্রিপ্টটি প্রবেশ করতে পারেন।
ফেরাউন টুলস

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

বিল্ডগুলি পরিষ্কার করার আরেকটি সহজ উপায় হ'ল আপনার কাজ শেষে বাতিল পুরানো প্লাগইন যুক্ত করা। সংরক্ষণের জন্য সর্বাধিক সংখ্যক বিল্ড সেট করুন এবং তারপরে আবার কাজটি চালান:

https://wiki.jenkins-ci.org/display/JENKINS/Discard+ ওল্ড+ বিল্ড + প্লাগইন


1

%HUDSON_HOME%\jobs\<projectname>মুছে ফেলা buildsdir এ যান এবং lastStable, lastSuccessfulলিঙ্কগুলি সরান , এবং nextBuildNumberফাইল সরান ।

উপরের পদক্ষেপগুলি করার পরে ইউআই থেকে নীচের লিঙ্কে যান
জেনকিন্স -> জেনকিন্স পরিচালনা করুন -> ডিস্ক থেকে কনফিগারেশন পুনরায় লোড করুন

এটি আপনার প্রয়োজন অনুসারে করবে


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

"নেক্সট বিল্ডবার্বার" ফাইলটি খুলুন এবং নম্বরটি পরিবর্তন করুন। এর পরে জেনকিনস কনফিগারেশন পুনরায় লোড করুন। দ্রষ্টব্য: "নেক্সট বিল্ডবার্বার" ফাইলটিতে নেক্সট বিল্ড নং রয়েছে যা জেনকিন্স ব্যবহার করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.