[jenkins] 서버를 다시 시작하지 않고 Jenkins에서 멈추지 않는 좀비 작업을 중지하는 방법은 무엇입니까?

Jenkins 서버에 3 일 동안 실행 된 작업이 있지만 아무것도하지 않습니다. 모서리에있는 작은 X를 클릭해도 아무 것도 수행되지 않으며 콘솔 출력 로그에도 아무 것도 표시되지 않습니다. 빌드 서버를 확인했는데 실제로 작업이 전혀 실행되지 않는 것 같습니다.

젠킨스에게 파일이나 잠금 등을 편집하여 작업이 “완료”되었다고 알리는 방법이 있습니까? 많은 작업이 있으므로 서버를 다시 시작하고 싶지 않습니다.



답변

“Jenkins 관리”> “스크립트 콘솔”로 이동하여 서버에서 스크립트를 실행하여 중단 스레드를 중단하십시오.

모든 라이브 스레드를 가져 Thread.getAllStackTraces()오고 걸려있는 스레드를 중단 할 수 있습니다 .

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

최신 정보:

스레드를 사용하는 위의 솔루션은 최신 Jenkins 버전에서 작동하지 않을 수 있습니다. 고정 된 파이프 라인을 중단하려면 대신 alexandru-bantiuc에 의한 솔루션을 참조하여 다음 을 실행하십시오.

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );


답변

나는 또한 같은 문제가 있었고 Jenkins Console을 통해 수정했습니다.

“Jenkins 관리”> “스크립트 콘솔”로 이동하여 스크립트를 실행하십시오.

 Jenkins .instance.getItemByFullName("JobName")
        .getBuildByNumber(JobNumber)
        .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

JobName과 JobNumber를 지정하면됩니다.


답변

경우에 당신은 가지고 Multibranch 파이프 라인 -job을 (당신은 젠킨스 – 관리자입니다)에서의 사용 젠킨스 스크립트 콘솔 이 스크립트 :

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

에서 https://issues.jenkins-ci.org/browse/JENKINS-43020

작업의 전체 이름 (경로)이 무엇인지 확실하지 않은 경우 다음 스 니펫을 사용하여 모든 항목의 전체 이름을 나열 할 수 있습니다.

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

에서 https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs


답변

이 작업에 모니터링 플러그인 을 사용 합니다 . 플러그인 설치 후

  1. Jenkins 관리> Hudson / Jenkins 마스터 모니터링으로 이동하십시오.
  2. 오른쪽의 작은 파란색 링크 인 스레드 세부 사항을 펼치십시오.
  3. 중단 된 작업 명 검색

    스레드 이름은 다음과 같이 시작됩니다

    Executor #2 for master : executing <your-job-name> #<build-number>

  4. 원하는 작업이있는 행 표의 오른쪽에있는 빨간색, 둥근 버튼을 클릭하십시오.


답변

“스크립트 콘솔”로 중지 할 수없는 빌드가 발생했습니다. 마지막으로 다음 단계로 문제를 해결했습니다.

ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins


답변

첫 번째 제안 된 솔루션은 매우 가깝습니다. interrupt () 대신 stop ()을 사용하면 그루비 시스템 스크립트에서 끝없이 실행되는 런 어웨이 스레드도 죽입니다. 이것은 작업을 위해 실행되는 모든 빌드를 종료합니다. 코드는 다음과 같습니다.

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {
      println "Stopping $it.name"
      it.stop()
    }
}


답변

중지 할 수없는 파이프 라인 작업이있는 경우 다음을 시도하십시오.

  1. 빌드 진행률 표시 줄 옆에있는 빨간색 X를 클릭하여 작업을 중단하십시오.
  2. 빌드에서 “일시 중지 / 다시 시작”을 클릭하여 일시 중지
  3. “일시 정지 / 재개”를 다시 클릭하여 빌드를 다시 시작하십시오.

파이프 라인 작업 일시 중지 / 재개

Jenkins는 작업을 종료하고 빌드를 중지해야 함을 인식합니다.