[jenkins] Jenkins의 다중 브랜치 파이프 라인으로 “주기적으로 구축”

Pipeline 플러그인으로 Jenkins 2를 실행하고 있습니다. 각 분기 (마스터, 개발 등)에 Jenkinsfile이 루트에있는 다중 분기 파이프 라인 프로젝트를 설정했습니다. 설정은 간단했습니다. 그러나 코드가 변경되지 않더라도 각 분기를 주기적으로 (분기 인덱싱이 아닌) 실행하는 방법을 잃어 버렸습니다. 주기적인 빌드를 활성화하려면 Jenkinsfile에 무엇을 넣어야합니까?



답변

선언적 스타일 파이프 라인을 사용하고 특정 분기에서만 빌드를 트리거하려는 경우 다음과 같이 할 수 있습니다.

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

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

Jenkins Jira 에서 발견


답변

선언적 스타일 Jenkinsfile을 사용하는 경우 triggers 지시문 을 사용합니다 .

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


답변

나는 이것을 폐기하는 오래된 빌드를 보여주는 예를 찾을 수 있었고, 이것은 또한 내가 원했던 것입니다.

Jenkinsfile jenkins-infra / jenkins.io에서 :

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


답변

이것은 나를 위해 일하고 있습니다.

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

기사 에서 더보기


답변

Paramertized 주기적 실행 또는 예약 된 트리거의 경우 다음과 같이 사용할 수 있습니다.

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''' : ""
}


답변

위의 솔루션으로 문제가 발생했습니다.
나는 Jenkins 마법사가 아니므로 이전 형식 / 구문 또는 무언가를 사용하고 있는지 확실하지 않지만 다음은 나를 위해 작동합니다.

#!/usr/bin/env groovy
properties(
    [
        pipelineTriggers([
                [
                    $class: 'TimerTrigger',
                    spec: 'H 7,19 * * *'
                ]
         ])
    ]
)

결정 위치 : https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/triggers/TimerTrigger.java


답변