Как написать Pipeline, чтобы отбрасывать старые сборки?

88

Генератор синтаксиса groovy НЕ работает на этапе выборки properties: Set Job Properties. Я выбрал, Discard old buildsа затем ввел 10в Max # of builds to keepполе, Generate Groovyно ничего не отображается.

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

тарабайт
источник
У меня отлично работает с Jenkins 2.32.3
Мишель Юнг

Ответы:

181

Что касается декларативного синтаксиса, вы можете использовать optionsблок:

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

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

  • daysToKeepStr: история ведется только до наших дней.
  • numToKeepStr: сохраняется только это количество журналов сборки.
  • artifactDaysToKeepStr: Артефакты хранятся только по сей день.
  • artifactNumToKeepStr: артефакты сохраняются только в этом количестве сборок.

Дополнительную информацию можно найти в базе знаний Cloudbees и в документации для optionsблока .

Вадим Котов
источник
1
Это должно быть по ветке или по конвейеру? В моем окружении это не работает.
nroose 07
Это общая практика - обращаться к исходному коду, чтобы получить параметры для различных опций? Документы только ссылки, 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 Я не ОП, я просто давал вам знать, где вы можете найти ответ.
apottere
17

Jenkins имеет встроенные страницы генератора синтаксиса.

Синтаксис конвейера: генератор фрагментов
<your jenkins url> / pipeline-syntax /

Синтаксис конвейера: Генератор директив
<your jenkins url> / directive-generator /

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'
        )
    )
}
Бхордупур
источник
Спасибо, а где вы нашли информацию? Коды?
silentj
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напрямую изменять (я этого не говорил ;-))

Торбен Кнерр
источник
Вы говорите о плагине Job DSL ? Это не то же самое, что Jenkins Pipelines. Я имею в виду, что не все, кто использует Pipelines, используют плагин Job DSL.
Вадим Котов
@VadimKotov нет, не совсем. У меня возникла проблема с настройкой сохранения сборки в Jenkins Pipelines. Я хотел делать это не в Jenkinsfile, а на уровне работы. Я использовал здесь Job DSL, но это не имеет особого значения, поскольку это всего лишь средство для автоматизации настройки заданий сборки. Однако похоже, что в графическом интерфейсе есть ошибка, которая не позволяет отображать указанные выше параметры при настройке задания сборки вручную. (JobDSL не делает того, что вы не могли бы сделать через графический интерфейс)
Торбен Кнерр
2

Если вам нужен программный способ (например, выполнение этого из функции, а не с использованием options{}синтаксиса конвейера):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
Дэвид Лаванда
источник