파이프 라인을 작성하여 이전 빌드를 삭제하는 방법은 무엇입니까?


87

groovy 구문 생성기가 샘플 단계에서 작동하지 않습니다 properties: Set Job Properties. 필드 Discard old builds를 선택 하고 입력 10했는데 아무것도 표시되지 않습니다.Max # of builds to keepGenerate Groovy

Jenkins 버전 : 2.7


젠킨스 2.32.3와 나를 위해 잘 작동
미셸 정

답변:


181

선언적 구문의 경우 options블록을 사용할 수 있습니다 .

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

logRotator( 소스 코드에서 )에 대한 매개 변수 :

  • daysToKeepStr: 역사는 오늘날까지만 유지됩니다.
  • numToKeepStr:이 수의 빌드 로그 만 유지됩니다.
  • artifactDaysToKeepStr: 유물은 현재까지만 보관됩니다.
  • artifactNumToKeepStr:이 빌드 수에만 아티팩트가 유지됩니다.

자세한 내용은 Cloudbees 지식 기반block 문서options 에서 찾을 수 있습니다 .


1
이것은 분기당 또는 파이프 라인 당이어야합니까? 내 환경에서 작동하지 않는 것 같습니다.
nroose

다양한 옵션에 대한 매개 변수를 얻기 위해 소스 코드를 참조해야하는 일반적인 관행입니까? 문서는 참조 용 numToKeepStr이며 운 좋게도 다른 매개 변수를 찾기 위해 여기에서 귀하의 응답을 찾았습니다. 그들이 문서화하는 방식이 엉망입니다. 생명의 은인이지만 감사합니다.
emmdee

누군가이 buildDiscarder 옵션 문을 (다중 파이프 라인) 단계 블록 안에 넣는 컨텍스트를 보여줄 수 있습니까? 시도했지만 빌드가 실패합니다.
Christopher D. Emerson

53

결국에는 설정하려는 키가 있는 properties메서드를 사용할 수 있습니다 BuildDiscarderProperty. 여전히 각 키의 올바른 구문을 찾는 확실한 방법이 없습니다. 많은 추측과 확인 후 :

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

이 스 니펫은 스크립트 구문을위한 것입니다.


1
이것은 효과가 있지만 왜 이것이 두 개의 맵 안에 중첩되어 있으며 어떻게 해결 했습니까?
Rupert Madden-Abbott

나는 당신의 대답을보고 있는데 그것이 무엇을하는지 이해하지 못합니다. 지난 10 개의 빌드를 유지합니까 아니면 지난 10 일 동안 유지합니까? 지난 10 주 또는 3 개월의 빌드를 유지할 수 있습니까? 에서 각 *Str필드 의 의미를 설명하십시오 strategy. 물고기 사람 ... 등을 가르쳐
Abhijit 사카

1
@AbhijitSarkar 모든 옵션은 해당 클래스의 javadoc에 설명되어 있습니다. github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. 링크가 답에 없습니다. 2. Javadoc을 살펴보면 대답 할 필요가 없습니다. 대답은 가능한 한 완전해야합니다. 관련 부분을 복사하여 여기에 설명하는 한 외부 링크는 괜찮습니다.
Abhijit Sarkar

1
@AbhijitSarkar 저는 OP가 아닙니다. 어디에서 답을 찾을 수 있는지 알려주고있었습니다.
apottere

17

Jenkins에는 내장 구문 생성기 페이지가 있습니다.

파이프 라인 구문 : 스 니펫 생성기
<your jenkins url > / pipeline-syntax /

파이프 라인 구문 : 지시어 생성기
<your jenkins url > / directive-generator /

Discard old builds Directive Generator의 예 오래된 빌드 예제 삭제


17

스크립팅 된 파이프 라인의 경우 다음을 사용합니다.

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

8
  1. 특정 일수 이후 빌드를 취소하려면 :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. 특정 수의 빌드 후 빌드를 취소하려면 다음을 수행하십시오.

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

:) 계속 빌드의 그냥 일의 추가 수는이 총 수에서 떨어져, 빌드 유지
제럴드 사부 M

이러한 유형의 경우 주석을 사용해야합니다. 그에 따라 내 답변을 업데이트했습니다.
Vadim Kotov 2017

댓글을 달았다는 평판이 없습니다.
Jerald Sabu M

이제 있습니다. 그러나 일반적으로 평판이 없으면 댓글 대신 답변해서는 안됩니다 .
Vadim Kotov 2017

6

Vadim의 대답은 알 수없는 이유로 저에게 효과가 없었습니다. 다음과 같이 단순화했으며 이제 작동합니다.

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

다중 브랜치 파이프 라인 작업 수준 (모든 개별 Jenkinsfiles의 경우) 에서 빌드 보존을 구성하려는 경우 에도 가능합니다. https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels : comment-tabpanel # comment-325601

이외에도 https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch 에서 BuildRetentionBranchProperty다른 *BranchPropertys를 구성 할 수 있습니다.

적어도 Jenkins 2.73.2를 사용하는 경우 GUI에 표시되지 않을 수 있습니다. 그러나 여전히 JobDSL을 사용하거나 config.xml직접 수정할 수 있습니다 (나는 ;-))


Job DSL Plugin 에 대해 이야기하고 있습니까? Jenkins Pipelines와는 다릅니다. 내 말은, Pipelines를 사용하는 모든 사람이 Job DSL Plugin을 사용하는 것은 아닙니다.
Vadim Kotov

@VadimKotov 아니, 정말로. Jenkins Pipelines에서 빌드 보존을 구성하는 데 문제가있었습니다. Jenkinsfile에서 그렇게하고 싶지 않았지만 대신 작업 수준에서 수행하고 싶었습니다. 여기서는 Job DSL을 사용했지만 빌드 작업 설정을 자동화하는 수단 일 뿐이므로 실제로는 중요하지 않습니다. 그러나 빌드 작업을 수동으로 구성 할 때 위의 설정이 나타나지 않도록하는 GUI에 버그가있는 것 같습니다. (JobDSL 그렇지 않으면 GUI를 통해 당신이 할 수없는 아무것도하지 않습니다)
의 Torben Knerr

2

프로그래밍 방식이 필요한 경우 (예 options{}: 파이프 라인 구문을 사용하는 대신 함수에서 수행 ) :

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.