用于管理heroku应用程序的命令行应用程序。
heroku_tools的Python项目详细描述
基于yunojuno使用的工作流,用于管理heroku应用程序的自以为是的工具,如this blog post所述。
背景
我们(yunojuno)在过去三年中一直在将我们的应用程序部署到heroku,我们已经开发了一组fabric脚本来帮助我们完成这个过程。这个项目是从那项工作中提炼出来的。它包括cli应用程序,用于将应用程序部署到heroku并通过远程配置变量管理配置。
它是自定的,并强制执行特定的工作流,并且(当前)只能用于部署django应用程序。
工作流程
此应用程序支持的工作流基于gitflow,工作方式如下。
该项目有两个永久git分支-master和dev(根据gitflow),以及三个heroku环境:live、uat和dev。
dev分支部署到dev环境中,并在这里进行集成测试。在本地处理功能分支的开发人员在本地执行他们自己的测试,完成后,提交pull请求,以便将他们的分支合并回dev中。完成后,将推送dev。
当发布到期时,dev合并到master中,master分支被推送到uat和live环境中。两者之间的唯一区别是uat不是公共的,因此用于最终测试(例如用户接受测试)。这可能会映射到其他项目中的“预生产”或“暂存”。
(遵循此模型,代码在从dev到uat到live的环境中向上推送)。同时,数据通过环境从live向下迁移到uat到dev。uat环境是最新代码满足最新数据的地方,因此它被用于测试。此项目还将包含数据迁移和匿名脚本(一旦移植完毕)。
Heroku部署
将应用程序部署到heroku通常被描述为简单到单个git push,这在技术上是正确的。这将更新您的应用程序。然而,在现实世界的大多数情况下,这是完全不够的。
在大多数情况下,它看起来更像这样:
- 查看建议部署中的内容(git log)
- 打开应用程序维护页
- 向上推代码
- 运行CollectStatic^ ^
- 运行部署后任务-例如:数据库迁移
- 关闭“维护”页
- 编写发行说明
- 通知其他人部署情况
这个项目封装了这些步骤。
^^ collectstatic将作为默认herkou django构建包的一部分自动运行,但是如果您将内容推送到cdn,这可能不是所需的行为,您可能希望在部署后显式运行collectstatic。
$ heroku-tools deploy dev $ heroku-tools deploy dev --branch feature/xxx
应用迁移的命令通过配置文件指定为后部署操作。与heroku tools<;0.3版本相比,这是一个变化
部署
update这个项目已经在雄心中缩减了规模-部署功能不再是通用的,而是专门为django编写的。
此项目包含一个deploy命令行应用程序,用于加强此工作流。它有很多选项(对于完整列表运行deploy --help),但默认情况下,它将强制执行上述工作流。开发环境将推送开发分支、uat将推送master等部署。它将对远程heroku repo运行diff,以确定将推送的提交(和更改的文件)列表,并由此推断是否运行迁移和全站仪。
工作流细节在应用程序/环境文件中配置:
application:# the name of the Heroku applicationname:live_app# the default branch to push to this applicationbranch:master# use the heroku pipeline:promote featurepipeline:True# the upstream application to promoteupstream:staging_app# add a tag to the commit using the release version from Herokuadd_tag:False# add a tag, and write a release note into the tag message (experimental)add_rich_tag:False# Heroku application environment settings managed by the conf commandsettings:DJANGO_DEBUG:TrueDJANGO_SECRET_KEY:foobarDJANGO_SETTINGS_MODULE:my_app.settingsDATABASE_URL:postgres://postgres:postres@heroku.com/my_app
配置
config命令行应用程序合并了我们的configuration management process。它从application.conf文件的设置块设置应用程序环境变量。在将设置应用于heroku应用程序之前,它将对本地文件中每个设置的当前值运行diff。它打印出diff,以便您可以看到将应用哪些设置,并提示用户在推送到heroku之前确认应该应用这些设置。
状态
正在开发中。请不要马上使用。