Có cách nào để dọn dẹp không gian làm việc của Jenkins không?


100

Làm cách nào để dọn dẹp không gian làm việc trong Jenkins? Tôi đang sử dụng AccuRevlàm công cụ kiểm soát phiên bản.

Tôi đã tạo freestylecác dự án ở Jenkins.

Câu trả lời:


91

Có một cách để dọn dẹp không gian làm việc trong Jenkins. Bạn có thể dọn dẹp không gian làm việc trước khi xây dựng hoặc sau khi xây dựng.

Đầu tiên, hãy cài đặt Plugin làm sạch không gian làm việc .

Để dọn dẹp không gian làm việc trước khi xây dựng: Trong Môi trường xây dựng, hãy chọn hộp cho biết Xóa không gian làm việc trước khi bắt đầu xây dựng.

Để dọn dẹp không gian làm việc sau khi xây dựng: Dưới tiêu đề Hành động sau khi xây dựng, chọn Xóa không gian làm việc khi quá trình xây dựng hoàn tất từ trình đơn thả xuống Thêm Hành động sau khi xây dựng .


Cảm ơn Nagendra rất nhiều. Tôi có thể khắc phục sự cố này bằng cách sử dụng plugin dọn dẹp không gian làm việc.
Karthik

điều gì sẽ xảy ra nếu tôi không dọn dẹp không gian làm việc? nó đang tìm nạp các thay đổi từ url từ xa hay chỉ xây dựng lại cùng một thứ?
alphaguy

@alphaguy Jenkins tạo không gian làm việc mới cho mỗi bản dựng mà bạn chạy, vì vậy nếu bạn không xóa không gian làm việc thì cuối cùng nút của bạn sẽ hết dung lượng.
Miles Winther

Chúng tôi có thể sử dụng lại không gian làm việc không .. hiện tại khi tôi đẩy mã nó sao chép từ máy chủ git sau đó bắt đầu xây dựng. Quá trình này cần một quá trình dài, bổ sung thêm để xây dựng quá trình! chúng ta có thể chọn cam kết mới nhất không? @MilesWinther
alphaguy 17/10/19

@alphaguy Bạn có thể sử dụng repo tham chiếu, xem câu trả lời tại đây: stackoverflow.com/a/9932036/6221831
Miles Winther

53

Nếu bạn muốn làm sạch nó theo cách thủ công, đối với tôi với phiên bản jenkins của tôi (có vẻ như không cần cài đặt thêm plugin, nhưng ai biết được), có một liên kết "không gian làm việc" ở cột bên trái, hãy nhấp vào dự án của bạn, sau đó trên "không gian làm việc", sau đó liên kết "Xóa không gian làm việc hiện tại" xuất hiện bên dưới nó ở cột bên trái. ảnh chụp màn hình


4
Tôi không thấy điều đó, thật không may. Chắc chắn nó không phải là một plugin?
Joachim Breitner

2
Rất tiếc, có vẻ như "Workspace Cleanup Plugin" thực sự là một trong những plugin được cài đặt "theo mặc định". Tuy nhiên, sau khi gỡ bỏ nó, tôi vẫn có liên kết đó và nó dường như vẫn hoạt động. Vì vậy, ... không chắc nó đến từ đâu. V2.121.3
rogerdpack

2
Điều này đã hiệu quả nhưng tôi phải nhấp vào liên kết không gian làm việc hai lần: lần đầu tiên để truy cập trang "không gian làm việc", lần thứ hai để thực sự hiển thị liên kết "Xóa không gian làm việc hiện tại". Tôi đoán đó là thông tin bạn có thể đưa vào câu trả lời.
Gnafu,

Phiên bản Jenkins này là gì? Vì của tôi không hiển thị tùy chọn này (có thể là của tôi quá cũ).
Pedro Trujillo

V2.121.3 không chắc chắn về các phiên bản khác
rogerdpack

31

Bên cạnh các giải pháp trên, có một cách "THÔNG DỤNG" hơn - xóa trực tiếp người tiêu dùng không gian lớn nhất khỏi máy Linux. Bạn có thể làm theo các bước sau:

  1. Đăng nhập vào máy Jenkins (Putty) nhập mô tả hình ảnh ở đây
  2. cd đến đường dẫn cài đặt Jenkins

Sử dụng ls -lart để liệt kê thư mục ẩn cũng được, thông thường cài đặt jenkin được đặt trong thư mục .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. liệt kê ra các không gian thư mục

Use df -h để hiển thị dung lượng đĩa ở mức cao

du -sh ./*/ để liệt kê tổng bộ nhớ cho từng thư mục con trong đường dẫn hiện tại.

du -a /etc/ | sort -n -r | head -n 10 sẽ liệt kê 10 thư mục hàng đầu ăn không gian đĩa trong / etc /

  1. Xóa bản dựng cũ hoặc thư mục kích thước lớn khác

Thông thường, thư mục ./job/ hoặc ./workspace/ có thể là thư mục lớn nhất. Vui lòng vào bên trong và xóa căn cứ mà bạn cần (KHÔNG xóa toàn bộ thư mục).

rm -rf theFolderToDelete

nhập mô tả hình ảnh ở đây


3
Không chắc tại sao lại bỏ phiếu. Điều này có vẻ là một lựa chọn tốt cho các quản trị viên Jenkins. Đồng ý là không dành cho người dùng "chỉ đọc".
Saikat

1. Điều này không thực sự trả lời câu hỏi được hỏi và 2. Máy chủ Jenkins của tôi đang chạy trên Windows.
mjaggard

10
@mjaggard Câu hỏi đã được hỏi bởi một số người khác và anh ta không đề cập đến nếu nó chỉ dành cho Windows. Anh ấy cũng hỏi cách dọn dẹp không gian làm việc (không giới hạn ở frontend / client). Tôi có thiếu điều gì rõ ràng ở đây không?
Saikat

4
Tôi hoàn toàn đồng ý với @takias, có vẻ như đây là một câu trả lời hợp lệ cho câu hỏi. Và một điều tốt nếu bạn có đủ quyền để làm điều đó.
PhoneixS

1
Đây là câu trả lời cho "làm cách nào để khôi phục dung lượng trên máy GNU / Linux" không cụ thể của jenkins.
Felipe Alvarez,

20

Plugin dọn dẹp không gian làm việc

Trong tệp Jenkins thêm

cleanWs()

Thao tác này sẽ xóa không gian làm việc sau khi xây dựng xong


3
Tôi thực sự đánh giá cao câu trả lời này vì tôi đã cài đặt plugin từ các câu trả lời khác nhưng đây là những gì giúp nó hoạt động cho thiết lập của tôi. Thêm vào đó, tôi đã theo các liên kết đến cùng một plugin trong các câu trả lời khác, nhưng cleanWs()không có trên trang đích của plugin dưới dạng cú pháp để thêm vào của tôi Jenkinsfile.
Arthur Weborg

19

QUAN TRỌNG: Có thể an toàn xóa không gian làm việc cho một công việc Jenkins nhất định miễn là công việc hiện không chạy!

Chú ý: Tôi giả định của bạn $JENKINS_HOMEđược thiết lập để mặc định: /var/jenkins_home.

Dọn dẹp một không gian làm việc

rm -rf /var/jenkins_home/workspaces/<workspace>

Dọn dẹp tất cả không gian làm việc

rm -rf /var/jenkins_home/workspaces/*

Dọn dẹp tất cả không gian làm việc với một vài ngoại lệ

Cái này sử dụng grep để tạo một danh sách trắng:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Dọn dẹp 10 không gian làm việc lớn nhất

Cái này sử dụng du và sort để liệt kê các không gian làm việc theo thứ tự lớn nhất đến nhỏ nhất. Sau đó, nó sử dụng đầu để lấy 10 đầu tiên:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

2
Điều này rất nguy hiểm vì các công việc có thể đang sử dụng những không gian làm việc đó.
aleb

13

Bạn có thể chạy tập lệnh bên dưới trong Bảng điều khiển Quản lý JenkinsTập lệnh để xóa không gian làm việc của tất cả các công việc cùng một lúc. Chúng tôi đã làm điều này để dọn dẹp dung lượng trên hệ thống tệp.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

điều này không hoạt động đối với tôi, nó hiển thị java.lang.NullPointerException: Không thể lấy thuộc tính 'mục' trên đối tượng null.
Vincent Gerris,

3

Giả sử câu hỏi là về việc dọn dẹp không gian làm việc của công việc hiện tại, bạn có thể chạy:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

không được phép bình luận, do đó:

Câu trả lời từ Upen chỉ hoạt động tốt, nhưng không nếu bạn có Jenkins Pipeline Jobs kết hợp với Freestyle Jobs. Không có Phương pháp nào như DoWipeWorkspace trên Pipeline Jobs. Vì vậy, tôi đã sửa đổi Tập lệnh để bỏ qua:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

bạn cũng có thể lọc theo Tên công việc nếu được yêu cầu: item.getDisplayName().toLowerCase().contains("release")


1

Bạn sẽ cần cài đặt plugin này trước khi các tùy chọn được đề cập ở trên xuất hiện

Plugin dọn dẹp không gian làm việc

Plugin này thêm hộp kiểm vào tất cả các cấu hình công việc để cho phép bạn xóa toàn bộ không gian làm việc trước khi chạy bất kỳ bước nào (bao gồm kiểm soát nguồn)

Điều này hữu ích để đảm bảo bạn luôn bắt đầu từ một điểm đã biết để đảm bảo cách bạn xây dựng sẽ chạy


3
Vui lòng thêm một số thông tin mà liên kết của bạn đang chứa. Câu trả lời chỉ liên kết không phải là những gì chúng tôi đang tìm kiếm ở SO! :)
Chilion

2
Phần bổ sung này không có thêm thông tin mà câu trả lời này chưa được đề cập. Trong thực tế, nó thêm ít hơn rất nhiều
Liam

0

Nếu bạn chỉ muốn xóa một dir (hoặc tệp), bạn có thể sử dụng Groovy và Manage Jenkins → Scripts Console chạy một tập lệnh để xóa nó.

Ví dụ: bạn có thể xem các tệp với:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

Và sau đó, khi bạn có thư mục muốn xóa dh, bạn chỉ cần nối mã tiếp theo:

dh.deleteDir()

Và nó sẽ bị xóa.

Lưu ý: Đường dẫn hiển thị trong ví dụ dành cho cài đặt Bitnami Jenkins, đường dẫn của bạn có thể khác.


0

Có một tùy chọn để làm điều đó. Định cấu hình -> Hành động sau xây dựng Tùy
chọn này có mặc định ít nhất là trong phiên bản Jenkins 2.236

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.