Passar variáveis de ambiente locais para script Python no servidor Windows usando SSH

1

Estou tentando executar um script Python no servidor Windows 2016. Tenho Win32-OpenSSH instalado no servidor Windows. O script python espera que duas variáveis de ambiente ( BITBUCKET_REPO_SLUG e BITBUCKET_BRANCH ) estejam presentes. Estes já estão definidos por padrão no pipeline Bitbucket. O script python é copiado para o servidor remoto e, em seguida, usando o SSH, invoco-o do pipeline Bitbucket.

Quando eu estava tentando o seguinte comando no meu pipeline 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

... Eu estava recebendo o seguinte erro:

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'

Pareceu-me que as variáveis de ambiente Bitbucket não estavam sendo passadas para o script python (muito provavelmente porque eu não estava rodando a partir do pipeline em si, mas porque eu estava invocando-o em um servidor remoto). Então, mantendo tudo como está, eu só mudei o comando ssh para o seguinte:

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

Com a alteração acima, o pipeline mostra uma compilação bem-sucedida e o status de retorno ( $? ) sempre imprime 0. Além disso, cat ./cmd_output não imprime nada. Como você pode esperar, no servidor Windows, o script python realmente não é executado.

Conteúdo de C:/Users/john.doe/deploy.py :

import os
...
print(os.environ['BITBUCKET_REPO_SLUG'])
print(os.environ['BITBUCKET_BRANCH'])
...
...

Não sei exatamente o que estou fazendo de errado. Qualquer ajuda será realmente apreciada.

    
por Technext 30.09.2018 / 20:51

1 resposta

1

As variáveis de ambiente não são resolvidas em strings de citação única.

Tente substituí-los por aspas duplas:

ssh [email protected] "set BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG;  ..." >> ./cmd_output

Além disso, sua sintaxe provavelmente não é válida.

  • Se o seu shell for Windows cmd.exe : Você não pode usar um ponto-e-vírgula ( ; ) para separar comandos. Você precisa usar oe comercial ( & ).

    set VAR1=$VALUE & set VAR2=$VALUE2 & python ...
    
  • Se o seu shell é uma emulação de algum shell * nix comum, como o comando bash : set não é para configurar variáveis de ambiente. Em bash , você define variáveis simplesmente por uma atribuição, como BITBUCKET_REPO_SLUG=$BITBUCKET_REPO_SLUG .

    VAR1=$VALUE1; VAR2=$VALUE2; python ...
    
por 01.10.2018 / 08:05