从子文件夹自动部署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 &lt;subfolder&gt; origin &lt;branch&gt; 将子文件夹推送到该分支

【讨论】:

值得注意的是,这会导致依赖于同级包/工作区的应用程序出现问题。 值得注意的是,这是 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 不会自动运行?

将CircleCI更改部署到Heroku

烧瓶应用程序数据库数据会在一段时间后自动删除,这些数据部署在 heroku 中

如果我们部署了 Selenium + Java 用于测试自动化,当我们使用 Heroku 实现 CI/CD 流程时,我们会遇到任何障碍吗?

如何直接从我的 Gitlab 存储库部署到 Heroku

Heroku 在通过 Django 部署之前构建 React 应用程序