r - 仅为草稿预览部署 Netlify 站点
问题描述
我正在使用 Travis CI 从这个bookdown
GitHub 存储库构建一个站点并部署到gh-pages
分支。这种方法最有效,但我也想使用 Netlify 显示拉取请求的草稿预览。到目前为止,Netlify 部署通知正在对传入的源文件做出反应,而不是 Travis 正在构建的 HTML 文件。Netlify 预览版来得太早,页面是空白的。
编辑:工作流程
在这个特定的项目中,我们有一堆源文件,它们最终会为网站生成 HTML 文件。master
分支只有源代码,分支gh-pages
只有 HTML。我正在使用 Travis 使用源代码编译 HTML master
,然后将其推送到gh-pages
. 这对我自己的开发非常有用,因为它可以自动化 10 分钟的站点生成过程。
我希望使用 Netlify 为来自开源社区的合作者和外部志愿者的拉取请求启用站点预览。我画的东西如下。
- 外部开发人员从https://github.com/ropenscilabs/drake-manual的主分支分叉源并进行一些更改。
- 然后,开发人员提交一个拉取请求,将更改的源文件合并到上游主分支中。在此过程中不一定会生成 HTML。
- Travis CI 从 fork 构建 HTML 文件,但由于拉取请求尚未获得批准,它不会提交
gh-pages
或推送到 GitHub。相反,它将 HTML 文件直接发送到 Netlify。 - Netlify 接收 HTML,生成预览,并使用 incominb webhook 通知 GitHub 拉取请求。
我意识到对 Travis 环境变量的安全限制使部分原因变得不可能,这是正确的。但这是我最终希望实现的那种自动化部署。
解决方案
免责声明:我为 Netlify 工作
Netlify 的构建通知只能反映 Netlify 的构建 - 如果其他构建并行运行,我们将无法在我们的通知中考虑 Travis 的状态。也许您可以重新配置我们的 CI,而不是使用 github 的基于提交的 webhook 来通知 Netlify 进行构建,而是使用来自 Travis 的一个在 Netlify 上启动构建?然后 Netlify 的构建将在他们的构建结束后开始。为此,您可以从 GitHub 中删除构建钩子,而是使用传入的 webhook,您可以为每个分支配置一个,尽管您可能需要 Travis 的一些逻辑来决定如果您使用多个分支时通知哪个。您可以通过 API 以编程方式配置它们(https://open-api.netlify.com/#!/default/createHookBySiteId) 但我们很乐意在帮助台中提供有关更逐步 API 使用的建议
如果这很麻烦(例如,您有很多短期使用的分支),那么我知道这可能不是一个很好的解决方案。在这种情况下,我可能会在社交上解决问题,只是训练我的开发团队在 Travis 检查完成之前不要查看部署预览:)
由于用例的发展,我在评论中给出了更好的答案,我将在这里描述:
您可以选择部署 Travis 使用我们的命令行实用程序netlifyctl构建的文件。这会获取您网站的副本并将文件发送给我们,并且是可编写脚本的。您可以选择立即发布这些结果(“通过 Travis 的测试,我们已准备好上线”)netlifyctl deploy
或选择发布一个草稿部署,您可以在部署预览 URL ( https://hash--sitename ) 上浏览该部署草稿.netlify.com)使用netlifyctl deploy -d
.
这并没有解决关于提交状态通知的最初担忧,因为我们只发送那些用于我们构建的 git 支持的部署,但它确实允许您发布已知良好的部署并netlifyctl deploy
输出该 URL ( https://hash- -sitename.netlify.com)运行时,这样您就可以用它“做某事”,例如制作一个通知,该通知也是从构建+发送到 netlify 的过程中生成的,例如 slack 或电子邮件。
推荐阅读
- java - Java:修复日期对象中不正确的时区
- python - pd.set_option('display.max_rows', ..) 即使在
- java - 处理地图列表
> 在 Java 8 中 - react-native - 如何在react-native中的文本组件上显示模态中的选定值
- facebook - 使用已生成的访问令牌登录 Facebook 的 Graph API?
- java - XML 文档 - 检查父节点,然后遍历文档
- amazon-cloudformation - AWS CloudFormation Parameter values specified for a template which does not require them
- python - AttributeError:“Checkbutton”对象没有“取消选择”属性
- solr - 将文档从索引转换为适合包含在 SolrQueryResponse 中的 SolrDocument 的方法
- c# - 需要在通过wpf中的函数打开的网页中输入username的值