什么是部署:初始在Capistrano任务中做

时间:2017-09-29 04:50:17

标签: capistrano

我使用Capistrano进行部署。我的Capistrano任务几乎都是从很多博客中引用的。我经常发现以下结构。

namespace :deploy do
  desc 'Say something before Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:hoge', 'deploy:bazz'
      invoke 'deploy'
    end
  end

  task :hoge do
    on roles(:app) do
      puts "'hello, world'"
    end
  end

  task :bazz do
    on roles(:app) do
      puts "'goodnight, world'"
    end
  end
end

before 'deploy:hoge', 'deploy:bazz'语句中task做了什么?它不显示任何消息。我认为before语句必须在task语句之外。

1 个答案:

答案 0 :(得分:0)

至少在Capistrano 3.x中,没有内置deploy:initial任务这样的东西。使用该名称声明任务并没有什么特别之处。

  

我认为before语句必须在任务声明之外。

你是完全正确的。任何beforeafter声明都应该在顶层进行,而不是在task块内。

按照目前的情况,你给出的例子什么也没做。如果要在部署开始之前运行某个任务,您可以挂钩deploy:starting任务,如下所示:

before "deploy:starting", "deploy:hoge"

此外,deploy命名空间没有什么特别之处。我建议在不同的命名空间中声明自己的自定义任务,以使它们在视觉上分开。然后,您可以轻松区分内置的Capistrano任务和自定义任务。

所以我会改写这样的例子:

namespace :myapp do
  task :hoge do
    on roles(:app) do
      puts "'hello, world'"
    end
  end

  task :bazz do
    on roles(:app) do
      puts "'goodnight, world'"
    end
  end
end

# Invoke hoge and bazz before deployment begins
before "deploy:starting", "myapp:hoge"
before "deploy:starting", "myapp:bazz"

您可以在此处找到可与beforeafter一起使用的内置Capistrano任务的完整列表:

http://capistranorb.com/documentation/getting-started/flow/