使用Fabric运行本地命令

时间:2019-03-27 21:25:29

标签: python build local fabric yarnpkg

我的环境基于Windows,而Vagrant或docker为实际环境。我想建立一种直接从Windows直接临时部署内容的快速方法,如果我能运行就很好了

fab deploySomething

例如,这将在本地构建React应用,提交并推送到服务器。但是我被困在本地。

我的设置是: Windows 10 面料2 Python 3

我已经通过简单的测试设置了fabfile.py:

from fabric import Connection, task, Config

@task
def deployApp(context):
    config = Config(overrides={'user': 'XXX', 'connect_kwargs': {'password': 'YYY'}})
    c = Connection('123.123.123.123', config=config)
    # c.local('echo ---------- test from local')             
    with c.cd('../../app/some-app'):
        c.local('dir') #this is correct
        c.local('yarn install', echo=True)

但是我得到:

'yarn' is not recognized as an internal or external command, operable program or batch file.

您几乎可以用任何东西替换'yarn',我无法使用可以正常工作的local运行命令。启用调试后,我得到的只是:

DEBUG:invoke:Received a possibly-skippable exception: <UnexpectedExit: cmd='cd ../../app/some-app && yarn install' exited=1>

这不是很有帮助...有人碰到过这个吗?我可以找到的带有fabric的本地命令的任何示例似乎都是指旧的1.X版本

1 个答案:

答案 0 :(得分:0)

要运行本地命令,请从context而不是连接中运行它们。 n.b.,这使您进入invoke级别:

from fabric import task

@task
def hello(context):
    with context.cd('/path/to/local_dir'):
        context.run('ls -la')

也就是说,问题可能是您需要yarn的完全限定路径,因为您的环境路径尚未获得。