Как написать 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'))
  ])
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.