7

我想更新一个环境变量或其他东西来跟踪当前活动的部署时间。有什么方法可以从我在 Heroku 上的应用程序中自动执行此操作,还是我必须将其作为部署脚本的一部分来执行?理想情况下,我想要使用 TDDium for CI 与我一起工作的东西,并让他们在构建通过时为我推送到 Heroku。

4

3 回答 3

10

在 Heroku 上使用环境变量

你可以使用 Heroku 的config-vars。这些实际上只是您通过 Heroku CLI 配置的环境变量。例如,您可以将当前日期存储在名为 DEPLOY_TIMESTAMP 的环境变量中。

heroku config:add DEPLOY_TIMESTAMP=$(date)

然后,您应该能够从应用程序中或从命令行访问此环境变量。可以ENV['DEPLOY_TIMESTAMP']从 Rails 应用程序或通过解析heroku config本地项目目录的输出来访问该值。

使用别名自动化

如果你想稍微自动化一下,你可以创建一个 Git 别名来推送到 Heroku 并同时更新 DEPLOY_TIMESTAMP。请注意,您不能覆盖真正的 Git 命令的名称,例如push,但您可以添加自定义操作,例如pushstamp。例如:

git config alias.pushstamp \
    '! git push heroku master; heroku config:add DEPLOY_TIMESTAMP=$(date)'

也可以看看

混帐配置(1)

于 2012-06-27T07:11:08.603 回答
2

您可以通过查看只读 Heroku 文件系统中文件的时间戳来找到上次部署时间。

您可以通过直接使用 ls 查看这些时间戳来验证这一点。运行示例heroku run rails c

irb(main):003:0> puts `ls -la`
total 96
drwx------ 14 u51199 51199  4096 May 14 22:49 .
drwxr-xr-x 15 root   root   4096 Mar 20 09:43 ..
drwx------ 10 u51199 51199  4096 May  7 02:12 app
drwx------  2 u51199 51199  4096 May  7 02:17 bin
drwx------  2 u51199 51199  4096 Mar 14 22:12 .bundle
drwx------  5 u51199 51199  4096 May  7 02:12 config
-rw-------  1 u51199 51199   226 May  7 02:12 config.ru
drwx------  3 u51199 51199  4096 May  7 02:12 db
-rw-------  1 u51199 51199  1138 May  7 02:12 Gemfile
-rw-------  1 u51199 51199 11456 May  7 02:12 Gemfile.lock
-rw-------  1 u51199 51199   542 May  7 02:12 .gitignore
drwx------  5 u51199 51199  4096 May  7 02:12 lib
drwx------  2 u51199 51199  4096 May  7 02:17 log
-rw-------  1 u51199 51199    57 May  7 02:12 Procfile
drwx------  2 u51199 51199  4096 May  7 02:13 .profile.d
drwx------  3 u51199 51199  4096 May  7 02:17 public
-rw-------  1 u51199 51199   249 May  7 02:12 Rakefile
-rw-------  1 u51199 51199   613 May  7 02:12 README.md
-rw-------  1 u51199 51199    31 May  7 02:12 .rspec
drwx------  7 u51199 51199  4096 May  7 02:12 spec
drwx------  3 u51199 51199  4096 May  7 02:18 tmp
drwx------  6 u51199 51199  4096 May  7 02:13 vendor

因此,如果您想知道您的应用程序上次部署的时间,您可以使用File.mtime并取回一个真实Time对象:

irb(main):009:0> File.mtime("app")
=> 2015-05-07 02:12:57 +0000
irb(main):010:0> File.mtime("app").class
=> Time
于 2015-05-14T23:44:53.187 回答
1

1. 部署到 Heroku 时没有自动方法,除非您制作部署脚本/任务。(我也在 2012 年 6 月搜索过这个)。我有一个执行部署的 rake 任务,其中一部分设置 GIT_TAG 并且我的网页(rails 中的应用程序布局)将其打印到页面上。

下面是我如何写入 Heroku GIT_TAG 配置变量(使用基于 Rails 的 Rake 任务):

    tag = `git describe master --always`.strip
    `heroku config:add GIT_TAG=#{tag} --app XXXX` 

2. 使用 tddium:tddium 现在支持“构建后挂钩”,我增加了他们的标准版本以在该过程中设置 GIT_TAG。首先阅读并关注http://blog.tddium.com/2012/05/09/heroku-continuous-deployment/并在“post_build_hook”任务中添加一些内容以读取标签并设置 heroku config var,如下所示:

    namespace :tddium do
      def cmd(c)
        system c
      end

      desc "post_build_hook to deploy to dfc-site-qa"
      task :post_build_hook do
        ...use code verbatim from above URL (https://www.tddium.com/support/reference#customization)
        ...
        current_tag = `git describe master --always`.strip
        cmd "heroku config:add GIT_TAG=#{current_tag} --app XXXX" or puts "could not set GIT_TAG to #{current_tag}"
        ...
      end

笔记:

  1. 根据需要替换上面的“master”。在我的部署 rake 任务(很高兴分享)中,我允许基于分支或标签进行部署(方便绕过 heroku 仅从 master 部署的愿望)。

  2. 要让 tddium 运行您的“post_build_hook”,您必须通过运行以下命令停用部署后 URL:tddium suite --edit

    并使用“拉网址”的当前值,但将“推网址”设置为空白(或默认值)。博客链接中未提及此步骤。

  3. 在当前构建的 tddium 网页中,您现在将看到 post_deploy_hook 日志文件的链接(在页面的最底部),您可以打开它并查看它是如何进行的(也就是调试您的 rake 任务)。

于 2012-07-10T02:17:21.457 回答