从子文件夹自动部署heroku
Posted
技术标签:
【中文标题】从子文件夹自动部署heroku【英文标题】:Automated heroku deploy from subfolder 【发布时间】:2017-01-04 23:00:11 【问题描述】:我知道你可以从 github 自动部署到 heroku,但我还没有找到一种方法只将一个子文件夹从 github 推送到 heroku。
从命令行我知道可以这样做:
git subtree push --prefix <subfolder> heroku master
但是,我想知道是否有一种方法可以使用 github 与 heroku 的集成,以便在将提交添加到分支时自动拉取特定的子文件夹。
【问题讨论】:
【参考方案1】:2018 年更新!要使用 heroku 启用自动部署,您需要对要部署的 github 存储库具有 admin 访问权限。
在 Heroku 仪表板中:
步骤 1) - 将 github 存储库连接到 Heroku
在“部署”选项卡中,滚动到“部署方法”并连接您的 Github 帐户。找到回购并点击连接。 heroku 现在应该在你的 github 中被授权为 Oauth 应用程序。
如果你找不到 repo: 要么是你的 github 没有授权 Heroku,要么你没有创建这个 repo,需要确保你有管理员权限。如果这不可行,请转到 Heroku Dashboard 中的访问选项卡并将管理员添加为协作者,邀请 repo 管理员加入您的 heroku 应用程序。然后管理员登录 heroku 并在此处完成第 1 步。之后您可以完成以下步骤。
步骤 2) - 将 Heroku Config Var PROJECT_PATH 设置为您的服务器文件夹
在“设置”选项卡中,设置一个配置变量来告诉 Heroku 找到您要部署的服务器代码的路径。
示例: 假设您的仓库名称是 MyRepo,它有 2 个子文件夹。 back-end
包含一个 Node.js 服务器,front-end
包含一个 React 应用程序。你的 github 目录如下所示:
MyRepo/front-end/package.json
MyRepo/back-end/package.json
然后您应该将您的配置变量设置为左侧框中的PROJECT_PATH
和右侧框中的back-end
。
步骤 3) - 设置一个 Heroku Buildpack 来部署 PROJECT_PATH 文件夹
再次在“设置”选项卡中,您需要添加一个 Buildpack,它会告诉 heroku 查找您的文件夹,而不是部署 repo 根目录。那里应该已经有 1 个 buildpack 来告诉 heroku 它是什么类型的服务器(javascript/node.js、python/django 等)。
输入此 url 以添加 buildpack https://github.com/timanovsky/subdir-heroku-buildpack.git 并确保它位于 buildpack 链的顶部(拖动左侧的行使其高于您添加的任何其他 buildpack。
步骤 4) - 启用自动部署
在“部署”选项卡中,滚动到“自动部署”并单击黑色按钮以启用自动部署
自动部署完成!现在检查构建日志并确保没有任何错误
【讨论】:
非常感谢您使用 heroku 网站而不是命令行 前端如何到达后端? @LupyanaMbembati 本指南与在多目录 github 存储库中持续部署单个目录严格相关。如果你想连接前端和后端,你可以使用一个 heroku 管道或多个 heroku 应用程序,为不同应用程序提供前端和后端服务,并使用 REST 连接两者。我个人将 netlify 用于前端,将 heroku 用于后端,但有时我喜欢将所有代码放在一个存储库中。 如果我能给这两个赞成票,我会的。效果很好! 您好,我如何使用 heroku 管道连接前端和后端 - 如果我在一个带有上述两个文件夹的存储库中上传所有内容? @noxasaxon【参考方案2】:我能够让它工作。我有一个带有 Python Flask 应用程序的 server
子文件夹,我想使用 GitHub 集成自动部署它。
Heroku 使用构建包来检测项目的语言和框架。更多关于 here.
我找到了我的 buildpack here 的源代码。然后你只需要看看检测脚本。对于 python 它checks requirements.txt
文件,所以我使用ln -s server/requirements.txt requirements.txt
做了一个符号链接。
我的 Procfile 如下所示:web: gunicorn --pythonpath server/api app:app
。
现在一切正常!
【讨论】:
【参考方案3】:为了从子文件夹进行自动部署,我所做的是在 GitHub 中创建一个新分支并推送 JUST 子文件夹,然后将 Heroku 设置为自动部署到该分支。
使用git subtree push --prefix <subfolder> origin <branch>
将子文件夹推送到该分支
【讨论】:
值得注意的是,这会导致依赖于同级包/工作区的应用程序出现问题。 值得注意的是,这是 4 年前的解决方案,应该与一粒盐一起服用。 抱歉,如果我的语气充满敌意,请在此处留下评论,因为今天在谷歌上搜索此问题的解决方案会导致(当前/迄今为止)使用git subtree x
。认为对于考虑它的其他流浪者来说值得一提。【参考方案4】:
到目前为止,部署子目录最简单的方法是使用 Netlify -- 登录,然后将根文件夹拖到“站点”下的拖放区域,然后在设置 -> 构建和部署 -> 持续部署 - > 构建设置(首先将 Netlify 连接到 Github 存储库)您将在基本目录字段中输入子目录名称(无斜杠),然后在构建命令字段中输入 CI= npm run build
,最后在发布目录字段中输入 yourSubdirectoryName/build
。保存然后触发另一个部署。
【讨论】:
【参考方案5】:我认为现在 noxasaxon 的这个答案存在问题
在第 2 步)中,您不应在 PROJECT_PATH 中放置 MyRepo/front-end/package.json
。但是在路径变量中只是front-end
,它会起作用。更多信息在这里https://github.com/timanovsky/subdir-heroku-buildpack/issues/5
【讨论】:
【参考方案6】:测试这个解决方案:
在环境变量集中
PROJECT_PATH
到
<repo relative path to the subfolder>
为什么?我注意到了
git subtree push --prefix <subfolder> Heroku master
会自动执行此操作,Heroku 很有可能会执行此操作来设置子文件夹的路径。 有了这个,您可以将 repo 设置为自动部署并声明子文件夹路径。他们真的应该努力使这一点更加明显。
【讨论】:
以上是关于从子文件夹自动部署heroku的主要内容,如果未能解决你的问题,请参考以下文章
当我将 Django 应用程序部署到 Heroku 时,为啥 collectstatic 不会自动运行?
烧瓶应用程序数据库数据会在一段时间后自动删除,这些数据部署在 heroku 中
如果我们部署了 Selenium + Java 用于测试自动化,当我们使用 Heroku 实现 CI/CD 流程时,我们会遇到任何障碍吗?