Як написати Pipeline, щоб відкинути старі збірки?


88

Генератор пазурних синтаксисів НЕ працює для етапу вибірки properties: Set Job Properties. Я вибрав, Discard old buildsа потім ввів 10у Max # of builds to keepполе, а потім Generate Groovyі нічого не відображається.

Версія Дженкінса: 2.7


Для мене чудово працює Дженкінс 2.32.3
— Мішель Юнг,

Відповіді:


182

Що стосується декларативного синтаксису, ви можете використовувати optionsблок:

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

Параметри для logRotator(з вихідного коду ):

  • daysToKeepStr: історія зберігається лише донині.
  • numToKeepStr: зберігається лише ця кількість журналів збірки.
  • artifactDaysToKeepStr: артефакти зберігаються лише донині.
  • artifactNumToKeepStr: лише ця кількість збірок зберігає свої артефакти.

Більше інформації можна знайти в базі знань Cloudbees та в документації до optionsблоку .


1
Це повинно бути для відгалуження або для трубопроводу? Здається, це не працює в моєму середовищі.
— nroose

Чи загальна практика вимагати посилання на вихідний код, щоб отримати параметри для різних опцій? Документи посилаються лише на numToKeepStrщастя, я знайшов тут вашу відповідь, щоб знайти інші параметри. Начебто безладно, як вони документують речі. Дякую, хоча ти врятував життя.
— emmdee

Чи може хтось показати контекст для розміщення цього виразу параметрів buildDiscarder всередині блоку етапу (багатопровідного)? Я пробував, але моя збірка не вдалася.
— Крістофер Д. Емерсон,

53

Ви можете використовувати propertiesметод, який, вкладений у BuildDiscarderPropertyкінцевий результат, має ключ, який ви хочете встановити. Я все ще не маю надійного способу знайти правильний синтаксис кожного ключа. Після довгих здогадок і перевірок:

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

Зверніть увагу, що цей фрагмент призначений для сценарію синтаксису.


1
Це працює, але чому це вкладено в дві карти, і як ви це зробили?
— Руперт Медден-Абботт

Я дивлюсь на вашу відповідь і не розумію, що вона робить. Чи зберігається він останні 10 збірок чи останні 10 днів? Чи можу я зберегти останні 10 тижнів або 3 місяці? Будь ласка, поясніть значення кожного *Strполя в strategy. Навчіть чоловіка ловити рибу ... тощо
— Абхіджіт Саркар

1
@AbhijitSarkar всі варіанти описані в javadoc цього класу: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
— apottere

@apottere 1. Посилання не відповідає. 2. Якби я розглядав Javadoc, відповіді немає. Відповідь повинна бути якомога повнішою. Зовнішні посилання нормальні, якщо відповідна частина копіюється та пояснюється тут.
— Абхіджіт Саркар,

1
@AbhijitSarkar Я не ОП, я просто повідомляв вам, де ви можете знайти відповідь.
— апоттере

17

Дженкінс має вбудовані сторінки генератора синтаксису.

Синтаксис
<your jenkins urlконвеєра : Генератор фрагментів > / конвеєр-синтаксис /

Синтаксис трубопроводу: Генератор директив
<your jenkins url> / генератор директив /

Discard old builds приклад із Генератора директив відкинути приклад старої збірки


17

Для використання сценарійних трубопроводів:

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

8
  1. Щоб скасувати збірку через певну кількість днів :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Щоб скасувати збірку після певної кількості збірок :

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

Щойно додано кількість днів для збереження збірок, крім загальної кількості збірок, які потрібно зберегти :)
— Джеральд Сабу М,

Ви повинні використовувати коментарі для таких типів речей. Відповідно я оновив свою відповідь.
— Вадим Котов

У мене немає репутації для додавання коментарів.
— Джеральд Сабу М

Тепер у вас є. Але загалом, якщо у вас немає репутації, вам не слід відповідати замість того, щоб коментувати .
— Вадим Котов

6

Відповідь Вадима з якоїсь невідомої причини для мене не спрацювала. Я спростив це наступним чином, і це працює зараз:

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

6

Для декларативного конвеєра ви можете додати це:

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, але де ти знайшов інформацію? Коди?
— silencej

1
Я зазвичай роблю це звідси jenkins-base-url:port if any/pipeline-syntax/. Ось також інший javadoc.jenkins.io/hudson/tasks/LogRotator.html . Я також вивчаю вихідний код плагіна github, щоб детально розібратися. @silencej
— bhordupur

2

Якщо ви хочете налаштувати збереження збірки на рівні багатогалузевого конвеєра (проти всіх окремих Jenkinsfile), це теж можливо: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

На додаток до BuildRetentionBranchPropertyви можете налаштувати будь-який інший з *BranchPropertyтут: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Однак вони можуть не відображатися в графічному інтерфейсі, принаймні для мене з Jenkins 2.73.2. Але ви все ще можете використовувати JobDSL або змінити config.xmlбезпосередньо (я не казав цього ;-))


Ви говорите про плагін роботи DSL ? Це не те саме, що трубопроводи Дженкінса. Я маю на увазі, що не всі, хто користується конвеєрами, використовують плагін Job DSL.
— Вадим Котов

@VadimKotov ні, не дуже. У мене була проблема з налаштуванням збереження збірки в трубопроводах Jenkins. Я не хотів це робити у файлі Jenkins, а замість цього на рівні роботи. Я використовував Job DSL тут, але це насправді не має значення, оскільки це лише засіб для автоматизації налаштування робочих місць. Однак, схоже, в графічному інтерфейсі є помилка, яка перешкоджає появі вищезазначених налаштувань при налаштуванні завдання збірки вручну. (JobDSL не робить нічого, що ви не могли зробити за допомогою графічного інтерфейсу)
— Torben Knerr

2

Якщо вам потрібен програмний спосіб (тобто робити це з функції, а не з використанням options{}конвеєрного синтаксису):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.