Jenkinsのマルチブランチパイプラインで「定期的に構築」


80

Pipelineプラグインを使用してJenkins2を実行しています。各ブランチ(マスター、開発など)のルートにJenkinsfileがあるマルチブランチパイプラインプロジェクトをセットアップしました。これを設定するのは簡単でした。ただし、コードが変更されていない場合でも、各ブランチを定期的に実行する方法(ブランチのインデックス作成ではない)に戸惑っています。定期的なビルドを有効にするには、Jenkinsfileに何を入力する必要がありますか?

回答:


68

宣言型のパイプラインを使用していて、特定のブランチでのみビルドをトリガーしたい場合は、次のようにすることができます。

String cron_string = BRANCH_NAME == "master" ? "@hourly" : ""

pipeline {
  agent none
  triggers { cron(cron_string) }
  stages {
    // do something
  }
}

見つかったジェンキンスはJira


15
これは機能しますが、Jenkinsfileをコミットしてプッシュするだけでは、トリガーを取得するのに十分ではないことに注意してください。その後、ジョブを手動で1回実行する必要があります。
キャメロン

1
トリガーをステージブロック内に配置できますか?つまり、stage( 'Deploy to production'){triggers {cron(MASTER_TRIGGER)}
学習者

2
これは宣言型のjenkinsファイルで機能しますか、それともスクリプト化されたjenkinsファイルでのみ機能しますか?
学習者

宣言型のJenkinsfileで動作するはずです。トリガーは、オプションタグiirc内でのみ機能します。マスターブランチのみをデプロイする場合は、デプロイブロック内にscript {if(BRANCH_NAME ==„ Master“){// deploy}}を配置できます。(私は現在モバイルを使用しているため、構文が間違っている可能性があります)
Julian Veerkamp 2018

@Learner「あなたは、宣言的なスタイルのパイプラインを使用する場合、」
OrangeDog

43

宣言型のJenkinsfileを使用している場合は、triggersディレクティブを使用します

pipeline {
    agent any
    triggers {
        cron('H 4/* 0 0 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

14
masterブランチでのみcronトリガーを作成する方法はありますか?コンテキストを与えるために:チームメイトが新しい機能ブランチを作成してそこでコミットするとき、Jenkinsファイルは(ポーリングまたはプッシュを介して)トリガーする必要がありますが、私が望まないのは、これらの機能ブランチでのcronトリガーの起動です。
foob​​arto 2017年

使用:stage( 'Stage1'){when {branch "master"}ステップ{}} OR stage( 'Stage1(Not master)'){when {not {branch'master '}} Steps {sh'do-non- master.sh '}}
tr 5320年

29

古いビルドを破棄することを示す例を見つけることができました。これも私が望んでいたことです。

Jenkinsfile jenkins-infra / jenkins.io:

properties(
    [
        [
            $class: 'BuildDiscarderProperty',
            strategy: [$class: 'LogRotator', numToKeepStr: '10']
        ],
        pipelineTriggers([cron('H/30 * * * *')]),
    ]
)

1
ところで、最初のプロパティについてはbuildDiscarderパイプライン構文が示すように、記号を使用して構文を簡略化できます。
Jesse Glick 2017年

1
jenkins 2.79(java.lang.UnsupportedOperationException:Undefined
symbol'pipelineTriggers

2
エリックは、単にスクリプトのパイプラインのためにこれを試してください: pipelineTriggers([[$class: "TimerTrigger", spec: "H 1 * * *"]])
nradev

18

これは私のために働いています:

  triggers {
    cron(env.BRANCH_NAME == 'development' ? 'H */12 * * *' : '')
  }

この記事でもっと見る


2

パラメータ化された定期的な実行またはスケジュールされたトリガーの場合、次のように使用できます。

triggers{
    parameterizedCron env.BRANCH_NAME == "develop" ? '''H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=vbox;VERSION=10.5.0.0
H 03 * * * % buildSlave=vm1;testSlave=vm2;HYPERVISOR=workstation;VERSION=10.5.0.0''' : ""
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.