특정 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.yml
Jenkins 인스턴스를 실행하는 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
'program tip' 카테고리의 다른 글
Spring Boot 다중 데이터 소스 (0) | 2020.12.02 |
---|---|
C ++는 동적 배열의 크기를 알려주지 않습니다. (0) | 2020.12.02 |
Django의 다중 테넌트 애플리케이션을위한 최적의 아키텍처 (0) | 2020.12.02 |
HTTP_CLIENT_IP와 HTTP_X_FORWARDED_FOR의 차이점은 무엇입니까? (0) | 2020.12.02 |
string.Format이 null 값을 처리하는 방법은 무엇입니까? (0) | 2020.12.02 |