Git 在Heroku部署期间编写一个具有版本号的文件

Git 在Heroku部署期间编写一个具有版本号的文件,git,heroku,deployment,semantic-versioning,Git,Heroku,Deployment,Semantic Versioning,我希望当前代码版本在运行于Heroku上的express/node.js项目的运行时作为变量可用 在开发环境中,我使用了一个,并让它给我一个semver字符串,但在生产Heroku环境中,没有git存储库,也没有git二进制文件 我过去解决这个问题的方法是,在非Heroku环境中,在项目的根目录中编写一个version文件,将此数据作为字符串,然后让应用程序加载它,而不是一直调用git。在大多数情况下,git确实存在,而且我们在生产中处于一个真正的存储库中,所以这些都很容易。如果git不可用,或

我希望当前代码版本在运行于Heroku上的express/node.js项目的运行时作为变量可用

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

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

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

(必要时,
git descripe--dirty--tags--always
也可以接受。)


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

使用什么语言/框架?例如,如果您正在使用Python,它可能会帮助您满足您的需求,但对于其他语言则没有用处。另外,在项目的根目录中编写文件真的是您的目标吗?或者你只是认为这是另一个问题的解决方案,例如在你网站的页脚中显示
git descripe
的输出?请参阅。优秀的观点;我会更新这个问题。也许其中一个会有帮助@克里斯,我想你不明白这个问题。我提到我已经在开发中使用了
git descripe
节点包(我甚至给出了我用来调用它的代码),并且我想要获得版本的生产环境位于Heroku上,那里没有git二进制文件或完整的存储库。没有这些,这些软件包就不能工作。或者,您是否建议在部署过程中,可以在本地运行此功能,并将输出发送到远程?如果是,怎么做?我想你已经在使用我提到的其中一个软件包了。我当然不完全知道你的解决方案;我对Node.js几乎没有经验(尽管我对Git有丰富的经验,对Heroku也有很多经验)。希望对您的确切技术知识更了解的人能为您提供更好的解决方案。
var version = require('git-describe').gitDescribeSync();
return version.semverString || version.raw;