7

我想用我的版本号标记当前部署的目录。

我尝试了这种方法:

在本地获取应用程序版本,将其存储到变量中,然后在远程主机上将其存储在文件中。

namespace :deploy do
  desc "Set a release number as the app version"
  task :mark_release do
    release_number = `git describe`
      on roles(:web) do
        execute("echo #{release_number} > #{current_path}/RELEASE")
      end
    end
  end

问题是,当我通过以下方式运行时:

cap deploy:mark_release

命令如下所示:

echo v9.3.0-254-g178d1f8; > /foo/bar/current/RELEASE

分号惹麻烦了。我的 RELEASE 文件当然是空的。

我认为这是由于 SSHKit 进行了一些转义。

有什么线索吗?

4

3 回答 3

4

我管理它:

1)我从机器上的 repo 目录中获取了版本号

2)我通过上传将它用流写到文件中!方法

namespace :deploy do
 desc "Set a release number as the app version"
 task :mark_release do
   on roles(:web) do
     within "/foo/bar/repo/" do
       upload! StringIO.new(capture(:git, "describe")), "#{current_path}/RELEASE"
     end
   end
 end
end
于 2014-01-03T11:46:02.703 回答
3

这是我提出的不需要上传本地文件的解决方案。它转到 repo 路径以执行 git 命令以提取版本,然后将输出重定向到文件。然后Rails 应用程序可以读取该文件。执行需要分别传入不同的参数。由于转义和空格的问题, https://github.com/capistrano/sshkit#the-command-map有更多关于命令映射的信息以及为什么需要它。

namespace :deploy do
  before :restart, :add_revision_file
  task :add_revision_file do
    on roles(:app) do
      within repo_path do
        execute(:git, :'rev-parse', :'--short', :'HEAD', ">#{release_path}/REVISION")
      end
    end
  end
end
于 2014-02-23T23:21:40.493 回答
0

利用SSHKit::Command

SSHKit::Command.new("echo #{release_number} > #{current_path}/RELEASE")
于 2017-06-10T16:21:35.110 回答