كيف أقوم بمسح تاريخ بناء Jenkins/Hudson؟
-
25-09-2019 - |
سؤال
لقد قمت مؤخرًا بتحديث تكوين أحد مباني 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()
هذه الإجابة لجينكينز
انتقل إلى صفحة Jenkins الرئيسية → إدارة جنكينز → وحدة تحكم البرنامج النصي
قم بتشغيل البرنامج النصي التالي هناك. يتغيرون
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.