问题 在部署期间将git版本号插入文件


我在做什么我认为应该相当简单,但我似乎无法弄清楚如何使它工作。

我想在html和javascript文件中嵌入一个唯一的版本号,原因有两个。第一个原因是我想确保在加载javascript文件时,如果有新版本,系统不会尝试使用缓存,但如果我可以使用类似的东西调用它

 <script src="/app.js?v1.0.1-1-95425234"></script>

我几乎肯定能确保这一切都不会发生。第二个原因是我的远程错误记录,最好知道哪个版本的系统有错误,这样我就可以适当地修复它,但不必在每次部署时手动更新这个版本号。

我碰到 git describe 一路上,我认为它的输出值非常适合这一点。

基本上我想在我的javascript和html文件中取一个键 GIT-CURRENT-VERSION 并用输出替换它 git describe

我正在使用fabric作为我的部署方法,所以在我们抓住最新版本的git之后,在服务器端做这很有意义。

我怀疑是某些组合 sed 和 grep 我会在这里做到这一点,如果我能找到一个单一的衬垫,那么添加到我的部署脚本会非常容易。

提前致谢!


5115
2017-10-13 19:59


起源

您使用哪个Web框架?我想有更好的解决方案,如递归替换“GIT-CURRENT-VERSION”。 - guettli
guettli - 我发布了我最终使用的内容。希望能帮助到你! - Jamie Starke


答案:


您可以从已部署的git树的根目录执行以下操作:

export VERSION="$(git describe)"
find . -type f -print0 | xargs -0 sed -i "s/GIT-CURRENT-VERSION/$VERSION/g"

(这只是粗略的测试 - 谨慎使用。)

请注意,这将使您的树具有本地修改。


5
2017-10-13 20:40





我从未听说过 fabric,但如果面料使用(或调用) git archive,那你就可以用了 gitattributes。也就是说,您可以将HTML文件包含在以下内容中:

<script src="/app.js?$Format:%H$"></script>

并在 .gitattributes 在存储库的顶部:

*.html    export-subst

然后,每当您使用创建存档 git-archive$Format:%H$ 将被提交的哈希替换。你可以使用任何可用的东西 --pretty-format 在 git-log

检查手册 gitattributes,或者更好:章节 8.2自定义Git - Git属性 的 亲Git 预订以获得更多想法。


9
2017-10-13 22:28





沿着guettli的评论,我想我发布了我的最终结果。这是我的解决方案,基于Mark Longair的解决方案。

export DESCRIPTION="$(git describe)"
find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0 | xargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g"

我会解释一下我在这里做的事情。

export DESCRIPTION="$(git describe)" 获取git存储库当前状态的当前描述。有关更多信息,请查看 git描述手册页

下一个, find [PATH] -regextype posix-extended -regex ".*\.(js|html)" -type f -print0 你可以用 [PATH] 与您的存储库的路径。 -regextype posix-extended -regex ".*\.(js|html)" 通过您的目录下降并找到与定义的正则表达式匹配的所有文件 ".*\.(js|html)"。就我而言,我知道我只想在javascript或html文件中进行替换。最后 xargs -0 sed -i "s/CURRENT-GIT-DESCRIPTION/$DESCRIPTION/g" 告诉系统更换 CURRENT-GIT-DESCRIPTION 用于定义的值 git describe 以上。

在我的情况下,这很好用,因为我正在使用  为了部署到服务器,并且因为我希望实时更改,我所做的是更新存储库,然后将其复制到系统的新部署中。一旦系统准备就绪,我就摆脱了git数据文件,将其作为常规数据结构。现在我可以告诉系统使用新的构建,一切都准备好了。

希望能帮助其他人寻求类似的东西!


1
2017-10-30 03:46