program tip

특정 Jenkins 작업이 동시에 실행되는 것을 방지하는 방법은 무엇입니까?

radiobox 2020. 12. 2. 08:18
반응형

특정 Jenkins 작업이 동시에 실행되는 것을 방지하는 방법은 무엇입니까?


공유 리소스 (데이터베이스)를 사용하는 작업이 몇 개 있는데, 이로 인해 작업이 동시에 트리거되는 (드문) 이벤트에서 빌드가 실패 할 수 있습니다.

예를 들어 작업 A에서 E까지의 경우 A와 C 가 동시에 실행되지 않도록 지정하는 방법이 있습니까?

앞서 언급 한 리소스 외에 빌드는 서로 독립적입니다 (예 : 업스트림 / 다운 스트림 관계가 아님).

"brute-force"방식은 실행기 수를 하나로 제한하는 것이지만 대부분의 작업이 동시에 실행될 수 있고 빌드 서버에 컴퓨팅 리소스가 부족하지 않으면 이상적이지 않습니다.


현재이를 수행하는 두 가지 방법이 있습니다.

  • Throttle Concurrent Builds 플러그인을 사용합니다 .
  • 실행 프로그램이 하나만있는 슬레이브에서 실행되도록 해당 작업을 설정하십시오.

잠금 및 래치는 플러그인 여기에 도움이 될 것입니다.

이 질문은 Hudson에서 특정 범주의 작업 중 하나만 한 번에 실행되도록하려면 어떻게해야합니까?


그것은 오래된 질문이지만, 특히 Jenkins에서 애플리케이션 테스트를 실행할 때 주제는 여전히 관련이있을 수 있습니다.

잠금 자원 플러그인은 당신이 빌드에서 사용할 수있는 잠금 자원을 정의 할 수 있습니다. 빌드에 리소스가 필요한 경우 잠금이 적용됩니다. 두 번째 빌드에 동일한 리소스가 필요한 경우 (이미 잠겨 있음) 리소스가 사용 가능하도록 대기열에 추가됩니다.

문서에서는 잠금 가능한 리소스의 예로 컴퓨터 나 프린터를 사용하지만 위의 데이터베이스 예제도 작동합니다.

받는 반대에서 잠금 및 잠금 장치 플러그인 2012 년부터 답변에 언급,이 패키지는 현재 유지 될 것으로 보인다 (현재는 ~ 2016).


2012 년 11 월에 처음 공개 된 External Resource Dispatcher Jenkins 플러그인을 살펴보십시오 .이 (상대적으로) 새로운 플러그인은이 사용 사례를 정확히 다루는 것 같습니다.


주의 : 슬레이브 / 노드에 물리적 또는 가상 하드웨어가 필요하지 않습니다. 마스터 서버에서 실행되는 "슬레이브"를 설정할 수 있습니다.

Jenkins 관리> 노드 관리> 새 노드

그리고 각각 자신의 루트 디렉토리를 가진 "멍청한 노예"를 만드십시오.

몇 개의 슬레이브를 만들고 서버가 부팅 될 때 실행 한 다음 기본적으로 실행기 풀을 생성했습니다.

아마도 ...

db-귀하의 경우 단 하나의 집행자. 컴파일-하드웨어 또는 CPU 수에 따라 제한합니다. 스크립트-Jenkins가 잘하는 모든 작은 작업에 대해 많은 실행자가 있습니다.


오래된 질문, 그리고 이것이 귀하의 응용 프로그램에서 작동하는지 여부는 귀하의 응용 프로그램에 대한 세부 정보를 언급하지 않았기 때문에 확신 할 수 없습니다. 그러나 Rails 애플리케이션 테스트 스위트에서이를 처리하는 방식을 추가하고 싶었습니다.

애플리케이션의 데이터베이스 구성 ( database.yml)이 소스 저장소에 없습니다. 대신 /var/lib/configs/uniquing_database.ymlJenkins 인스턴스를 실행하는 VM에 있습니다.

빌드 프로세스의 단계 중 하나는이 구성 파일을 프로젝트 작업 영역에 복사하는 것입니다.

cp /var/lib/jenkins/configs/myapp_unique_database.yml config/database.yml

해당 구성은 해당 작업 및 특정 실행에 대해 고유 한 이름의 데이터베이스를 생성하기 위해 Jenkins가 환경에 노출 한 작업 공간 및 빌드 번호 정보를 고려합니다.

test:
  adapter: postgresql
  encoding: unicode
  host: 127.0.0.1
  port: 5432
  database: myapp_test<%= ENV['JOB_NAME'].split('/').last %><%= ENV['BUILD_NUMBER'] %>

나머지 빌드는 별개의 데이터베이스에서 실행되고 있다는 사실을 모르거나 신경 쓰지 않고 진행됩니다. 마지막으로 빌드가 끝나면 해당 데이터베이스를 삭제하여 파일 시스템을 오염시키는 많은 테스트 데이터베이스가 없도록합니다.

RAILS_ENV=test bundle exec rake db:drop

참고 URL : https://stackoverflow.com/questions/6276272/how-to-prevent-certain-jenkins-jobs-from-running-simultaneously

반응형