【问题标题】:Capistrano duplicate tasks for each roleCapistrano 为每个角色重复任务
【发布时间】:2013-10-03 21:21:51
【问题描述】:

我必须在 Capistrano 中遗漏一些东西,因为我刚刚开始编写 capfile,并且正在查看大量重复的代码。考虑一下这个

role :dev, "dev1", "dev2"
role :prod, "prod1", "prod2"

desc "Deploy the app in dev"
task :deploy_dev, :roles => :dev do
    run "sudo install-stuff"
end

desc "Deploy the app in prod"
task :deploy_prod, :roles => :prod do
    run "sudo install-stuff"
end

IMO 想要在 dev 或 prod 中运行完全相同的任务是完全合理的,但据我所知,Capistrano 会让我编写 2 个任务来指定不同的节点......

好像你可以参考 CLI 上的角色

cap deploy dev
cap deploy prod

capfile 中可能有一个“部署”任务的定义,而不是每组服务器都有一个重复的定义。

有没有办法一次编写任务并动态指定角色?

【问题讨论】:

    标签: capistrano code-duplication


    【解决方案1】:

    看看multistage extension。虽然设置您自己需要的任务相当容易,但多阶段扩展将为您完成所有工作。

    如果您想自己动手,请参阅手册的calling tasks 部分。诀窍是您可以从命令行按顺序调用不同的任务。

    【讨论】:

    • 实际上,今天深入研究这个,看来我太愚蠢了,无法得到我想要的东西。本质上,我想要一个变量来填充任务的 :roles 部分。我的想法是链接任务,但我不确定是否可以在第一个任务中设置变量的值并将其用于后续任务的 :roles。那可能吗?无论哪种方式,看起来我正在跳船并前往织物。在 30 分钟内找到what I need! Capistrano 似乎与 ruby​​ 项目的耦合过于紧密,无法满足我的需求。
    • 我看不出这与cap dev deploy 有什么不同,但无论如何都可以满足您的需求。据我所知,似乎是完全相同的解决方案。
    • 我没有 ruby​​ 项目,所以我没有多阶段扩展可以参数化的部署任务。为了 Capistrano,我也不想在我正在部署的任何项目中放置一个配置目录。如果我能弄清楚如何对 :roles 进行参数化,我会坚持使用 Capistrano,但文档并没有帮助我弄清楚。
    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 2011-09-25
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多