Làm cách nào để xóa lịch sử xây dựng Jenkins / Hudson của tôi?


87

Gần đây tôi đã cập nhật cấu hình của một trong các bản dựng hudson của mình. Lịch sử xây dựng không đồng bộ. Có cách nào để xóa lịch sử xây dựng của tôi không?

Xin vui lòng và cảm ơn bạn


Bạn có thể nói rõ hơn về "hoàn toàn lộn xộn"? Có thể ai đó đã từng gặp phải sự cố tương tự trước đây và có thể hướng dẫn bạn cách khắc phục.
Rob Hruska

xin lỗi về sự mơ hồ. đã sửa.
myusuf3

Có một câu hỏi mới hơn và cụ thể hơn một chút ở đây: stackoverflow.com/questions/13052390/…
Erwan Legrand

Bài đăng này có thể giúp codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya

Đây là câu trả lời hay nhất mà tôi tìm thấy: superuser.com/questions/1418885/…
Asma Zubair,

Câu trả lời:


51

Nếu bạn nhấp vào Quản lý Hudson / Tải lại Cấu hình Từ Đĩa, Hudson sẽ tải lại tất cả dữ liệu lịch sử xây dựng.

Nếu dữ liệu trên đĩa bị lộn xộn, bạn sẽ cần phải chuyển đến thư mục% HUDSON_HOME% \ Jobs \ < projectname > của mình và khôi phục các thư mục xây dựng như bình thường. Sau đó tải lại dữ liệu cấu hình.

Nếu bạn chỉ đơn giản là hỏi cách xóa tất cả lịch sử bản dựng, bạn có thể xóa từng bản dựng một thông qua giao diện người dùng nếu chỉ có một vài bản hoặc truy cập thư mục% HUDSON_HOME% \ Jobs \ < projectname > và xóa tất cả các thư mục con ở đó - chúng tương ứng với các bản dựng. Sau đó, khởi động lại dịch vụ để các thay đổi có hiệu lực.


Tôi đã xóa tất cả các tệp và thư mục bên trong "/ var / lib / jenkins / job / Demo" nhưng khi truy cập Jenkins UI bên trong JOB này, tôi vẫn thấy lịch sử bản dựng.
paul

1
Sau khi bạn "khỉ" với cấu trúc thư mục, chỉ cần vào "Quản lý Jenkins" và chọn "Nạp lại cấu hình từ đĩa"
DanBaker

1
@paul, sau khi xóa các thư mục ở đó, cần khởi động lại Jenkins để xem lịch sử xây dựng đã biến mất khỏi giao diện người dùng. BTW, nếu chúng tôi đang sử dụng Jenkins, đường dẫn thường được đặt tại / var / jenkins_home / Jobs / {project name} / build /
Sáng

Tôi nghĩ rằng giải pháp này đòi hỏi nhiều bước về phía hệ thống, một giải pháp sạch hơn nhiều được cung cấp trong câu trả lời từ @Nayana Adassuriya
lfn 11/09/18

108

Sử dụng bảng điều khiển tập lệnh (Manage Jenkins> Script Console) và một cái gì đó tương tự như tập lệnh này để xóa hàng loạt lịch sử xây dựng của công việc https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Tập lệnh đó giả định rằng bạn chỉ muốn xóa một loạt các bản dựng. Để xóa tất cả các bản dựng cho một công việc nhất định, hãy sử dụng điều này (đã thử nghiệm):

// 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
Tuyệt quá!! chắc chắn là cách tiếp cận tốt nhất! :)
hek2mgl

thủ thuật tuyệt vời, nhưng làm thế nào về việc đặt lại bộ đếm bản dựng? bất kỳ kịch bản cho điều đó?
Jes Chergui

1
@JesChergui Tôi đã cập nhật để hiển thị việc đặt lại số bản dựng. Các kịch bản giao diện điều khiển cho phép bạn kiểm soát tất cả các loại của sự vật, thấy javadoc.jenkins-ci.org (AbstractProject là một nơi tốt để bắt đầu cho chơi với công việc)
rjohnston

Jenkins của tôi phàn nàn rằng nó không được phép truy cập các phiên bản, hoặc tương tự như vậy. Tôi đang chạy nó từ một đường dẫn mới mà tôi đã thiết lập riêng cho việc xóa này và tôi đã dán mã ở trên và đổi tên.
Will

@Will điều này là do plugin bảo mật tập lệnh đặt các công việc đường ống vào một hộp cát siêu hạn chế. Xem liệu bạn có chữ ký để phê duyệt trong "Quản lý Jenkins"> "Phê duyệt tập lệnh trong quá trình". Một lựa chọn khác là sử dụng khả năng plugin Scriptler để chạy các kịch bản quản trị trong một công việc: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

Câu trả lời này dành cho Jenkins

  1. Truy cập trang chủ Jenkins của bạn → Quản lý JenkinsBảng điều khiển tập lệnh

    Nhập mô tả hình ảnh tại đây

  2. Chạy tập lệnh sau ở đó. Thay đổi copy_folderthànhyour project name

Mã:

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

Bài viết của tôi


4
Câu trả lời tốt nhất cho đến nay
Dmitry Grigoryevich Zaytsev

1
Đây là giải pháp nhanh nhất.
davegallant

Vâng, nhưng đối với cái này, ĐỪNG khởi động lại Jenkins hoặc có vẻ như nó không cập nhật số tiếp theo thành 1 khi bạn xây dựng sau khi khởi động lại. Của tôi bắt đầu ở tuổi 39 vì vậy tôi phải làm lại điều này.
Sẽ

Làm việc kể từ Jenkins 2,75
ѺȐeallү

22

Đây là một tùy chọn khác: xóa các bản dựng bằng cURL.

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

Ở trên xóa bản dựng # 1 đến # 56 cho công việc myJob.

Nếu xác thực được bật trên phiên bản Jenkins, tên người dùng và mã thông báo API phải được cung cấp như sau:

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

Mã thông báo API phải được tìm nạp từ /me/configuretrang trong Jenkins. Chỉ cần nhấp vào nút "Hiển thị Mã thông báo API ..." để hiển thị cả tên người dùng và mã thông báo API.

Chỉnh sửa: người ta có thể phải thay thế doDeleteAllbằng doDeletetrong các URL ở trên để làm cho điều này hoạt động, tùy thuộc vào cấu hình hoặc phiên bản Jenkins được sử dụng.


10

Đây là cách xóa TẤT CẢ CÁC TẤT CẢ CÁC CÔNG VIỆC ...... bằng cách sử dụng Jenkins Scripting.

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

9

Bạn có thể tạm thời sửa đổi cấu hình dự án để chỉ lưu 1 bản dựng cuối cùng, tải lại cấu hình (sẽ làm hỏng các bản dựng cũ), sau đó thay đổi lại cài đặt cấu hình thành giá trị mong muốn của bạn.


Xin lỗi, đã không sử dụng Hudson bây giờ trong một vài năm, nhưng hãy xem điều này về cách tải lại cấu hình: stackoverflow.com/questions/5216552/…
the_mandrill

Là một người không có quyền quản trị đối với Jenkins, đây là lựa chọn duy nhất phù hợp với tôi.
DrStrangepork

4

Nếu bạn muốn xóa lịch sử xây dựng của MultiBranchProject (ví dụ: đường dẫn), hãy truy cập trang chủ Jenkins của bạn → Quản lý Jenkins → Bảng điều khiển Tập lệnh và chạy tập lệnh sau:

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

Đây là tùy chọn tốt nhất hiện có.

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

Mã này sẽ xóa tất cả lịch sử xây dựng Jenkins Job.


2
Đối với bất kỳ ai tự hỏi làm thế nào để chạy đoạn mã trên, hãy truy cập Jenkins Home> Manage Jenkins> Script Console. Ở đó sẽ có một trường văn bản mà bạn có thể nhập tập lệnh này vào.
Pharaoh Tools

2

Sử dụng Bảng điều khiển Script.

Trong trường hợp các công việc được nhóm lại, bạn có thể đặt tên đầy đủ cho nó bằng dấu gạch chéo phía trước:

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

hoặc duyệt qua hệ thống phân cấp như thế này:

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

2

Xóa trực tiếp khỏi hệ thống tệp không an toàn. Bạn có thể chạy tập lệnh dưới đây để xóa tất cả các bản dựng khỏi tất cả các công việc (một cách đệ quy).

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

Đi tới trình %HUDSON_HOME%\jobs\<projectname>loại bỏ buildsdir và loại bỏ lastStable, lastSuccessfulcác liên kết, và loại bỏ nextBuildNumbertệp.

Sau khi thực hiện các bước trên, hãy truy cập liên kết bên dưới từ giao diện người dùng
Jenkins-> Manage Jenkins -> Tải lại cấu hình từ Disk

Nó sẽ làm như bạn cần


1

Nếu sử dụng phương pháp Bảng điều khiển Tập lệnh, hãy thử sử dụng phương pháp sau để xem xét xem công việc có đang được nhóm vào các vùng chứa thư mục hay không.

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

hoặc là

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

0

Hướng đến: %JENKINS_HOME%\jobs\jobName

Mở tệp "nextBuildNumber" và thay đổi số. Sau đó tải lại cấu hình Jenkins. Lưu ý: Tệp "nextBuildNumber" chứa phiên bản tiếp theo số sẽ được Jenkins sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.