我希望当前的代码版本在运行时在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上部署时可以使用当前标记名称或提交哈希值或其他类似值(例如在环境变量中),然后我可以在构建过程中使用它来编写文件或类似文件?那会很混乱,但它会起作用。还是有更好的东西?