Jenkins의 다중 브랜치 파이프 라인으로 "주기적으로 구축"


80

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

답변:


68

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

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

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

Jenkins Jira 에서 발견


15
이것은 작동하지만 Jenkinsfile을 커밋하고 푸시하는 것만으로는 트리거를 선택하는 데 충분하지 않습니다. 작업은 나중에 수동으로 한 번 실행해야합니다.
Cameron

1
트리거가 무대 블록 안에있을 수 있습니까? Ie stage ( 'Deploy to production') {triggers {cron (MASTER_TRIGGER)}
학습자

2
선언적 젠킨스 파일에서 작동합니까 아니면 스크립팅 된 젠킨스 파일에서만 작동합니까?
학습자

선언적 Jenkinsfile과 함께 작동해야합니다. 트리거는 옵션 태그 iirc 내에서만 작동합니다. 마스터 브랜치 만 배포하려면 배포 블록 내에 스크립트 {if (BRANCH_NAME == „Master“) {// deploy}}를 넣을 수 있습니다. (구문이 잘못 될 수 있도록 나는 모바일에서 현재 해요)
줄리안 Veerkamp

@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브랜치 에서만 크론 트리거를 만드는 방법은 무엇입니까? 컨텍스트를 제공하려면 팀 동료가 새 기능 브랜치를 만들고 거기에 커밋 할 때 Jenkins 파일이 여전히 트리거되어야하지만 (폴링 또는 푸시를 통해) 내가 원하지 않는 것은 이러한 기능 브랜치에서 cron 트리거가 실행되는 것입니다.
foobarto

사용 : stage ( 'Stage1') {when {branch "master"} steps {}} OR stage ( 'Stage1 (Not master)') {when {not {branch 'master'}} steps {sh 'do-non- master.sh '}}
tr53

29

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

Jenkinsfile jenkins-infra / jenkins.io에서 :

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

1
첫 번째 속성에 대한 BTW는 파이프 라인 구문 이 표시해야하는 buildDiscarder것처럼 기호를 사용하여 구문을 단순화 할 수 있습니다 .
Jesse Glick

1
: 그것은 젠킨스에서 스크립트 파이프 라인에 있지 2.79 (정의되지 않은 기호 'pipelineTriggers'java.lang.UnsupportedOperationException가) 작업을 수행
gileri

2
Eric, 스크립트 된 파이프 라인에 대해 다음을 시도해보십시오. pipelineTriggers([[$class: "TimerTrigger", spec: "H 1 * * *"]])
nradev

18

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

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

기사 에서 더보기


2

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.