2010-02-02 4 views
1

오랜 시간 lurker가 된 저는 CruiseControl.NET, Subversion 및 원격 저장소와 관련하여 까다로운 질문을 던지고 있습니다.CruiseControl.NET Service/Subversion - 원격 저장소에 연결할 수 없습니다.

Windows Server 2008 SP2에서 실행되는 원격 Subversion 1.6.6 리포지토리를 가져 와서 Apache 2.2.14를 게이트웨이로 사용하여 포트 80 및 443에 대한 액세스를 활성화합니다. 암호화되지 않은 트래픽을 보안 포트로 리디렉션합니다. 자체 서명 된 인증서로 실행되는 SSL 레이어가 올바르게 구성되어 있습니다. 이 모든 것은 작동합니다 - 로컬 컴퓨터 (XP SP2 또는 Server 2008 SP2)에서이 저장소로 브라우저를 가리키고 인증서 확인을 손쉽게 통과하며 저장소 ACL에 대해 인증하고 거기에있는 내용을 볼 수 있습니다. 똑같이, 내 로컬 컴퓨터 (명령 줄이나 TortoiseSVN을 통해)에서 실행되는 SVN 명령도 완벽하게 작동합니다.

CruiseControl.NET 1.4.4.83 - 로컬 컴퓨터에서 잠시 실행하여 간단한 스크립트로 소스 코드를 원격 저장소에서 가져 와서 매우 기본적인 응용 프로그램을 빌드하십시오. 이 스크립트는 로컬 저장소와 완벽하게 작동하므로 유일한 차이점은 원격 서버를 가리키는 Subversion URL입니다.

내 계정의 명령 줄 셸 (ccnet.exe)에서 CC.NET을 실행하면 작동합니다.

그러나 CC.NET을 서비스 (ccservice.exe)로 실행하면 실패합니다. 기본적으로 LOCALSERVICE로 실행되지만 내 자격 증명으로 실행되도록 이미 변경되었습니다. 이 모드에서는 서버에 연결할 수 없다는 불만을 토로하여 발행 된 SVN LOG (Subversion 명령) 명령이 실패합니다.

저는 이것을 조사하는데 4 ~ 5 일을 보냈습니다. CC.NET 문제가 명령 행 셸에서 작동한다는 것과 똑같은 명령이 TortoiseSVN과 브라우저를 통해 원격 서버에 연결할 수 있기 때문에 방화벽 유형 문제는 아닙니다. 이미 인증서를 가져 왔으므로 SSL 및/또는 인증서가 아닙니다. 다시 말하지만 TortoiseSVN, 브라우저 또는 명령 줄에서 SVN 명령을 사용하여 '수동'모드에서 제대로 작동합니다. 원격 서버의 실제 IP 주소를 지정할 수 있기 때문에 DNS 확인 문제가 아니며 연결에 실패합니다. 물론 명령 줄 모드에서 실행하면 정상적으로 연결됩니다 ...

심지어 다운로드도했습니다. 이상한 일이 일어나지 않는지 CC.NET 소스 코드를 통해 알게되었습니다. 볼 수있는 한, 서비스 모드에서 실행할 때 명령을 실행하는 것과 관련된 유일한 차이점은 Subversion 명령 프로세스가 생성 될 때 래치 할 콘솔을 준비하기 위해 AllocConsole 호출이 수행되었다는 것입니다.

이 단계에서 알 수있는 가장 좋은 추측은 AllocConsole 세션이 표준 명령 행 세션과 근본적으로 다르다는 것입니다. 서비스가 내 사용자 자격 증명 하에서 실행되고 있지만 어떻게 든 AllocConsole에는 '적절한'네트워크 액세스. 그러나, 나는 이것을 증명할 수있는 AllocConsole이나 CC.NET 소스 코드에 대해 충분히 알지 못하며, 따라서 나는 한계에 처해있다.

현재로서는 CC.NET을 명령 줄 모드로 실행 중입니다. 그러나 우리는 서비스 모드 (로컬 도메인의 리포지토리에 대해 잘 작동하는)에서 서비스 모드를 실행하기를 선호하기 때문에 만족스럽지 않습니다. 시스템 시작시 예약 된 작업을 시작할 필요가 없습니다.

누구든지 의견이 있습니까?

답변

1

금이갔습니다. 방화벽 문제가 아니라 프록시 문제였습니다.

여기에 Bluecoat (예, 알겠습니다. 내 전화는 아님)을 사용합니다. 따라서 C : \ Documents and Settings \ All Users \ Application Data \ Subversion \에있는 Subversion '서버'파일은 개발자 PC에는 특정 외부 저장소로 나가기 위해 프록시를 우회 할 수있는 항목이 있습니다. 그러나 TortoiseSVN을 주로 사용하는 경향이 있으며 속성 시트를 통해이 파일에 액세스합니다. 지금까지는 TortoiseSVN 파일이 아닌 Subversion 파일이라는 사실을 알지 못합니다.

당연히 우리는 빌드 서버에서 TortoiseSVN을 사용하지 않기 때문에 결코 '서버'파일을 망칠 필요가 없습니다. 그러나 CruiseControl.NET이 외부 저장소 (이전에는 내부 리포지토리와 만 대화했을 때)에 도달해야하므로 Bluecoat로드 블록을 지나칠 수 없었습니다.

일단 퍼즐을 클릭하면 빌드 상자에 '서버'파일이 만들어지고 우회 설정이 추가되고 갑자기 CruiseControl.NET과 서비스 모드의 Subversion에서 원격 저장소를 볼 수 있습니다.

커맨드 라인 모드에서는 작동하지만 서비스 모드에서는 작동하지 않는 이유는 아직 확실치 않지만 해결되었으므로 기쁘게 생각합니다. :)

관련 문제