Як написати 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.