Windows 서버 2016에서 Python 스크립트를 실행하려고 합니다. Windows 서버에 Win32-OpenSSH가 설치되어 있습니다. 파이썬 스크립트는 두 개의 환경 변수 ( BITBUCKET_REPO_SLUG
및 BITBUCKET_BRANCH
)가있을 것으로 예상합니다 . 기본적으로 Bitbucket 파이프 라인에 이미 설정되어 있습니다. Python 스크립트는 원격 서버에 복사 된 다음 SSH를 사용하여 Bitbucket 파이프 라인에서 호출합니다.
Bitbucket 파이프 라인에서 다음 명령을 시도 할 때 ...
scp <copy_python_script_to_win_server> # Works fine
echo $BITBUCKET_REPO_SLUG # Prints the repo name
echo $BITBUCKET_BRANCH # Prints the branch name
ssh [email protected] 'C:/Python/bin/python.exe C:/Users/john.doe/deploy.py' >> ./cmd_output
echo $?
cat ./cmd_output
... 다음과 같은 오류가 발생했습니다.
Traceback (most recent call last):
File "C:/Users/john.doe/deploy.py", line 16, in <module>
print(os.environ['BITBUCKET_REPO_SLUG'])
File "C:\Python\lib\os.py", line 669, in __getitem__
raise KeyError(key) from None
KeyError: 'BITBUCKET_REPO_SLUG'
Bitbucket 환경 변수가 파이썬 스크립트로 전달되지 않는 것 같았습니다 (대부분 파이프 라인 자체에서 실행하지 않고 원격 서버에서 호출했기 때문에). 따라서 다른 모든 것을 그대로 유지하면서 ssh
명령을 다음과 같이 변경했습니다 .
ssh [email protected] 'set BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG; set BITBUCKET_BRANCH=$BITBUCKET_BRANCH; C:/Python/bin/python.exe C:/Users/john.doe/deploy.py' >> ./cmd_output
위의 변경으로 파이프 라인은 성공적인 빌드를 표시하고 반환 상태 ( $?
)는 항상 0을 인쇄합니다. 또한 cat ./cmd_output
아무것도 인쇄하지 않습니다. 예상대로 Windows 서버에서 python 스크립트는 실제로 실행되지 않습니다.
내용 C:/Users/john.doe/deploy.py
:
import os
...
print(os.environ['BITBUCKET_REPO_SLUG'])
print(os.environ['BITBUCKET_BRANCH'])
...
...
내가 뭘 잘못하고 있는지 잘 모르겠습니다. 어떤 도움이라도 정말 감사하겠습니다.
환경 변수는 작은 따옴표 문자열로 확인되지 않습니다.
큰 따옴표로 바꾸십시오.
ssh [email protected] "set BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG; ..." >> ./cmd_output
또한 구문이 유효하지 않을 수 있습니다.
쉘이 Windows 인 경우 cmd.exe
: 세미콜론 ( ;
)을 사용하여 명령을 구분할 수 없습니다 . 앰퍼샌드 ( &
) 를 사용해야 합니다.
set VAR1=$VALUE & set VAR2=$VALUE2 & python ...
쉘이 일반적인 * nix 쉘의 에뮬레이션 인 경우 bash
: set
명령은 환경 변수 설정 용이 아닙니다. 에서 bash
, 당신은 같은, 단순히 할당에 의해 변수를 설정 BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG
.
VAR1=$VALUE1; VAR2=$VALUE2; python ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다