在Heroku部署期间编写带有版本号的文件

时间:2016-03-19 00:54:45

标签: git heroku deployment semantic-versioning

我希望当前的代码版本在运行时在Heroku上运行的express / node.js项目中作为变量提供。

在开发环境中我使用git describe node module并让它给我一个semver字符串,但是在生产Heroku环境中没有git存储库,也没有git二进制文件。

过去我解决这个问题的方法,虽然在非Heroku环境中,但是在项目的根目录中编写一个version文件,并将此数据作为字符串,然后使用该应用程序加载它而不是一直调用git。在大多数情况下git确实存在,我们在生产中处于真正的存储库中,因此这些很容易。如果git不可用,或者环境不是完整的存储库(没有标记,或者是浅层克隆),我在部署时仍然拥有提交的SHA哈希,由部署工具提供,所以写了一个令人不快的脚本,它在部署期间运行并使用它。它查询了Github的API标签,如果可能的话找到匹配的标签,并将标签名称写入version文件。

理想情况下,我想要一个基于当前标签和偏移量的半字符串。特别是在具有上述包的节点中,我运行:

var version = require('git-describe').gitDescribeSync();
return version.semverString || version.raw;

(在紧要关头,git describe --dirty --tags --always也是可以接受的。)

实现这一目标的好方法是什么?是否在Heroku上部署时可以使用当前标记名称或提交哈希值或其他类似值(例如在环境变量中),然后我可以在构建过程中使用它来编写文件或类似文件?那会很混乱,但它会起作用。还是有更好的东西?

0 个答案:

没有答案