Jenkins 작업 영역을 정리하는 방법이 있습니까?


100

Jenkins에서 작업 공간을 어떻게 정리할 수 있습니까? AccuRev버전 관리 도구로 사용 하고 있습니다.

freestyleJenkins에서 프로젝트를 만들었습니다 .

답변:


91

Jenkins에서 작업 공간을 정리하는 방법이 있습니다. 빌드 전 또는 빌드 후에 작업 공간을 정리할 수 있습니다.

먼저 Workspace Cleanup Plugin을 설치 합니다.

빌드 전에 작업 공간을 정리하려면 빌드 환경에서 빌드가 시작되기 전에 작업 공간 삭제 상자를 선택하십시오 .

빌드 후 작업 공간을 정리하려면 : 제목 아래 빌드 후 작업이 선택한 빌드가 완료되면 삭제 작업 공간 으로부터 빌드 후 작업이 추가 메뉴 아래로 놓습니다.


Nagendra에게 감사합니다. 작업 공간 정리 플러그인을 사용하여이 문제를 해결할 수 있습니다.
KARTHIK

작업 공간을 청소하지 않으면 어떻게됩니까? 원격 URL에서 변경 사항을 가져 오거나 동일한 것을 반복해서 빌드합니까?
alphaguy

@alphaguy Jenkins는 실행하는 각 빌드에 대해 새 작업 공간을 생성하므로 작업 공간을 삭제하지 않으면 결국 노드 공간이 부족해집니다.
Miles Winther

작업 공간을 재사용 할 수 있습니까 .. 현재 코드를 git 서버에서 복제 한 다음 빌드를 시작하면됩니다. 이것은 빌드 프로세스를 추가하는 긴 프로세스가 필요합니다! 최신 커밋을 고를 수 있습니까? @MilesWinther
alphaguy

@alphaguy 참조 저장소를 사용할 수 있습니다. 여기에 대한 답변을 참조하십시오. stackoverflow.com/a/9932036/6221831
Miles Winther

53

내 버전의 jenkins를 사용하여 수동으로 정리하고 싶다면 (추가 플러그인을 설치할 필요가없는 것처럼 보이지만 누가 알고 있는지) 왼쪽 열에 "작업 공간"링크가 있습니다. 프로젝트를 클릭하십시오. 그런 다음 "작업 공간"에서 "현재 작업 공간 지우기"링크가 왼쪽 열의 그 아래에 나타납니다. 스크린 샷


4
안타깝게도 보이지 않습니다. 확실히 플러그인이 아닙니까?
Joachim Breitner

2
"Workspace Cleanup Plugin"은 실제로 "기본적으로"설치되는 플러그인 중 하나 인 것 같습니다. 그러나 그것을 제거한 후에도 여전히 해당 링크가 있으며 여전히 작동하는 것 같습니다. 그래서 ... 어디에서 왔는지 확실하지 않습니다. V2.121.3
rogerdpack

2
이것은 효과가 있었지만 작업 공간 링크를 두 번 클릭해야했습니다. 첫 번째는 "작업 공간"페이지로 이동하고 두 번째는 실제로 "현재 작업 공간 지우기"링크를 표시하는 것입니다. 답변에 포함시킬 수있는 정보라고 생각합니다.
Gnafu

이 버전은 어떤 Jenkins 버전입니까? 내 항목은이 옵션을 표시하지 않기 때문입니다 (아마 내 항목은 너무 오래되었습니다).
Pedro Trujillo 19

V2.121.3하지 않도록 다른 버전에
rogerdpack

31

위의 솔루션 외에도 "일반적인"방법이 있습니다. Linux 시스템에서 가장 큰 공간 소비자를 직접 삭제합니다. 다음 단계를 따를 수 있습니다.

  1. Jenkins 머신 (Putty)에 로그인 여기에 이미지 설명 입력
  2. Jenkins 설치 경로로 이동합니다.

ls -lart를 사용하여 숨겨진 폴더도 나열하면 일반적으로 jenkin 설치는 .jenkins / 폴더에 있습니다.

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. 폴더 공간 나열

Use df -h 높은 수준의 디스크 공간 표시

du -sh ./*/ 현재 경로의 각 하위 폴더에 대한 총 메모리를 나열합니다.

du -a /etc/ | sort -n -r | head -n 10 / etc /에서 디스크 공간을 차지하는 상위 10 개 디렉토리를 나열합니다.

  1. 이전 빌드 또는 기타 대용량 폴더 삭제

일반적으로 ./job/ 폴더 또는 ./workspace/ 폴더가 가장 큰 폴더가 될 수 있습니다. 들어가서 필요에 따라 기본을 삭제하십시오 (전체 폴더를 삭제하지 마십시오).

rm -rf theFolderToDelete

여기에 이미지 설명 입력


3
왜 투표하지 않았는지 모르겠습니다. Jenkins 관리자에게 좋은 옵션 인 것 같습니다. "읽기 전용"사용자에 대해서는 동의하지 않습니다.
Saikat 2017 년

1. 이것은 실제로 질문에 대한 답이 아닙니다. 2. 제 Jenkins 서버가 Windows에서 실행되고 있습니다.
mjaggard

10
@mjaggard 다른 사람이 질문을했지만 Windows 전용인지 언급하지 않았습니다. 또한 그는 작업 공간을 정리하는 방법을 물었습니다 (프런트 엔드 / 클라이언트에만 국한되지 않음). 여기서 명백한 것이 누락 되었습니까?
Saikat

4
@takias에 전적으로 동의하며 질문에 대한 유효한 대답 인 것 같습니다. 그리고 당신이 그것을 할 충분한 권한이 있다면 좋은 것입니다.
PhoneixS

1
이것은 젠킨스 특유가 아닌 "GNU / 리눅스 시스템에서 공간을 복구하는 방법"에 대한 답변입니다.
Felipe Alvarez

20

작업 공간 정리 플러그인

Jenkins 파일에서 추가

cleanWs()

빌드가 완료된 후 작업 공간이 삭제됩니다.


3
나는 다른 답변에서 플러그인을 설치했기 때문에이 답변에 정말 감사하지만 이것이 내 설정에서 작동하게 된 것입니다. 여기에 추가하여 다른 답변에서 동일한 플러그인에 대한 링크를 따라 갔지만 cleanWs()플러그인 랜딩 페이지에는 내 Jenkinsfile.
Arthur Weborg

19

중요 : 작업이 현재 실행되지 않는 한 주어진 Jenkins 작업에 대한 작업 공간을 제거하는 것이 안전합니다!

참고 : 귀하의 $JENKINS_HOME가 기본값으로 설정되어 있다고 가정합니다 /var/jenkins_home.

하나의 작업 공간 정리

rm -rf /var/jenkins_home/workspaces/<workspace>

모든 작업 공간 정리

rm -rf /var/jenkins_home/workspaces/*

몇 가지 예외를 제외하고 모든 작업 공간 정리

이것은 grep을 사용하여 화이트리스트를 만듭니다.

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

가장 큰 작업 공간 10 개 정리

이것은 du와 sort를 사용하여 가장 큰 것에서 가장 작은 순서로 작업 공간을 나열합니다. 그런 다음 head를 사용하여 처음 10 개를 가져옵니다.

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

2
작업이 해당 작업 공간을 사용할 수 있으므로 위험합니다.
aleb

13

한 번에 모든 작업의 ​​작업 공간을 삭제하기 위해 Jenkins 관리스크립트 콘솔 에서 아래 스크립트를 실행할 수 있습니다 . 파일 시스템의 공간을 정리하기 위해 이렇게했습니다.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

이것은 나를 위해 작동하지 않습니다. java.lang.NullPointerException : Cannot get property 'items'on null object.
빈센트 Gerris

3

질문이 현재 작업의 작업 공간 정리에 관한 것이라고 가정하면 다음을 실행할 수 있습니다.

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

따라서 댓글을 달 수 없습니다.

Upen 의 대답은 작동하지만 Jenkins Pipeline Jobs와 Freestyle Jobs가 혼합 된 경우에는 그렇지 않습니다. 파이프 라인 작업에는 DoWipeWorkspace와 같은 메서드가 없습니다. 그래서 그것을 건너 뛰기 위해 스크립트를 수정했습니다.

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

필요한 경우 작업 이름으로 필터링 할 수도 있습니다. item.getDisplayName().toLowerCase().contains("release")


1

위에서 언급 한 옵션이 나타나기 전에이 플러그인을 설치해야합니다.

작업 공간 정리 플러그인

이 플러그인은 모든 작업 구성에 확인란을 추가하여 모든 단계 (소스 제어 포함)가 실행되기 전에 전체 작업 공간을 삭제할 수 있습니다.

이것은 빌드가 실행되는 방식을 보장하기 위해 항상 알려진 지점에서 시작하도록하는 데 유용합니다.


3
링크에 포함 된 정보를 추가하십시오. 링크 전용 답변은 우리가 찾고있는 것이 아닙니다! :)
Chilion 2015

2
이 추가는 이 답변 이 아직 다루지 않은 정보 가 아닙니다. 이 추가 사실 A의 많은 적은
리암

0

하나의 dir (또는 파일) 만 제거하려면 Groovy를 사용하고 Jenkins 관리 → Scripts Console을 사용하여 제거하는 스크립트를 실행할 수 있습니다.

예를 들어 다음을 사용하여 파일을 볼 수 있습니다.

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

그런 다음에서 삭제할 폴더가 있으면 dh다음 코드를 추가하기 만하면됩니다.

dh.deleteDir()

그리고 삭제됩니다.

참고 : 예제에 표시된 경로는 Bitnami Jenkins 설치용이며 사용자 경로는 다를 수 있습니다.


0

그것을 할 수있는 옵션이 있습니다. 구성-> 빌드 후 작업
이 옵션은 최소한 Jenkins 버전 2.236에서 기본적으로 제공됩니다.

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