태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

VS 2010 ALM/TFS 20102011.08.02 16:52

최근에 TFS 팀 빌드를 하다가 다음과 같은 오류가 나타났었다.


c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1835,9): error MSB4018: "GenerateResource" 작업에서 예기치 않은 오류가 발생했습니다.
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1835,9): error MSB4018: System.Runtime.InteropServices.ExternalException (0x80004005): GDI+에서 일반 오류가 발생했습니다.
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1835,9): error MSB4018:    위치: System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1835,9): error MSB4018:    위치: System.Drawing.Image.Save(MemoryStream stream)

<이하 생략>


그 동안 TFS 빌드를 많이 사용해 봤지만, 이런 오류 메시지를 본 것은 처음이었다.

이상한 것은 Visual Studio에서 빌드를 하면 정상적으로 빌드가 되는데, TFS 빌드를 하면 위와 같은 오류가 나타난다는 것이었다.


여느때처럼 Visual Studio Team System 포럼과 구글을 뒤지기 시작했다.

관련 글이 많지는 않았지만, 그래도 가장 근접한 질문과 답변이 있는 글을 찾았다.

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/00092964-946f-42f1-b4d4-2afeab13f9e3/


위의 글을 보면 알겠지만, 질문을 올린 것은 2006년 6월 20일인데 그 이후로 2010년 3월 5일까지 댓글들이 달렸다. ㅡㅡ;;

어찌보면, 위와 같은 오류의 원인이 오랜 시간 동안 완전히 해결되지 않고 있다는 반증인 것 같다.

아니면, 오류가 발생하는 원인이 다양하던가...


어쨌든, 여기서 제시하는 몇 가지 방법을 시도해 보았다.

하지만, 소용이 없었다.


그래서, 원점에서부터 생각을 다시 해 보았다.

Visual Studio를 사용할 때와 TFS 빌드를 사용할 때의 차이점이 무엇일까?


동일한 컴퓨터에서 빌드를 했기 때문에 빌드 환경에는 차이가 없음이 분명했다.


유일한 차이점이라면, 빌드를 하는 계정이 다르다는 것이었다!

Visual Studio에서는 내가 로그인한 계정으로 빌드를 하지만, TFS 빌드는 빌드 서비스 계정이 빌드를 하는 것이다.


그래서, 사용자 계정에 대한 권한의 문제로 생각하고,  TFS 빌드 서비스 계정에 대한 권한을 다양하게 변경해 보았다.

그러나, 이것도 소용없었다.



혹시나 하는 마음에 cache 정보를 삭제하기로 했다.

각 사용자 별 cache 정보는 다음 위치에 있다.

C:\Users\<사용자ID>\AppData\Local\Microsoft\Team Foundation\3.0\Cache

* C:\Users\<사용자ID>\AppData 폴더가 안 보인다면, Windows 탐색기의 폴더 옵션에서 숨김 폴더에 대한 설정을 변경해야 한다.


Windows 탐색기에서 이 폴더로 이동한 다음 Cache 폴더 밑에 있는 모든 폴더 및 파일을 선택하고 삭제를 했다.

그런데, 특정 폴더 하나가 삭제가 안 되면서 다른 프로세스에서 사용 중이라 삭제가 안 된다는 메시지가 나타났다.


순간, 어떠한 이유에서인지는 몰라도 어떤 프로세스가 이 cache 폴더에 lock을 걸고 있어서 그럴 것이라고 생각을 했고, 그 어떤 프로세스는 분명 빌드 프로세스일 거라는 확신이 들었다.

그래서, 빌드 프로세스를 중지했다가 다시 시작하기로 했다.


빌드 프로세스를 다시 시작하려면 관리 도구의 서비스에서 빌드 관련 서비스를 다시 시작해도 되고, Team Foundation 관리 콘솔에서 빌드 서비스를 다시 시작해도 된다.


Team Foundation 관리 콘솔에서 빌드 서비스를 다시 시작하기로 했다.


  1. 시작->모든 프로그램->Microsoft Team Foundation Server 2010->Team Foundation 관리 콘솔 클릭
  2. Team Foundation 관리 콘솔 화면의 왼쪽 패널에서 빌드 구성 클릭
  3. 빌드 구성 화면에서 빌드 서비스의 다시 시작 클릭
  4. 빌드 컨트롤러 및 빌드 에이전트가 준비 상태인지 확인


빌드 서비스를 다시 시작한 후, 다시 cache 폴더로 가서 아까 삭제되지 않았던 폴더를 다시 삭제해 보았다.

이번에는 삭제가 잘 됐다. 역시, 빌드 프로세스가 그 폴더에 lock을 걸고 있었던 거다.

근데, 왜 그랬지??? 그 원인은 알 수가 없었다. 쩝~~~ (뭔가 찝찝해... ㅡㅡ)


폴더를 삭제한 후, TFS 빌드를 다시 수행했다. 아무 문제없이 TFS 빌드가 성공되었다.

휴~~~


여러분들 중 만약 TFS 빌드를 하다가 저와 같은 오류가 발생하거든 먼저

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/00092964-946f-42f1-b4d4-2afeab13f9e3/

에 있는 해결 방법들을 따라해 보시고, 그래도 안 될 경우 cache 폴더 밑에 있는 모든 폴더 및 파일을 삭제해 보길 바란다.


소 뒷걸음질치다가 쥐 밟는 격이지만... 그래도 누가 아는가? 저처럼 문제가 해결될지... ㅋㅋㅋ... ㅡㅡ;;;


감사합니다.

webmars.

신고
Posted by webmars
VS 2010 ALM/TFS 20102011.07.21 18:32

최근에 한 사이트에서 TFS 환경을 구축하는데, TFS와 Build Service를 별도의 서버에 설치해야 하고, 기본적으로 방화벽이 모든 포트를 막고 있었기 때문에 필요한 포트를 신청해서 열어야 하는 상황이었다.


이런 상황에서 TFS 환경을 구축하다보니, '아, 포트 설정이 쉬운게 아니구나!'라는 걸 절실히 깨달았다.


다음은 그 사이트에서 TFS 환경을 구축하면서 설정했던 포트 중 Build Service에 대한 것만 간략하게 정리한 것이다.


================================================================================================

기본적으로 TFS Build Service는 9191 포트를 사용한다.

따라서, TFS의 빌드 자동화 기능을 사용하기 위해서는 방화벽에서 9191 포트에 대한 연결을 허용해야 한다.


TFS와 Build Service를 별도의 서버에 설치할 수도 있다.

만약, 두 서버 사이에 방화벽이 있다면 방화벽 설정에 유의해야 한다.


첫 번째로 Build Service 서버에서 TFS 서버로 8080 포트로 연결할 수 있도록 방화벽을 설정해야 한다.

이는 TFS Web Service를 사용하기 위한 것이다.


그리고, 두 번째로 TFS 서버에서 Build Service 서버로 9191 포트로 연결할 수 있도록 방화벽을 설정해야 한다.

만약, 이 포트가 열려있지 않으면 Build Service를 구성할 때 끝점(endpoint)에 연결할 수 없다는 오류 메시지가 나타날 것이다.


===================================================================================================

감사합니다.

webmars.
신고
Posted by webmars