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 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont
  • 如何使用 git 撤消所有空白更改

    我有一个 git 存储库 我在其中本地替换了很多文件 git status 现在显示许多修改的文件 有些是 真正修改过的 其他的只是行结尾不同 我希望那些仅通过行结尾不同的内容消失 git重置它们 但是 我似乎找不到 linux pipin
  • 如何为 MySQL 和 Postgres 编写不区分大小写的查询?

    我在本地运行 MySQL 数据库进行开发 但部署到使用 Postgres 的 Heroku Heroku 处理几乎所有事情 但我不区分大小写的 Like 语句变得区分大小写 我可以使用 iLike 语句 但我的本地 MySQL 数据库无法处
  • 设置单独的遥控器以仅推送和拉动子文件夹

    假设我有两个存储库 repo A and repo B 其中包含一个文件夹 其中的代码与存储库 A 中的代码类似 这实际上如何发生并不重要 但是好吧 让我们假设我刚刚从 A 复制了内容 现在我想要以下内容 就像我在 repo A 中习惯的那
  • 如何更改全局 git 设置以在拉取期间进行 git 合并

    目前 我的全局设置设置为在 git pull 期间执行变基操作 我希望它默认将其更改为 git merge 如何更改此设置 TL DR git config global pull rebase false 有点细节 Git 使用配置pul
  • 将代码从没有权限的存储库推送到私有存储库?

    我有一个来自外部存储库 我们称之为 ExRepo 的文件夹 我没有任何推送权限 我有一个名为 MyOwnRepo 的个人存储库 如何获取 ExRepo 并将其合并到 MyOwnRepo 中 我已经尝试过这个 C Users
  • Git 从 Netbeans 推送到 Gerrit

    我在将提交从 Netbeans 7 4 在 Linux 上 推送到 Gerrit 进行审查时遇到问题 我的git配置 core repositoryformatversion 0 filemode true logallrefupdates
  • git commit -m 与 git commit -am

    看起来很容易 但我就是不明白 我在我的应用程序的根目录中 这是我的工作流程 git add git commit m added a new feature some files changed git push heroku master
  • 更新discord.py后,“运行时警告:从未等待协程‘BotBase.load_extension’”

    我一年前制作并部署到 Heroku 的不和谐机器人一直工作到现在 然而 在更改了一些 cogs 并将 python 更新到版本 3 9 10 后 我在 Heroku 日志中收到以下警告 app worker 1 app m bot py 1
  • Mac 到 EC2 - 源代码控制三角问题 - git?同步?啥?

    我有一个日常 EC2 实例 事实上 请注意那些更改IP每次重新启动它们时 都会出现另一个问题 实例上有一个文件夹 我在文件夹 mysql express 等 中有一个简单的 比如说 节点项目 比方说 这是一个网站 那么在我的 Mac 上进行
  • 如何正确设置 Azure DevOps 和 GitHub 之间的双向同步

    我想通过执行以下操作在 Azure DevOps 和 GitHub 之间创建双向同步 使用 CI 触发器创建 Azure DevOps 管道 将更改从 Azure DevOps 存储库推送到 GitHub 中的分支 创建第二个管道 用于侦听
  • Git 用户配置文件 - 自定义忽略

    我们有一个由 5 名开发人员组成的团队致力于硬件项目 我们有一个 user config h 文件 其中包含每个用户的特定环境和偏好的 defines 例如他们使用的硬件版本 是否应该打开声音等 目前 该文件位于我们的 gitignore
  • 如何更新我的裸存储库?

    我创建了一个裸存储库来发布我的存储库 但我不知道如何使用主存储库的当前状态更新裸存储库 如果您想复制主存储库中的所有对象 请在主存储库中执行此操作 git push all
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • 防止在 Git 中签出

    我目前正在研究使用 Git 管理 OpenInsight 应用程序的源代码 由于 OI 代码存储在数据库表中 因此需要进行一定量的手动工作才能将源代码导出为文本 反之亦然 到目前为止 我已经成功地使用 Git 挂钩自动化了很多这项工作 但是
  • 如何让“git status”始终使用短格式?

    我想要git status始终使用短格式 git status short M file1 M dir file2 file untracked3 dir file untracked4 似乎不存在这方面的配置选项 并且git config
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • 本地分支显示在 GitHub 的“网络”视图上

    我们使用 Git 我们的工作流程由 dev 和 master 分支组成 它们位于 GitHub 和每个开发人员的本地存储库上 不会直接在 master 或 dev 上执行任何工作 而是在本地分支中执行工作 并且仅在 dev 上进行合并 然后
  • Visual Studio 2017/2019/2022 gitsync/pull/push/fetch 操作卡住,并且无法停止

    我从 Visual Studio 中的 Git Changes 选项卡启动同步 获取 拉取或推送 但操作只是挂起 没有选项可以停止它 我必须点击 X 才能关闭 Visual Studio 如果操作是同步的 它会在其他所有操作上打开一个模式对

随机推荐