Heroku 应用程序的运行时可以知道它的提交 ID 吗?

2024-04-21

我想要的运行时间我的 Heroku 应用程序 https://github.com/guardian/prout(Play/Scala,在 Heroku Cedar 上运行)能够向我报告它是根据哪个 git 提交构建的。 Heroku 应用程序通常由 slug 编译器在 Heroku 的基础设施上构建 - 不幸的是,slug 编译器确实this作为此构建过程的早期部分:

删除未使用的文件,包括 .git 目录、.gitmodules 文件、 log 和 tmp 中的任何内容,以及顶级中指定的任何内容 .slugignore 文件。

...因此 Git 信息不再可供sbt-buildinfo https://github.com/sbt/sbt-buildinfo我用来记录 Git 提交的插件。

如何在slug中记录HEAD提交?是否有包含此信息的环境变量?


三种不同的选择,最好的第一个...

SOURCE_VERSION环境变量(构建时)

从2015年4月1日起,SOURCE_VERSION可用于在 Heroku 上运行的构建的环境变量。对于 git-push 构建,这是正在构建的源的 git commit SHA-1:

https://devcenter.heroku.com/changelog-items/630 https://devcenter.heroku.com/changelog-items/630

(感谢@srtech指出这一点 https://stackoverflow.com/a/29425999/438886!)

/etc/heroku/dyno元数据文件(运行)

Heroku 有beta功能写出/etc/heroku/dyno元数据文件到您正在运行的测功机上。如果您向支持人员发送电子邮件,您可能会被添加到测试版中。这是 Heroku 自己使用它的地方:

https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb https://github.com/heroku/fix/blob/6c8ab7a/lib/heroku_dyno_metadata.rb

内容如下:

{
   "dyno":{
      "physical_id":"161bfad9-9e83-40b7-b385-78305db2f168",
      "size":1,
      "name":"run.7145"
   },
   "app":{
      "id":null
   },
   "release":{
      "id":50,
      "commit":"2c3a0b24069af49b3de35b8e8c26765c1dba9ff0",
      "description":null
   }
}

..so release.commit是你所追求的领域。

SBT 特定:使用sbt-heroku在本地构建 slug

我最初的解决方案是使用sbt-heroku https://github.com/heroku/sbt-herokuHeroku 自己发布的插件。这意味着不再通过以下方式进行部署git push(在 Heroku 自己的基础设施上编译 slug),而是编译 sluglocally并将其直接上传到 Heroku。因为 slug 是在本地编译的,所以在我的工作仓库中,Git 信息都在那里,构建过程可以轻松识别提交 ID https://github.com/guardian/prout/blob/9f98e71/build.sbt#L18并将其嵌入到应用程序的代码中。

该 slug 的大小比 Git diff 的大小要大得多(90MB vs 0.5KB),但除此之外,该解决方案运行得相当不错。我实际上正在使用 Travis 进行持续部署,所以 Travis 正在做sbt stage deployHeroku https://github.com/guardian/prout/blob/9f98e713/.travis.yml#L6-L7对我来说(Git 提交 ID 在构建时在该环境中可用),这意味着我可以在移动时从我的笔记本电脑进行 git-push,而 Travis 会将大型 slug 上传到 Heroku。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heroku 应用程序的运行时可以知道它的提交 ID 吗? 的相关文章

  • 代表 Git 存储库的数学结构是什么

    我正在学习 Git 如果我能描述一下代表 Git 存储库的数学结构 那就太好了 例如 它是一个有向无环图 它的节点代表提交 它的节点有代表分支等的标签 每个节点最多一个标签 没有标签使用两次 我知道这个描述不正确 我只是想解释我正在寻找的内
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • Heroku 上的 OpenCV 错误,但模型部署成功

    我正在尝试在 Heroku 上部署深度学习 Flask 应用程序 它已成功部署 但仍然给我Application Error信息 我检查了日志 但没有发现任何内容 帮我 构建日志 gt Building on the Heroku 20 s
  • Heroku 与 django 通道的正确 procfile/要求是什么?

    tl dr django 频道应用程序在本地使用 manage py runserver 运行 但不在 heroku 上运行 我是 django 通道的新手 尝试使用 heroku 通道部署一个非常基本的 django 应用程序 我最初使用
  • 哪个是更智能的 git 协议,ssh 或 git(通过 ssh)或 https 协议?

    哪个高效 SSH 或 Git 文件压缩 我对 Git 的理解是 git 协议很智能 因为通信两端都有一个协议代理来压缩文件传输 从而通过有效地使用网络带宽来实现更快的克隆 From 我发现了以下说法 For secure authentic
  • Slack + Heroku:每当我的 Heroku 应用程序关闭时向 slack 发送通知

    我有一个 Heroku 应用程序 每当我在 Heroku 上部署时 我在 Slack 的生产频道上就会收到一条通知 我想对我的 Heroku 应用程序因任何原因关闭时遵循相同的程序 有什么推荐的方法吗 None
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • Heroku Rails 应用程序级别不记录日志

    我在 Heroku 上有一个 Rails 应用程序 它没有在应用程序级别进行日志记录 当前版本 红宝石1 9 3 导轨3 1 3 在 config environment development rb 中有以下几行 config logge
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git 到 TFS 源代码管理迁移

    我想看看 TFS 如何为我的命令工作 所以我想将我们当前的 GIT 存储库移动到 TFS 数据库 我们使用 GIT 来获得普遍的分支支持 因此我想使用 TFS 2010 来解决该问题 现在的问题是 如何将 GIT 存储库导出到 TFS 显然
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 如何修复 pgbackups 错误:备份 url 无效?

    我正在尝试按照迁移到 Cedar 的说明进行操作 除了我进行了重大重写 因此这不是前一个应用程序的分支 而是一个单独的分支 并停留在数据库迁移步骤 我安装了 pgbackup 和 heroku postgresql 插件 但得到了这个结果

随机推荐