2011-10-21 4 views
6

문제 설명은 허드슨에 받는다는 저장소에 출시 된 유물 (비 스냅 샷 버전)의 덮어 쓰기를 방지하는 방법

는 케이스 받는다는은 허드슨에 사용되는 고려하십시오.

지금 누군가가 프로젝트의 체크 아웃을했다 일부 파일을 수정하지만, 실수로 같은 이슈 ID 및 버전 번호 (비 스냅 샷)을 사용했다.

그/그녀는 허드슨에이 프로젝트를 구축하고 받는다는 install.The 수정 이슈 허드슨 .m2에 지금했다. 그것 위에서 depent 한 다른 프로젝트는 수정 된 artifact로 빌드됩니다. 컴파일이 실패하지 않으면 아무도이를 알 수 없습니다. 올바른 아티팩트가 중앙 저장소에 있더라도 허드슨이 빌드를 시작할 때 .m2에서 수정 된 패치가 선택되기 때문에 절대 사용되지 않습니다.

그래서이 우발적 인 사람의 실수를 막을 수있는 방법을 찾고 있습니다.

  1. 어쨌든 hudson의 비 스냅 샷 버전 (출시 된 아티팩트)에서 maven install의 권한을 취소 할 수 있습니까?
  2. hudson의 .m2 체크섬과 원격 중앙 저장소의 체크섬을 비교하는 방법으로 체크섬 오류로 인해 경고가 생성되거나 빌드가 실패 할 수 있습니다.

나는 중앙 저장소에서 비 스냅 샷 버전을 강제로 변경할 수 없다는 것을 이미 확인했다.

중앙 저장소를 퍼지 또는 & 디스크 공간 사용량 각각 증가 빌드 시간에 발생합니다 허드슨의 각 작업에 대한 별도의 저장소를 사용.

도움을 주시면 감사하겠습니다.

답변

1

이 문제를 직접 해결할 방법은 없었지만 5 분마다 실행되는 cron-job을 작성하여 모든 문제를 해결했습니다. 항아리는 Hundson의 로컬 저장소에서 읽기 전용으로 비 스냅 샷입니다. 이런 식으로 허드슨의 일부 프로젝트가 내 mvn 설치 또는 mvn 배치를 덮어 쓰려고하면 읽기 전용이므로 아티팩트가 지나치게 많아지지 않습니다.

재판매 할 새 이슈를 쉽게 작성할 수 있습니다. 다음 5 분 안에 작성된 스크립트는 읽기 전용으로 표시합니다. 여기

유닉스 스크립트 코드가

#!/bin/bash 
cd ~/.m2 
date 2>&1>> permission-handler.out 
find . -name '*jar' -type f | grep -v 'SNAPSHOT' | xargs chmod -vc 444 2>&1>> permission-handler.out 
chmod 777 permission-handler.out 

로깅도에만 출시로 모든 이슈가 표시되어있는 볼 처리 permission-handler.sh입니다.

1

나는 당신이이 이슈를 덮어 쓰지 설치 막을 수있는 방법을 찾을 거라고 생각하지 않습니다. 리포지토리 서버에는 업데이트 된 릴리스 아티팩트를 배포하지 못하도록하는 설정이 있어야합니다. 예를 들어 Nexus의 경우 "How do I disable artifact redeployment"을 참조하십시오. 우리는 SNAPSHOT 버전에서 작동

: 우리는 우리의 프로젝트에 버전을 관리하는 방법은 다음과

+1

이미 artifactory에서 배포 권한을 처리했습니다. 하지만 그것은 도움이되지 않습니다. 덮어 쓴 이슈가 .m2 저장소에 있고 종속 프로젝트가 hudson에 빌드 된 경우 maven은 항상 저장소 서버 대신 .m2에서 아티팩트를 선택하기 때문입니다. hudson에서 강제로 유물을 다운로드하거나 날씨 .m2 이슈가 저장소 서버와 동기화되는지 확인할 방법이 없습니다. – Aman

1

이다. 젠킨스에, 우리는 빌드 및이 응용 프로그램을 테스트하지만, 버전이 하지SNAPSHOT 경우 실패 빠른 빌드 작업을해야합니다. 이것은 custom enforcer (이것은 require release version enforcer의 반대입니다)에 의해 이루어집니다.

우리가 릴리스하고 싶을 때, 우리는 젠킨스 작업을 사용합니다. parameterized buildMaven release plugin, 릴리스 (안정 버전), 다음 SNAPSHOT 버전의 버전뿐만 아니라 SCM 태그의 이름을 표시 만합니다 출시 일을 담당하는 사람을 사용. 따라서 Jenkins 만 안정 버전을 정의하게되며 개발자는 항상 SNAPSHOT 코드로 작업하게됩니다.

물론 개발자가 자신의 로컬 컴퓨터에서 원하는 것을 만들 수는 없습니다. 그러나 우리는 항상 신뢰할 수있는 장소 인 젠킨스 서버를 고려합니다.내 컴퓨터에서 작동 함은 문제에 대한 절대로 좋은 답변이 아닙니다. o)

0

Maven 저장소 (예 : Nexus, Artifactory)가 릴리스 repos를 덮어 쓰지 못하도록 설정하면이 문제를 해결할 수 있습니다. Nexus에는 SNAPSHOT에 대한 리포와 릴리스 용 리포가 있습니다. SNAPSHOT 저장소는 덮어 쓰기를 허용합니다. 그러나 릴리스 레포는 덮어 쓰기를 허용하지 않습니다. 이것은 해당 Repo에 대한 Nexus의 간단한 체크 박스 기능입니다. 일단 릴리스 버전이 저장소에 저장되면 덮어 쓸 수 없습니다. 잘 작동합니다.