우리 팀에는 로컬로 호스팅되는 yum 저장소가 있습니다. 빌드 프로세스가 끝나면 Jenkins는 다음을 수행합니다.
- 새 RPM 생성
- 새 RPM을 yum 서버의 rpm이 포함된 디렉터리로 이동합니다.
- yum 저장소에서 createrepo를 실행하세요.
위 단계 중 하나를 수행하는 동안 누군가 yum update
달리고 있으면 어떻게 됩니까? 뿐만 아니라:
- createrepo가 저장소를 업데이트하는 동안 yum update를 실행하면 어떻게 되나요?
- 이전 버전의 RPM에서 yum update를 실행했지만 createrepo가 새 RPM 버전을 제거하고 추가하면 어떻게 되나요?
도움을 주시면 감사하겠습니다. 감사해요!
답변1
아니요, 경쟁 조건이 아니라 일관성 없는 데이터로 인한 클라이언트 오류입니다.
저장소에는 그 안에 포함된 프로젝트/패키지 목록이 포함된 파일이 있습니다. 이 파일은 저장소 생성/업데이트가 끝나면 생성/업데이트됩니다.
클라이언트가 저장소를 열고 쓰는 동안 콘텐츠 파일을 읽으면 yum
오류와 함께 종료됩니다.
파일이 작성되지 않았지만 저장소 내용을 변경하는 경우 데이터가 일관되지 않을 수 있습니다. yum
콘텐츠 파일의 파일 참조를 읽을 수 없기 때문에 클라이언트가 종료됩니다.
문제를 최소화하려면 저장소 복사본에서 작업할 수 있습니다(크기에 따라 다름).
# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd ..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo
이렇게 하면 변환 시간이 짧아지지만 클라이언트측 오류를 완전히 방지할 수는 없습니다.