如何将自定义选项传递给 fab 命令

How to pass custom options to fab command

我想为多个项目重复使用 fabfile。

config.ini

[project1]
git_repo = git@github/project1
project_path = '/path/project1'
[project2]
git_repo = git@github/project22
project_path = '/path/project2'

fabfile.py

from fabric import task
config = configparser.ConfigParser()
config.read("conf.ini")

@task
def getcode(connection, project, git_repo):
    args = config['project]
    connection.run("git clone {}".format(git_repo))

@task
def pushcode(connection, project, git_repo):
    args = config['project]
    connection.run("git push {}".format(git_repo))

如何避免在每个方法中使用 args = config['project]。我可以使用 fab 命令 fab -H web1 --project=project1 pushcode 传递自定义参数吗?需要帮助。

是的。 实际上,fab CLI 工具与 Invoke 的 inv CLI 工具具有相同的选项。

看看 that part of Invoke's docs,您会发现它与您提出的语法相同:)

当然,您可以将参数传递给从 invoke.task 调用屋顶任务的 fab 任务。 我将举例说明如何做到这一点: fabfile.py

from fabric import task

@task
def sampleTask(connection, name, laste_name, age):
    print("The firstname is ", name)
    print("The lastname is ", laste_name)
    print("The age is ", age)

然后您可以像这样从命令行调用它: 命令行

fab sampleTask -n peshmerge -l Mo -a 28

输出应该是这样的:

[vagrant@localhost fabric]$ fab sampleTask -n peshmerge -l Mo -a 28
The firstname is Peshmerge
The lastname is Mo
The age is 28

注意:为您的任务指定一个包含下划线 (_) 的名称将导致错误

No idea what 'sample_task' is!

命名任务参数也是如此。