2016-08-24 3 views
2

슬레이브에서 Jenkins 작업을 실행할 때이 콘솔 출력이 표시됩니다. 작업은 파일을 만들어 c:\foo\services.csv에 넣어야합니다.슬레이브에서 powershell 명령을 실행하십시오. - Jenkins

Get-Service | Export-CSV c:\foo\service.csv 

참고이 콘솔 출력에 단어 "우회"여기

은 작업 PowerShell 명령입니다. 나는 그것을 지나갈 수 없다.

[AnonymousJWTApi] $ powershell.exe를 -NonInteractive -ExecutionPolicy 있으며 ByPass "& 'C : \ 사용자 \ XXX \의 AppData \ 로컬 \ 임시 \의 hudson1582303083838020200.ps1'"

나는 그것이 문제라고 생각합니다

온라인에서 슬레이브의 마스터에 앉아 스크립트를 실행할 때 오류가 발생하는 것으로 나타났습니다.

그래서 나는 수동으로 슬레이브에 스크립트를 만들고 c:\foo\listServices.ps1에 넣었습니다. 그런 다음 Jenkins (마스터)에서이 명령은 슬레이브에서 실행됩니다. “C:\foo\listServices.ps1” 슬레이브에서 직접 실행되도록 스크립트를 호출합니다.

여전히 동일한 콘솔 출력을 얻고 있습니다 ... "바이 패스"에 대한 무언가가 여전히 작동하지 않는 것으로 보입니다. csv 파일이 foo 폴더에 저장되지 않습니다. 작동하지 못하게하는 우회 장치입니까? 그렇다면 해결책은 무엇입니까?

그리고 전체 콘솔 출력 :

Started by user anonymous 
Building remotely on slave1 in workspace C:\Jenkins\Master\workspace\AnonymousJWTApi 
> git.exe rev-parse --is-inside-work-tree # timeout=10 
Fetching changes from the remote Git repository 
> git.exe config remote.origin.url C:\Users\xxx\Source\Repos\AnonymousJWTApi # timeout=10 
Fetching upstream changes from C:\Users\xxx\Source\Repos\AnonymousJWTApi 
> git.exe --version # timeout=10 
> git.exe -c core.askpass=true fetch --tags --progress C:\Users\xxx\Source\Repos\AnonymousJWTApi +refs/heads/*:refs/remotes/origin/* 
Seen branch in repository origin/master 
Seen 1 remote branch 
Checking out Revision a7087f81af855cc96b8763a5ec66b96c19a44a30 (origin/master) 
> git.exe config core.sparsecheckout # timeout=10 
> git.exe checkout -f a7087f81af855cc96b8763a5ec66b96c19a44a30 
> git.exe rev-list a7087f81af855cc96b8763a5ec66b96c19a44a30 # timeout=10 
[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\xxx\AppData\Local\Temp\hudson1582303083838020200.ps1'" 
Finished: SUCCESS 

편집 : 파일이 마스터에 저장지고 ... : P

노예가 PowerShell 스크립트를 호스트하기위한 것이 아닙니다 보인다 또는 내가 알지 못했던 그들의 산출물.

+0

슬레이브에 로그인하여 수동으로 해당 명령을 실행하려 했습니까? 무슨 일이야? –

+0

@ChrisN 네, 그 일을 할 때 작동합니다 – BeniaminoBaggins

답변

2

-ExecutionPolicy Bypass은 컴퓨터 또는 사용자의 실행 정책에 관계없이 스크립트 파일을 실행할 수 있도록합니다. 그것은 정확하며 문제의 원인이 아닙니다.

문제가 사용 권한 일 수 있습니다.

젠킨스 슬레이브 에이전트가 특정 사용자로 실행 중입니다. 시작한 사용자 또는 서비스로 실행중인 경우 서비스 계정이됩니다.

사용자는 C:\Foo에 글을 쓸 수있는 권한이 없으므로 확인할 수 있습니다.

Get-Service | Export-CSV $env:WORKSPACE\service.csv 

작동합니다 :

이를 테스트하는 또 다른 방법은 이런 식으로 뭔가를 작업 공간 디렉토리에 쓰기, 그렇게하는 것입니다. 그렇다면 C:\Foo 디렉토리의 권한을 변경하거나 이미 허가가있는 계정으로 슬레이브를 실행하십시오.여기

는 어떤 사용자 모두가 서비스를 실행 말할 수있을 방법, 그리고 작업 공간 디렉토리입니다 :

Get-ChildItem env:\ | Out-String | Set-Content -Path $env:USERPROFILE\env.txt 

이 파일이 실행되는 사용자의 프로파일에 env.txt라고 기록합니다 스크립트 (모든 환경 변수 (%WORKSPACE% 포함) 포함). 각 사용자 프로파일을 탐색하여 종료 지점을 확인한 다음 사용자를 알 수 있습니다.

+0

$ env : WORKSPACE가 어디에 있는지 어떻게 알 수 있습니까? 마스터 위의 powershell에서 이것을 실행하면 실제로 드라이브이며 사용 권한이 거부됩니다. 하지만 노예에서 일한 것으로 보입니다. 파일을 찾을 위치를 모르겠습니다. – BeniaminoBaggins

+0

어떻게 슬레이브를 계정으로 실행합니까? – BeniaminoBaggins

+1

@Beniamino_Baggins 마스터에 종속 노드를 정의 할 때 FS 루트를 지정했습니다. 'workspace'는 그 아래 하나의 레벨이 될 것이고, 그곳에 작업 이름을 가진 폴더를 생성 할 것이라고 생각합니다. https://wiki.jenkins-ci.org/x/BAN-Ag – briantist

관련 문제