다음을 통해 공유


Team Foundation Server용 크로스 플랫폼 명령줄 클라이언트의 스크립팅

소스 코드 체크 인 및 체크 아웃 같은 작업을 자동화하시겠습니까? 외부 또는 내부 자동화를 사용하여 작업을 수행할 수 있습니다. 먼저 이러한 두 가지 자동화 모드에 대해 검토해 보겠습니다. 또는 pros and cons로 직접 건너뛸 수 있습니다.

외부 자동화

외부 자동화는 완벽하게 맞는 인수를 가진 tf 명령줄 도구를 반복적으로 호출할 때마다 다른 프로세스를 구성합니다. 이 모드를 사용하기 위해 특수 구문을 사용할 필요가 없습니다. 다음 외부 프로세스 중 하나를 사용하여 이 메서드를 구현할 수 있습니다.

  • sh, ksh, bash 또는 csh 같은 Unix 셸

  • Perl 또는 스크립트를 사용하는 다른 프로그래밍 언어

  • Apache Ant 또는 다른 빌드 지향적인 도구

  • tf 프로그램 및 공급 인수를 시작할 수 있는 다른 모든 도구

내부 자동화

내부 자동화에서는 자동화 프로세스를 구동하고 명령줄을 인수로 전달되는 명령 파일을 해석하도록 tf 명령줄 도구를 구성합니다. @ 기호 바로 다음에 명령 파일의 로컬 경로를 공급하여 내부 자동화를 호출할 수 있습니다. 이 명령줄에 제공하는 모든 추가적인 인수는 명령 파일에서 명령하기 위해 위치 인수로 사용할 수 있습니다.

참고

표준 입력을 명령 파일로 처리하려면 뒤에 파일 이름이 없는 @ 기호(tf@)를 제공합니다. 입력 스트림은 플랫폼의 기본 인코딩과 문자 집합에 따라 텍스트로 해석됩니다.

다음 명령 파일은 파일의 지정된 버전을 가져와 해당 버전에 대한 자세한 기록 정보를 인쇄합니다.

# This line is ignored because it is a comment.
get "-version:%2" -force "%1"
history -format:detailed "-version:%2" "%1"

/home/john/get-and-history.tfc라는 명령 파일은 두 개의 위치 인수를 예상하므로 다음 예제처럼 실행할 수 있습니다.

tf @/home/john/get-and-history.tfc README.doc C5087

첫 번째 인수인 README.doc는 각 줄이 해석될 때 %1(으)로 대체됩니다. C5087은 %2(으)로 대체됩니다.

참고

대체 값(예를 들어, 파일 이름 또는 날짜 버전 사양)에 공백이 올 수 있기 때문에 명령 파일에서 두 개의 위치 인수는 큰따옴표로 둘러싸입니다.

명령 파일의 형식은 EBNF(Extended Backus-Naur Form)로 설명할 수 있습니다.

command file ::= { line } ;
line ::= comment line | blank line | action line , EOL ;
comment-line ::= "#" | "rem" , { ? any non-EOL character ? } ;
blank line ::= { ? any whitespace character ? };
action line ::= tf command , [ { white space , tf option } ] , [ { white space , tf free argument } ] ;
tf command ::= ? any tf command ?
tf option ::= ? any tf option ? | positional argument ;
tf free argument::= ? any tf free argument ? | positional argument ;
positional argument::= "%" , non-zero digit , [ { digit } ] ;
EOL ::= ? your platform's EOL character or sequence ?
white space ::= { ? any non-EOL whitespace character ? }
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
non-zero digit ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  • tf command는 get, workfoldworkspace 같은 유효한 tf 명령이 될 수 있습니다.

  • tf option는 -login, -profile-format 같은 유효한 tf 옵션이 될 수 있습니다.

  • tf free argument는 서버 경로 및 로컬 경로 같은 tf에 사용 가능한 인수인 모든 문자열이 될 수 있습니다.

  • positional argument는 외부 tf 명령줄 인수에서 대체되는 텍스트의 자리 표시자입니다. 번호는 "%1"와 "%2" 같은 대체할 명령줄 인수의 인덱스에 해당하는 양의 정수입니다. %1은(는) 첫 번째 인수를 참조합니다. 위치 인수를 옵션으로 또는 사용 가능한 인수를 명령 다음에 어떤 순서로나 사용할 수 있습니다.

참고

공백이 있는 옵션 및 인수 주위에 큰따옴표를 사용합니다. 예를 들어, 레이블 지정자로 “-version:LRelease 2.1”을, 프리 인수로 “$/Inventory/Client Project/main.c”을, 공백을 포함하는 위치 인수로 "%1"을 사용하십시오. 큰 따옴표만 명령 파일에서 옵션 경계를 나타냅니다. 단일 인용 문자는 문자 그대로 해석됩니다. 동작 줄에서 리터럴 큰따옴표를 지정하려면 두 개의 이중 따옴표("")를 함께 사용해야 합니다. 명령 파일 내의 규칙을 인용 규칙은 사용자 셸이 명령 파일의 줄을 구문 분석하지 않으므로 사용자 셸을 사용하는 규칙과는 다를 수 있습니다.

두 가지 방법의 장단점

그렇다면 외부 또는 내부 자동화 중 어떤 방법을 사용해야 합니까? 각 메서드의 장단점을 살펴 보겠습니다.

외부 자동화

내부 자동화

장점

  • tf 명령을 실행할 수 있을 뿐만 아니라 다른 명령도 실행할 수 있으므로 훨씬 융통성이 있습니다.

  • 간단합니다. 외부 프로세스 또는 언어에 익숙하다면 다른 명령줄 프로세스와 같은 방식으로 tf 명령줄 도구를 호출합니다.

  • 쉽게 디버깅할 수 있습니다. 예상대로 일부 명령이 실행되지 않으면 명령줄에서 문제 진단 명령을 변경할 필요가 없습니다.

  • 외부 메서드보다 빠릅니다. Java 가상 컴퓨터가 한 번만 로드되고 명령줄 도구에 서버 연결을 다시 사용할 수 있으므로 각 명령을 개별적으로 실행하는 경우 보다 빠르게 여러 명령을 명령 파일에서 실행할 수 있습니다.

Cons

  • 내부 자동화보다 느립니다. 실행하는 각 명령어에 대해 CPU는 Java 가상 컴퓨터 실행과 클라이언트 실행 준비를 위한 시간이 필요합니다.

  • 외부 프로세스는 오류를 감지해야 합니다. 종료 코드를 실행할 때마다 외부 프로세스를 테스트하지 않으면 프로세스 오류를 놓칠 수도 있습니다.

  • 프로그램이 더 번거로워질 수 있습니다. 외부 프로세스에서는 tf 명령줄 도구를 실행할 때마다 모든 관련 옵션을 제공해야 하며 인수는 특수한 따옴표 또는 이스케이프를 필요로 할 수도 있습니다.

외부 자동화보다 효율성이 떨어집니다. 그 이유는 다음과 같습니다.

  • 명령 파일에서는 tf 명령만 지정할 수 있으므로, tf 명령 사이에 다른 작업을 수행하고 싶은 경우 여러 명령 파일을 쓰고 각 작업을 실행해야 할 수 있습니다.

  • 발생하는 첫 번째 오류 조건에서 실행이 중지됩니다. 도구에서 모든 오류 조건을 강제로 건너뛰거나 무시할 수 없습니다.

  • 정상 또는 오류 출력을 다루는 것이 더 복잡하다는 것을 알 수 있습니다. 내부 자동화에 의해 도구를 실행하는 프로세스는 명령 파일의 어떤 줄이 일반 출력의 어떤 부분을 생성하는지 확인할 수 없습니다.

참고 항목

기타 리소스

Command-line Reference (Team Explorer Everywhere)