Làm thế nào để viết Pipeline để loại bỏ các bản dựng cũ?


88

Trình tạo cú pháp thú vị KHÔNG hoạt động cho bước mẫu properties: Set Job Properties. Tôi đã chọn Discard old buildsvà sau đó bước vào 10trong Max # of builds to keepsân và sau đó Generate Groovyvà không có gì show lên.

Phiên bản Jenkins: 2.7


Làm việc tốt cho tôi với Jenkins 2.32.3
Michel Jung

Câu trả lời:


182

Đối với cú pháp khai báo, bạn có thể sử dụng optionskhối:

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30'))
  }
  ...
}

Các thông số cho logRotator(từ mã nguồn ):

  • daysToKeepStr: lịch sử chỉ được lưu giữ cho đến ngày nay.
  • numToKeepStr: chỉ số bản ghi xây dựng này được giữ lại.
  • artifactDaysToKeepStr: hiện vật chỉ được lưu giữ đến ngày nay.
  • artifactNumToKeepStr: chỉ có số lượng công trình này được lưu giữ hiện vật.

Có thể tìm thấy thêm thông tin trong cơ sở kiến ​​thức Cloudbees và trong tài liệu dành cho optionskhối .


1
Điều này được cho là cho mỗi nhánh hoặc mỗi đường ống? Nó dường như không hoạt động trong môi trường của tôi.
nroose

Có phải thông lệ chung là cần tham khảo mã nguồn để lấy các tham số cho các tùy chọn khác nhau không? Tài liệu chỉ mang tính chất tham khảo numToKeepStrvà may mắn là tôi đã tìm thấy phản hồi của bạn ở đây để tìm các thông số khác. Thật là một mớ hỗn độn về cách họ ghi chép mọi thứ. Cảm ơn mặc dù bạn là một người tiết kiệm cuộc sống.
emmdee

Ai đó có thể chỉ ra bối cảnh để đặt câu lệnh tùy chọn buildDiscarder này bên trong khối giai đoạn (đa đường ống) không? Tôi đã thử nhưng bản dựng của tôi không thành công.
Christopher D. Emerson

53

Bạn có thể sử dụng propertiesphương thức được lồng trong khóa BuildDiscarderPropertycuối cùng mà bạn muốn đặt. Tôi vẫn chưa có cách chắc chắn để tra cứu cú pháp chính xác của từng phím. Sau nhiều lần đoán và kiểm tra:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10']]]);

Lưu ý rằng đoạn mã này dành cho cú pháp theo tập lệnh.


1
Điều này hoạt động nhưng tại sao điều này lại được lồng trong hai bản đồ và bạn đã giải quyết điều này như thế nào?
Rupert Madden-Abbott

Tôi đang xem câu trả lời của bạn và tôi không hiểu nó có tác dụng gì. Nó có giữ được 10 bản dựng gần nhất hay kéo dài 10 ngày không? Tôi có thể giữ bản dựng 10 tuần hoặc 3 tháng trước không? Vui lòng giải thích ý nghĩa của từng *Strtrường trong strategy. Dạy một người đàn ông để cá ... vv
Abhijit Sarkar

1
@AbhijitSarkar tất cả các tùy chọn được mô tả trong javadoc của lớp đó: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. Liên kết không có trong câu trả lời. 2. Nếu tôi đã xem xét Javadoc, không cần phải có câu trả lời. Câu trả lời phải đầy đủ nhất có thể. Các liên kết bên ngoài là được, miễn là phần có liên quan được sao chép và giải thích ở đây.
Abhijit Sarkar

1
@AbhijitSarkar Tôi không phải là OP, tôi chỉ cho bạn biết nơi bạn có thể tìm thấy câu trả lời.
apottere

17

Jenkins có các trang tạo cú pháp tích hợp sẵn.

Đường ống-Cú pháp: Trình tạo đoạn mã
<your jenkins url> / đường ống-cú pháp /

Pipeline-Syntax: Chỉ thị tạo
<your jenkins url> / chỉ thị-tạo /

Discard old builds ví dụ từ Trình tạo chỉ thị loại bỏ ví dụ về bản dựng cũ


17

Để sử dụng Đường ống được Tập lệnh:

properties([
    buildDiscarder(logRotator(daysToKeepStr: '3', numToKeepStr: '3')),
])

8
  1. Để hủy bản dựng sau một số ngày cụ thể :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Để hủy bản dựng sau một số bản dựng cụ thể :

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    

Chỉ cần thêm số ngày để giữ các bản dựng, ngoài tổng số các bản dựng cần giữ :)
Jerald Sabu M

Bạn nên sử dụng bình luận cho những thứ như vậy. Tôi đã cập nhật câu trả lời của mình cho phù hợp.
Vadim Kotov

Tôi không có danh tiếng để thêm bình luận.
Jerald Sabu M

Bây giờ bạn có. Nhưng nói chung, nếu bạn không có uy tín, bạn không nên trả lời thay vì bình luận .
Vadim Kotov

6

Câu trả lời của Vadim không phù hợp với tôi vì một số lý do không xác định. Tôi đã đơn giản hóa nó như sau và nó hoạt động ngay bây giờ:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}

6

Đối với đường dẫn khai báo, bạn có thể thêm cái này:

options {

    buildDiscarder(
        logRotator(
            // number of build logs to keep
            numToKeepStr:'5',
            // history to keep in days
            daysToKeepStr: '15',
            // artifacts are kept for days
            artifactDaysToKeepStr: '15',
            // number of builds have their artifacts kept
            artifactNumToKeepStr: '5'
        )
    )
}

Thx, nhưng bạn đã tìm thấy thông tin ở đâu? Mã số?
im lặng

1
Tôi thường làm điều đó từ đây jenkins-base-url:port if any/pipeline-syntax/. Đây cũng là một javadoc.jenkins.io/hudson/tasks/LogRotator.html khác . Đôi khi tôi cũng xem xét mã nguồn github của plugin để hiểu chi tiết. @silencej
bhordupur

2

Nếu bạn muốn định cấu hình duy trì bản dựng ở cấp độ công việc của đường ống đa kênh (so với tất cả từng cá nhân Jenkinsfile) thì điều này cũng có thể thực hiện được: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Ngoài cái này, BuildRetentionBranchPropertybạn có thể định cấu hình bất kỳ cái nào khác *BranchPropertyở đây: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Mặc dù vậy, chúng có thể không được hiển thị trong GUI, ít nhất là đối với tôi với Jenkins 2.73.2. Nhưng bạn vẫn có thể sử dụng JobDSL hoặc sửa đổi config.xmltrực tiếp (tôi không nói vậy ;-))


Bạn đang nói về Job DSL Plugin ? Nó không giống với Jenkins Pipelines. Ý tôi là, không phải tất cả những người sử dụng Pipelines đều đang sử dụng Job DSL Plugin.
Vadim Kotov

@VadimKotov không, không hẳn vậy. Tôi gặp sự cố khi định cấu hình lưu giữ bản dựng trong Jenkins Pipelines. Tôi không muốn làm điều đó trong Jenkinsfile mà thay vào đó là ở cấp độ công việc. Tôi đã sử dụng Job DSL ở đây, nhưng nó không thực sự quan trọng vì đây chỉ là một phương tiện để tự động hóa việc thiết lập các công việc xây dựng. Tuy nhiên, có vẻ như có lỗi trong GUI ngăn các cài đặt trên xuất hiện khi bạn định cấu hình công việc xây dựng theo cách thủ công. (JobDSL không có gì bạn không thể làm được thông qua giao diện đồ họa khác)
Torben Knerr

2

Nếu bạn cần một cách có lập trình (tức là thực hiện điều này từ một hàm, thay vì sử dụng options{}cú pháp đường ống):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
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.