특정 Jenkins 작업에 대해 'killSoftly'를 설정하는 방법은 무엇입니까?


11

내 Jenkins 빌드는 빌드 단계와 빌드 후 단계 사이에 중단됩니다.

콘솔 출력에 6 분 대기가 표시됩니다 (그러나 최대 1 시간 대기를 보았습니다).

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

나는 발견 유사한 문제를 가지고 질문에, 그들은 솔루션을 설정하는 것입니다 말 -DSoftKillWaitSeconds=0jenkins.xml.

그러나 전역 Jenkins 설정을 엉망으로 만들지 않고 특정 작업에만 옵션을 설정하는 방법이 필요합니다 (다른 프로젝트를 엉망으로 만들고 싶지 않습니다).

편집하다:

작업을 수동으로 중단하면 [CucumberReport] 단계 전에 Cucumber 보고서가 여전히 생성됩니다.

또한 Time-out 전략을 (Timeout seconds = 2)로 설정하고 Build Environment 옵션에서 빌드가 중단 된 경우 빌드 중단 확인란을 확인했습니다No Activity .

이 설정으로 프로젝트를 빌드하면 빌드 히스토리에 "Aborted after 0 seconds"가 표시되면서 빌드가 실패하지만 콘솔 출력은 동일합니다. (변경 사항이 없으면 일정 시간이 지나면 Cucumber Reports가 생성됩니다).


매개 변수로 무엇을 달성하고 싶습니까? 아마도 더 쉬운 해결책이있을 것입니다.
Michael Kemmerzell

빌드 단계 후 대기 시간을 줄이고 싶습니다. 콘솔 출력에서 ​​볼 수 있듯이 빌드 단계와 빌드 후 단계 사이에 6 분의 대기 시간이 있습니다.
Mate Mrše

파이프 라인의 일부를 제공 할 수 있습니까? 젠킨스가 단순히 붙어있는 것 같습니다. 여기서 무언가가 발생해야합니다.
Michael Kemmerzell

파이프 라인의 어떤 부분이 관심을 가질 지 더 구체적으로 설명하여 실제 코드를 공유 할 수 없기 때문에 일부를 편집하고 공유 할 수 있습니까?
Mate Mrše

timeout파이프에서 옵션을 설정할 수 없습니까 ? 파이프의 단순화 된 버전을 게시해야합니다. 무엇이 잘못되었는지 "추측"하기가 어렵습니다. 또한이 질문은 devops.stackexchange.com
tftd

답변:


4

에 대한 작업 - 특정 값을 선택하는 것은 불가능SoftKillWaitSeconds (값이 젠킨스의 핵심으로부터 유도되는 작업 이름이 알려지지 않음).

내 권장 사항은 작업 자체에서 중단 처리수정하는 것이므로 "소프트 킬 시간 초과"에 의존하지 않습니다. Unix-ish 시스템에서 실행중인 경우 새 프로세스 그룹에서 작업을 실행 set -m하고 (예 : bash) 적절한 종료 트랩을 설정하여이를 확인할 수 있습니다.


Jenkins를 처음 사용하기 때문에 "새 프로세스 그룹 (bash에서 -m으로 설정)에서 작업 실행 및 적절한 종료 트랩 설정"을 확장 할 수 있습니까?
메이트 Mrše

이것은 Jenkins per-se와 관련이 없습니다. 작업에 "쉘 실행"빌드 단계가 포함 된 경우 (또는 변경 가능한 경우)이 방법을 사용할 수 있습니다. 그런 다음 "set -m"을 사용하여 새 프로세스 그룹을 작성하고 여기 에 표시된 것과 같은 트랩을 사용 하여 그룹의 모든 프로세스가 강제 종료되도록 하십시오 .
Alex O

3

우리는 Build-timeout 플러그인을 사용하여 타임 아웃 전략을 No Activity또는로 설정하여 걸린 작업을 종료 Absolute합니다. 나에게 이것은 자유형 프로젝트를 사용할 때 좋은 접근 방법입니다. 빌드가 "0 초 후에 중단 된"이유는 완료되지 않은 하위 프로세스가 있기 때문입니다. 에서 문서 :

Java는 빌드가 정지되는 방식에 따라 고정 된 위치 세트에서만 스레드가 인터럽트되도록 허용하므로 중단 작업이 적용되지 않을 수 있습니다. 예를 들어

  • Jenkins가 하위 프로세스가 완료되기를 기다리는 경우 즉시 중단 될 수 있습니다.
  • Jenkins가 무한 루프에 빠지면 중단 될 수 없습니다.
  • Jenkins가 Java VM 내에서 네트워크 또는 파일 I / O를 수행하는 경우 (예 : 긴 파일 복사 또는 SVN 업데이트) 중단 할 수 없습니다.

절대 시간 초과 전략을 시도 할 수 있습니다. 작업에서 시간 종료 값을 반복하지 않도록 전역 변수를 정의 할 수 있습니다.

  1. "Jenkins 관리"> "시스템 구성"으로 이동하십시오.
  2. "글로벌 특성"에서 "환경 변수"를 확인하십시오.
  3. 환경 변수 name = "GLOBAL_TIMEOUT_MINUTES"value = "20"을 추가하십시오.
  4. 프로젝트의 구성 페이지로 이동하십시오.
  5. "빌드 환경"에서 "빌드가 중단 된 경우 중단"을 확인하십시오.
  6. "타임 아웃 전략"에 대해 "절대"를 선택하십시오. 물론 다른 전략에도 적용 할 수 있습니다.
  7. "Timeout"에 "$ {GLOBAL_TIMEOUT_MINUTES}"를 설정하십시오.
  8. 시간 종료 조치를 "빌드 중단"으로 설정하십시오.

이것이 작동하지 않으면 https : // your-jenkins-server / log 로그 또는 스레드 덤프를 찾아보십시오.
플러그인은 새 / 이전 버전의 플러그인으로 인해 발생할 수 있습니다. 완료되지 않은 자식 프로세스가 무엇인지 찾아보십시오. 빌드 후 조치를 하나씩 비활성화하여 문제의 원인이 될 수있는 조치를 찾으십시오. /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs 를 볼 수 있습니다


그러나 유용한 정보로 찬성했지만 내 문제는 해결되지 않습니다. 이미 빌드 타임 아웃 플러그인을 시도했지만 성공하지 못했습니다.
Mate Mrše
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.