سؤال

لقد قمت مؤخرًا بتحديث تكوين أحد مباني Hudson الخاصة بي. تاريخ البناء خارج المزامنة. هل هناك طريقة لمسح تاريخ البناء الخاص بي؟

من فضلك و شكرا لك

هل كانت مفيدة؟

المحلول

إذا قمت بالنقر فوق إدارة تكوين Hudson / Reload من القرص ، فسيقوم Hudson بإعادة تحميل جميع بيانات تاريخ الإنشاء.

إذا كانت البيانات الموجودة على القرص قد أفسدت ، فستحتاج إلى الذهاب إلى ٪ Hudson_Home ٪ Jobsاسم المشروع> الدليل واستعادة أدلة البناء كما من المفترض أن تكون. ثم إعادة تحميل بيانات التكوين.

إذا كنت ببساطة تسأل عن كيفية إزالة جميع تاريخ البناء ، فيمكنك فقط حذف البناء واحدًا تلو الآخر عبر واجهة المستخدم إذا كان هناك عدد قليل ، أو انتقل إلى ٪ hudson_home ٪ Jobsاسم المشروع> الدليل وحذف جميع الدلائل الفرعية هناك - فهي تتوافق مع البناء. بعد ذلك أعد تشغيل الخدمة لتسري سريان التغييرات.

نصائح أخرى

استخدم وحدة التحكم البرنامج النصي (إدارة وحدة التحكم في Jenkins> Script) وشيء مثل هذا البرنامج النصي لحذف سجل بناء الوظيفة بشكل كبير https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkdeletebuilds.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()

هذه الإجابة لجينكينز

  1. انتقل إلى صفحة Jenkins الرئيسية → إدارة جنكينزوحدة تحكم البرنامج النصي

    Enter image description here

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

منشوري

إليك خيار آخر: حذف البناء باستخدام حليقة.

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

الحذف أعلاه بناء #1 إلى #56 لوليجوب.

إذا تم تمكين المصادقة على مثيل Jenkins ، فيجب توفير اسم المستخدم ورمز API مثل هذا:

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

يجب جلب رمز API من /me/configure صفحة في جنكينز. فقط انقر فوق الزر "إظهار رمز API ..." لعرض كل من اسم المستخدم ورمز API.

تحرير: قد يضطر المرء إلى استبداله doDeleteAll بواسطة doDelete في عناوين URL أعلاه لجعل هذا العمل ، اعتمادًا على التكوين أو إصدار Jenkins المستخدمة.

يمكنك تعديل تكوين المشروع مؤقتًا لحفظ آخر 1 بناء ، وإعادة تحميل التكوين (الذي يجب أن يقوم بمضايقة الإنشاءات القديمة) ، ثم قم بتغيير إعداد التكوين مرة أخرى إلى القيمة المطلوبة.

فيما يلي كيفية حذف جميع عمليات الإنشاء لجميع الوظائف ...... باستخدام البرمجة النصية Jenkins.

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

هذا هو الخيار الأفضل المتاح.

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

سيحذف هذا الرمز جميع تاريخ بناء Jenkins.

إذا كنت ترغب في مسح تاريخ بناء MultibranchProject (EG Pipeline) ، فانتقل إلى صفحة Jenkins الرئيسية → إدارة وحدة التحكم في Jenkins → Script وقم بتشغيل البرنامج النصي التالي:

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

هناك طريقة أخرى سهلة لتنظيف الإنشاءات عن طريق إضافة المكون الإضافي القديم للتجاهل في نهاية وظائفك. قم بتعيين عدد أقصى عدد من عمليات الإنشاء لحفظه ثم تشغيله مرة أخرى:

https://wiki.jenkins-ci.org/display/jenkins/discard+old+build+plugin

اذهب إلى %HUDSON_HOME%\jobs\<projectname> إزالة builds دير وإزالة lastStable, lastSuccessful الروابط ، وإزالة nextBuildNumber ملف.

بعد القيام بخطوات أعلاه ، انتقل إلى الرابط أدناه من واجهة المستخدم
Jenkins-> إدارة Jenkins -> تكوين إعادة التحميل من القرص

ستفعل كما تحتاج

إذا كنت تستخدم طريقة Script Console ، فحاول استخدام ما يلي بدلاً من ذلك لأخذ في الاعتبار إذا تم تجميع الوظائف في حاويات مجلدات.

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

أو

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

باستخدام Script Console.

في حال تم تجميع الوظائف ، فمن الممكن إما إعطائها اسمًا كاملاً مع مائلات للأمام:

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

الحذف مباشرة من نظام الملفات غير آمن. يمكنك تشغيل البرنامج النصي أدناه لحذف جميع البناء من جميع الوظائف (بشكل متكرر).

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

انتقل إلى: %JENKINS_HOME%\jobs\jobName

افتح ملف "NextBuildNumber" وقم بتغيير الرقم. بعد ذلك إعادة تحميل تكوين جنكينز. ملاحظة: يحتوي ملف "NextBuildNumber" على البناء التالي الذي سيتم استخدامه بواسطة Jenkins.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top