Mat*_*orn 6 git ruby-on-rails heroku continuous-deployment
我想更新一个环境变量或某些东西来跟踪当前活动的部署时间.有没有办法在我的Heroku应用程序中自动执行此操作,或者我是否必须在部署脚本中执行此操作?理想情况下,我想要一些可以使用TDDium for CI的东西,并让它们在构建过程中为我推送Heroku.
你可以使用Heroku的配置变量.这些只是您通过Heroku CLI配置的环境变量.例如,您可以将当前日期存储在名为DEPLOY_TIMESTAMP的环境变量中.
heroku config:add DEPLOY_TIMESTAMP=$(date)
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够从应用程序或命令行中访问此环境变量.可以ENV['DEPLOY_TIMESTAMP']从Rails应用程序访问该值,也可以通过解析heroku config本地项目目录的输出来访问该值.
如果你想在某种程度上自动化,你可以创建一个Git别名来推送到Heroku并同时更新DEPLOY_TIMESTAMP.请注意,您不能覆盖像push这样的真实Git命令的名称,但您可以添加自定义操作,例如pushstamp.例如:
git config alias.pushstamp \
'! git push heroku master; heroku config:add DEPLOY_TIMESTAMP=$(date)'
Run Code Online (Sandbox Code Playgroud)
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`
Run Code Online (Sandbox Code Playgroud)
2. 使用 tddium:tddium 现在支持“构建后挂钩”,我增强了它们的标准版本以在该过程中设置 GIT_TAG。首先阅读并关注http://blog.tddium.com/2012/05/09/heroku-continuous-deployment/,然后在“post_build_hook”任务中添加一些内容来读取标签并设置heroku配置变量,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
笔记:
根据需要替换上面的“master”。在我的部署 rake 任务中(很乐意分享),我允许基于分支或标签进行部署(可以方便地绕过 Heroku 仅从 master 进行部署的愿望)。
要让 tddium 运行“post_build_hook”,您必须通过运行以下命令来停用部署后 URL:tddium suite --edit
并使用“pull url”的当前值,但将“push url”设置为空白(或默认值)。博客链接中没有提到此步骤。
在当前构建的 tddium 网页中,您现在将看到一个指向 post_deploy_hook 日志文件的链接(在页面的最底部),您可以打开该链接并查看它的运行情况(也称为调试您的 rake 任务)。