2011-10-18 5 views
3

described here과 같은 종류의 오류가 발생합니다. TFS Build의 파일 이름 제한에 대해 실행 중입니다. 이 질문에 대한 대답은 빌드 에이전트 작업 디렉토리를 다시 정의하는 것이 좋습니다. 내가해야하는지 잘 모르겠다. 나는 몇 가지 질문 ... TFS 빌드 에이전트 작업 디렉터리 변경

  1. 빌드 에이전트 작업 디렉토리가 나에게 영향을 변경 하는가, 또는 모두가 빌드 에이전트를 사용하는가?

  2. 빌드 에이전트는 저에 의해 실행되지 않으며, 우리 회사의 다른 부서에서 관리하는 다른 컴퓨터에 있습니다. 나는 "빌드 컨트롤러 관리"설정에 갈 수 있으며, 나는이 변경을 할 수있는 것처럼 보입니다. 나는 두려워합니다!

+1

허가를받는 것보다 용서를받는 것이 더 쉽다는 것을 기억하십시오. – bzlm

답변

4

해당 빌드 에이전트를 사용하는 모든 빌드 작업에서 사용되므로 여러 사람에게 영향을 미칠 수 있습니다. 경로 제한에 부딪치게되면 작업 디렉토리를 확실히 변경해야합니다. 당신이 진행하기 전에 부서의 다른 사람들과 함께 정리를하고, 모든 사람들이 무엇을해야 할지를 확실히 알고 있는지 확인해야합니다.

+0

작업 디렉토리를 변경하면서이 문제를 해결할 수 있습니까? 내 TFS 서버에 100 가지 프로젝트가 있습니다.이 문제가 처음으로 발생한 것으로 믿기가 어렵습니다. 아무도이 문제를 안고있는 것 같습니다. – Didaxis

+2

다른 경로를 사용하는 빌드 에이전트를 새로 만든 다음 빌드를이 경로에 할당하는 것이 어떻습니까? 그렇게하면 다른 사람의 빌드에 영향을주지 않습니다. –

+0

새로운 빌드 에이전트를 만들 권한이없는 것 같습니다 ... – Didaxis

2

전체 이름은 Windows 260 자의 MAX_PATH를 초과 할 수 없습니다. 실제로 다양한 도구에 사용되는 값이 다릅니다.

GAC e.g. does reject 파일 이름이 256자를 초과합니다. 파일 이름에는 경로와 파일 이름 자체가 의미됩니다. TFS는 Windows를 기반으로하므로 TFS 빌드에도 동일한 제한 사항이 있습니다. 가능한 유일한 해결책은 실행할 작업의 디렉토리를 가능한 한 짧게 제한하는 작업 공간 디렉토리를 사용하는 것입니다. 작업 공간 디렉토리를 더 짧게 만들도록 시도 할 수는 있지만 근본적인 파일 시스템 제한은 사라지지 않을 것입니다.

예 Microsoft는이 문제를 해결해야하지만 실제로는 실현 가능성이 희박합니다. 빌드하는 동안 사용되는 도구 (MS 및 비 MS)는 동일한 제한 사항으로 실행됩니다. 기껏해야 파일 이름이 너무 길 때 도구가 중단됩니다. 최악의 경우에는주의하지 않고 손상된 바이너리를 얻습니다. C/C++로 작성된 모든 응용 프로그램은 파일 이름 버퍼에 MAX_PATH + 1 크기의 버퍼를 사용합니다. Windows에서 이러한 파일 이름을 허용하더라도 (그러나 방법이 있지만 ...) 거의 모든 응용 프로그램의 버퍼가 사용하기에는 너무 작습니다.

당신은 우리 모두가 고독하지 않습니다. 밝은면에서이 제한은 nitpick 설계자가 목표 이름만으로 MAX_PATH를 초과하는 이름 지정 규칙을 적용하는 것을 방지합니다.

5

빌드 에이전트에서 빌드 디렉토리를 변경하고 팀 탐색기에서 "빌드"폴더를 마우스 오른쪽 단추로 클릭하고 빌드 에이전트 관리를 선택하면 몇 가지 옵션이 있습니다. 빌드 서버를 선택하고 빌드 폴더를 "e : \ b"(또는 그 드라이브를 모두 사용하는 경우 "e : \")로 변경하십시오. 그러면 해당 빌드 서버의 빌드 작업 디렉토리가 변경됩니다. 그러면 작업 디렉토리에서 몇자를 줄일 수 있습니다.

이 외에도 가능한 한 트리 아래로 빌드에서 사용되는 작업 영역을 매핑 할 수 있습니다. 이것은 TFS가 작업 공간을 사용하여 빌드에 사용할 코드를 결정할 때 경로의 문자가 부족하지 않은 경우에도 수행하는 것이 좋습니다.

작업 공간이 $/TeamProject = $ (SourceDir)에 매핑 된 경우 TFS는 빌드를 위해 팀 프로젝트의 모든 코드를 가져옵니다.작업 공간이 $/TeamProject 당신이 할 때 모든 TFS에서 모든 것을 얻고 될거야에 매핑되는 경우에만 1 솔루션 지점 1에서 원하는 경우에도

`$/TeamProject/DevBranch/Docs 
         /Source/Solutions/Solution1 
             /Solution2 
             /etc... 
         /More Stuff 
       /MainBranch/[Same As Dev] 
       /HotFixBranch/[Same As Dev] 
       /ReleaseBranch/[Same As Dev]` 

처럼 설정 팀 프로젝트를 고려 당신은 정말로 dev 브랜치의 "solution2"폴더에있는 코드를 원한다. 매핑을 $/TeamProject/Devbranch/Source/Solutions/Solution2으로 변경하면 경로 길이의 약 60자를 면도했습니다. 이 외에도 필요한 코드 만 얻을 수 있기 때문에 빌드 속도를 높일 수 있습니다.

+1

+1 : 지금까지 가장 쉬운 해결책은 빌드 서버의 로컬 작업 공간이 전형적인 c : \ documents ... garbage가 아닌 짧은 디렉토리를 목표로하고 있는지 확인하는 것입니다. – NotMe

+0

+1 아주 좋은 조언. 불행히도, 우리 회사 정책은 TFS에있는 것을 "미러링"합니다. 어리석은, 그렇습니다.하지만 제가 현재 할 수있는 것은 없습니다. 그러나 나는이 제안을 경영진에게 전할 것이다. – Didaxis

+0

어리석은 회사 정책, 나는 너의 고통을 느낀다. 빌드를 완료하는 데 너무 오래 걸리며 개발자가 빌드를 기다리는 데 시간을 낭비하고 있다는 불평으로 시작합니다. 물론 누가 빌드 서버의 구조인지 알 수 있습니까? –

관련 문제