2013-02-07 1 views
4

빌드 서버에서 Powershell을 실행하도록 사용자 지정 빌드 프로세스 템플릿을 수정했습니다. 따라서 SharePoint 솔루션의 배포를 자동화하는 스크립트를 실행할 수 있습니다. 빌드 서버 Powershell 버전을 2.0에서 3.0으로 업그레이드 할 때까지 (모든 작업은 SCVMM 관리 콘솔 2012를 설치하고 Powershell 3.0은 사전 요구 사항이었습니다) 완료해야합니다. 빌드 템플릿 자체에서 PowerShell을 실행하는 사용자 지정 빌드 프로세스 템플릿이 실패하는 이유

, 나는 다음과 같은 속성으로 PowerShell 명령을 실행하기 위해 Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess 워크 플로우 항목을 사용하고 있습니다 : 이제 모든

Arguments : String.Format(" ""& '{0}' -DropLocation '{1}' {2} "" ", ScriptFilename, BuildDetail.DropLocation, PostDropScript2Arguments)

FileName : "powershell"

OutputEncoding : System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.InstalledUICulture.TextInfo.OEMCodePage)

시간 나는 다음과 같은 오류가 빌드를 실행하려고하지 :

그것은 빌드처럼 보인다

Exception Message: File not found: PowerShell (type FileNotFoundException) Exception Stack Trace: Server stack trace:
at Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.ProcessWrapper.Start() at Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.InvokeProcessInternal.RunCommand(AsyncState state) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase) at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData) at System.Func 2.EndInvoke(IAsyncResult result) at System.Activities.AsyncCodeActivity 1.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContext context, IAsyncResult result) at System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)

Inner Exception Details:

Exception Message: The system cannot find the file specified (type Win32Exception) Exception Stack Trace: at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at Microsoft.TeamFoundation.Build.Workflow.Activities.InvokeProcess.ProcessWrapper.Start()

가 더 이상 실제 PowerShell을 파일로 "PowerShell을"명령을 링크 할 수 있습니다.

수동으로 빌드 서버에 가서 "powershell"을 명령 줄에 입력하면 예상대로 PowerShell이 ​​시작되었습니다.

다른 누구도 이전에이 문제가 발생 했습니까?

+1

환경 변수가 단순히 새로 고쳐지지 않았을 가능성이 있습니까? 즉, 설치 이후 Windows 서비스 또는 서버를 다시 시작 했습니까? – Nathan

+1

@Nathan이 입력을 주셔서 감사합니다. Powershell의 새 버전을 설치 한 후 빌드 서버를 다시 시작해야했기 때문에 불행히도 문제가 있다고 생각하지 않습니다. 나는 그것을 다시 시도 할 것이다! –

+0

나는 정확히 똑같은 문제를 보았다. 내가 생각할 수있는 * 다른 * 방법 (LinqPad와'Process.Invoke'를 포함하여 빌드 계정 아래에 있음)을 사용하면 경로없이 PowerShell을 시작할 수 있지만 갑자기 빌드 프로세스를 수행 할 수 없습니다. –

답변

5

이 워크 플로의 invokeprocess 단계에서이 powershell.exe에 대한 전체 파일 경로를 추가하고 항상 로그인, 을 (나는이에 대한 환경 설정을 신뢰하지 것이다) 그리고 알고 작동합니다 매우

감사합니다 자신의 계정에있는 서버가 특정 계정에서 실행중인 빌드 서버와 동일하지 않습니다.

+2

답해 주셔서 감사합니다. 너는 좋은 점을 알았다 - Funnily만큼 나는 실제로 오늘 아침에 다시 일하는 건축물을 얻을 수 있었다. 실제로 변경된 유일한 것은 새로운 빌드 에이전트를 생성하고이를 사용하도록 빌드 정의를 얻은 다음 다시 작동하기 시작한 것입니다. 워크 플로의 경로를 명시 적으로 타겟팅하는 제안을 시도하고 그 작업으로 답변을 표시합니다. –

+0

FileName 인수를 "C : \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe"로 변경했습니다. 도와 주셔서 대단히 감사합니다! –

+0

동일한 문제가있었습니다 - 해결할 문제에 대한 새로운 빌드 컨트롤러 (에이전트가 아님)를 만들어야했습니다. 어딘가에 뭔가 캐싱하는 것 같습니다! –

0

내 경우 Windows Managment Framework 3.0을 배포 한 후에도 동일한 오류가 발생했습니다. 빌드 컨트롤러와 에이전트를 다시 시작하여 문제가 해결되었습니다.

관련 문제