2013-09-23 8 views
1

나는 오래된 빌드 프로세스를 업데이트하는 회사로 임명되었습니다. 그것은 일괄 및 펄 스크립트로 모두 수행됩니다. 현재 빌드 프로세스는 다음과 같습니다.TFS 빌드 및 로컬 빌드

  1. 웹 인터페이스를 통해 빌드를 예약하십시오.
  2. 빌드 서버는 빌드 프로세스를 큐에서 제거합니다.
  3. 빌드 서버는 TFS 소스 컨트롤에서 모든 파일을 체크 아웃합니다.
  4. 빌드 서버는 빌드하기 전에 소스를 수정하는 몇 가지 코드 삽입 스크립트를 실행합니다.
  5. 빌드 서버 업데이트 버전 및 코드에 서명하십시오.
  6. 빌드 서버는 Visual Studio를 사용하여 프로젝트를 컴파일합니다.
  7. 완료되면 빌드 서버가 출력을 압축하여 네트워크 공유 위치에 놓습니다.

정말 어려운 부분은 코드 삽입 스크립트입니다. 그들은 많은 코드를 수정하는 3 개의 펄 스크립트입니다. 그들은 또한 그들이 설계된 방식에 매우 기계 의존적입니다. (그래서 많은 수정을하지 않고 빌드 프로세스에 넣을 수는 없습니다.)

내 목표는 로컬 개발 컴퓨터에서 빌드 프로세스를 실행할 수 있고 TFS 서버에서 CI를 실행하는 것입니다.

내 검색에서 로컬 컴퓨터에서 TFS 빌드를 에뮬레이트 할 수있는 방법이없는 것처럼 보입니다. 내 cs.proj 파일에서 사전/사후 빌드 명령 줄 스크립트를 사용하는 유일한 방법은 무엇입니까? 또는 로컬 컴퓨터에서 복잡한 빌드를 수행하고 TFS에서 동일한 빌드를 실행하는 더 좋은 방법이 있습니까?

나는 Using TFS build definitions on a local machine을 보았지만, 그것은 나에게 약간 해독 된 것처럼 보입니다. 더 좋은 방법이 없다면 그것은 끔찍한 해결책이 아닐 것이라고 생각합니다.

답변

2

저는 과거에 비슷한 일을 시도했습니다. 불행히도, TFS Build Workflow에 필요한 모든 것이 있기 때문에 갈 길이 멀지 않습니다. 내가 찾은 것은 기본적으로 두 가지 방법이 있다는 것입니다.

  1. 는 서버 및
  2. 지역 모두에서 실행됩니다 MSBuild에서 스크립트를 만듭니다 서버에 대한 로컬 및 사용자 활동에 대한 MSBuild에서 스크립트를 작성합니다.

개발자 머신과 빌드 서버 모두에서 빌드를 정확하게 재현 할 수 있도록하려는 경우 # 1을 선택합니다. 그렇지 않으면 # 2와 함께 갈 것입니다. 두 번째 옵션은 TFS 워크 플로우 내에서 주요 빌드 작업을 수행 할 수 있기 때문에 유용합니다. 필요한 많은 개체를 제공 할뿐만 아니라 변경하려는 파일을 체크 인/체크 아웃 할 필요없이 설정을 구성 할 수있는 좋은 장소를 제공하기 때문입니다 빌드가 어떻게 발생하는지.

두 방법 중 하나를 선택하는 경우 시스템간에 수행해야하는 사용자 지정을 고려하여 매개 변수를 사용하도록 Perl 스크립트를 수정해야 할 가능성이 큽니다. 그런 다음 사용자가 로컬 빌드를 위해 MSBuild 스크립트에서이 값을 전달하거나 기본값으로 설정하고 TFS 빌드 워크 플로에서 매개 변수로 설정하도록 할 수 있습니다. 따라서 필요한 경우 쉽게 수정할 수 있습니다. 그러나 방법에 관계없이이를 수행하는 유일한 좋은 방법은 개발자 컴퓨터 및 빌드 서버에서 설정해야 할 사항을 표준화하여 사용자 지정을 많이 제공 할 필요가 없도록하는 것입니다.

첫 번째 옵션을 선택한 경우 MSBuild 스크립트를 모든 용도로 지원하는 TFS 빌드의 레거시 빌드 구성을 사용할 수 있습니다. 그러면 개발자와 빌드 서버간에 스크립트를 공유 할 수 있지만 실수로 변경 한 경우 이 스크립트는 빌드를 위반할 위험이 있습니다.

+0

답변 해 주셔서 감사합니다. 내 게임 계획은 앞으로 1과 2의 혼합이 될 것이라고 생각합니다. 응용 프로그램의 기본 빌드에 필요한 공통 MSBuild 스크립트 집합을 만듭니다. 이러한 공통 스크립트는 서버와 로컬 모두에서 실행됩니다. 이를 통해 개발자는 로컬 컴퓨터에서 응용 프로그램을 빌드하고 디버깅 할 수 있습니다. 그러면 릴리스 유형 작업을 위해 서버에서만 실행되는 사용자 지정 활동이 생깁니다. (버전 업데이트 및 코드 서명 등) 이들은 MSBuild 스크립트와 함께 실행됩니다. –