古いビルドを破棄するパイプラインを作成するにはどうすればよいですか?


88

groovy構文ジェネレーターはサンプルステップでは機能しませんproperties: Set Job Properties。選択してフィールドにDiscard old builds入力し10ましたが、何も表示されません。Max # of builds to keepGenerate Groovy

Jenkinsバージョン:2.7


Jenkins 2.32.3で問題なく動作します
Michel Jung

回答:


182

宣言型構文については、次のoptionsブロックを使用できます。

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

logRotatorソースコードから)パラメータ:

  • daysToKeepStr:歴史は今日までしか保持されていません。
  • numToKeepStr:この数のビルドログのみが保持されます。
  • artifactDaysToKeepStr:遺物は今日までしか保管されていません。
  • artifactNumToKeepStr:この数のビルドのみがアーティファクトを保持します。

詳細については、Cloudbeesナレッジベースおよびブロックのドキュメントを参照してくださいoptions


1
これはブランチごとですか、それともパイプラインごとですか?私の環境では機能しないようです。
nroose

さまざまなオプションのパラメータを取得するためにソースコードを参照する必要があるのは一般的な方法ですか?ドキュメントは参照のみでnumToKeepStrあり、幸いなことに、他のパラメータを見つけるためにここであなたの応答を見つけました。彼らが物事をどのように文書化するかという混乱のようなものです。あなたは命の恩人ですが、ありがとう。
emmdee

誰かがこのbuildDiscarderオプションステートメントを(マルチパイプライン)ステージブロック内に配置するためのコンテキストを示すことができますか?試しましたが、ビルドが失敗します。
クリストファーD.エマーソン

54

最終的に設定したいキーを持つpropertiesメソッドを使用できますBuildDiscarderProperty。各キーの正しい構文を検索するための確実な方法はまだありません。多くの推測とチェックの後:

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

このスニペットはスクリプト構文用であることに注意してください。


1
これは機能しますが、これが2つのマップ内にネストされているのはなぜですか?
Rupert Madden-Abbott

私はあなたの答えを見ています、そして私はそれが何をするのか理解していません。過去10ビルドを保持しますか、それとも過去10日間保持しますか?過去10週間または3か月のビルドを保持できますか?の各*Strフィールドの意味を説明してくださいstrategy。男に魚を教える...など
AbhijitSarkar18年

1
すべてのオプションは、そのクラスのjavadocの記述されている@AbhijitSarkar:github.com/jenkinsci/jenkins/blob/master/core/src/main/java/...
apottere

@ apottere1。リンクが回答に含まれていません。2. Javadocを調べる場合、答えは必要ありません。答えは可能な限り完全でなければなりません。関連する部分がコピーして貼り付けられ、ここで説明されている限り、外部リンクは問題ありません。
アビジットサルカール2018年

1
@AbhijitSarkar私はOPではありません。答えがどこにあるかをお知らせしていました。
apottere 2018

18

スクリプトパイプラインの使用:

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

17

Jenkinsには、構文ジェネレーターページが組み込まれています。

パイプライン-構文:スニペットジェネレータ
<your jenkins url> / pipeline-syntax /

パイプライン-構文:ディレクティブジェネレータ
<your jenkins url> / directive-generator /

Discard old builds DirectiveGeneratorの例 古いビルドの例を破棄する


8
  1. 特定の日数後にビルドを破棄するに

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. 特定の数のビルドの後にビルドを破棄するに

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

保持するビルドの総数とは別に、ビルドを保持する日数を追加しました:)
Jerald Sabu M

そのような種類のものにはコメントを使用する必要があります。それに応じて回答を更新しました。
Vadim Kotov

コメントを追加することで評判がありません。
Jerald Sabu M

今、あなたは持っています。しかし、一般的に、評判がない場合は、コメントする代わりに答えるべきではありません
Vadim Kotov 2017年

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他のを構成できます*BranchPropertyhttps//github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

ただし、少なくともJenkins 2.73.2の場合は、GUIに表示されない可能性があります。ただし、JobDSLを使用することも、config.xml直接変更することもできます(私はそうは言いませんでした;-))


Job DSLプラグインについて話しているのですか?JenkinsPipelinesと同じものではありません。つまり、パイプラインを使用するすべての人がJobDSLプラグインを使用しているわけではありません。
Vadim Kotov 2018

@VadimKotovいいえ、そうではありません。Jenkinsパイプラインでビルド保持を構成する際に問題が発生しました。Jenkinsfileではやりたくありませんでしたが、代わりにジョブレベルで行いました。ここではJobDSLを使用しましたが、これはビルドジョブのセットアップを自動化するための手段にすぎないため、実際には問題ではありません。ただし、GUIにバグがあり、ビルドジョブを手動で構成したときに上記の設定が表示されないようです。(JobDSLは、他の方法ではGUIを介して実行できなかったことを何も実行しません)
Torben Knerr 2018

2

プログラム的な方法が必要な場合(つまり、options{}パイプライン構文を使用するのではなく、関数からこれを行う):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.