热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

githubpages与travisci运作原理

当说到自动部署的时候,我很反感那些一上来就balabala说怎么操作的博文文章,照着别人的做法有样学样,经常会因为与自己项目实际情况不符而出现各种问题。比如说github和travis,首

  当说到自动部署的时候,我很反感那些一上来就balabala说怎么操作的博文文章,照着别人的做法有样学样,经常会因为与自己项目实际情况不符而出现各种问题。

  比如说github和travis,首先应该搞明白,他们之间是如何运作的。

  首先,github pages是集成在github里面,可以解析静态的文件,并渲染成页面的。所以最简单的github pages应该是这样,新建一个项目,项目里面包含一个index.html。在项目的settings中打开github pages。搞定!

  但问题是,我们很多的实际项目,比如vue-cli项目。不是一开始就有静态文件的,而是需要手动通过npm run build或yarn build来打包生成。可能有人会说:我本地可以配置静态文件的导出目录,将静态文件导出到github pages能识别的路径。比如根目录或者根目录下的docs文件夹,在本地先run build,然后再把静态文件push到github上,供github pages解析渲染。

  但如果要弄成这样,还叫自动化部署吗?还叫持续集成交付吗?所以问题的关键是:需要找到一个东西,可以帮我们run build,同时生成的静态文件也要放在github pages可以解析的路径里。程序员每次推代码只关心代码本身,不关心打包过程和静态文件应该存放在哪儿。

  github本身是没有这个环境来run build的,谁有呢?travis有。

  所以他们的运作过程是这样的:程序员往github上推了代码 --> travis检测了到程序员这一行为 -->拉取最新的项目代码到travis --> 在travis的虚拟机中对这个项目进行run build --> 生成静态文件 --> 将静态文件传回给github的可识别目录,供github pages解析渲染。

  说得直白一点:你推了项目到github上,travis把你的项目给克隆过去了,然后在travis的小黑屋的帮你打包静态文件,最后送还静态文件到你的github上。

  搞清楚了运作原理,接下来才是一些实施细节。

 

1,travis怎么知道程序员推了代码到github?

  travis与github是一对好基友,在travis的社区级官网(https://travis-ci.org/)里,可以用github账号登录,登录之后,即代表你的github对travis进行了Oauth授权,travis可以访问你的所有项目列表,同时,只要你手动打开监听开关,travis就可以监听指定项目的活动状态,比如有没有推代码。

 

 

2.监听到了github活动之后,诸如克隆代码,run build,返还静态文件这些操作细节在哪里配置?

  在github项目的根目录下新建一个.travis.yml的shell脚本文件,当travis监听到github项目活动时,就会在项目的根目录下找这个脚本文件,如果找到了,就执行文件里的内容。由于travis跟github是好基友,并不需要在你的项目中安装其他什么杂七杂八的东西来支持.travis.yml,直接新建即可。但注意必须严格起这个名字。下面是一个vue-cli项目的详细注解的shell脚本文件。

 

 

3.travis对github项目的读写操作需要授权,如何授权?

  在github/settings/developer settings/personal access tokens中,新建一个token,如下图:

  除了不准travis直接删掉我的github项目,其他的权限我都给了。生成之后在travis-ci.org中打开指定项目的settings,将token复制到到项目的环境变量中,并给他取个名字,如下图:

  比如我取的名字是GITHUB_TOKEN,那在.travis.yml执行的脚本里,通过$GITHUB_TOKEN就可以拿到这个授权码。

 

4.放到指定github路径中供github pages解析,那哪些路径才是有效的?

  在github的项目的settings中,可以看到pages一栏,可以看到合理的解析路径一共有以下几种:

  在这里我们选择第一种,为什么是gh-pages分支?因为travis在向github返还打包好的静态文件时,travis也是非常担心怕覆盖掉程序员写的代码,所以往master分支推还是往其他什么dev、develop、test分支推,只要是程序员自己建的分支,都有风险。这时候就需要有一个特定分支,这个分支不需要程序员自己建,而是travis来建,并且里面只存放静态文件,专门用于供github pages解析。这个travis默认新建的分支名,就叫gh-pages。在我的github项目中点开gh-pages分支,也可以看到这个分支的操作者是travis而不是我。

 

 

5.travis ci跑完后页面静态资源无法加载,报404错误?

  这个问题属于vue-cli项目的打包配置问题了。默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,如https://www.apps.com。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.apps.com/my-app/,则设置 publicPath 为 /my-app/所以要在vue-cli3.x项目的根目录下,新建一个vue.config.js文件配置一下publicPath。

  当然可以用“./”相对路径来实现,不过相对路径在一些场景中会有问题。比如当使用基于 HTML5 history.pushState 的路由时,或者当使用 pages 选项构建多页面应用时。所以还是不要用相对路径这种投机取巧的方法。在完成这一系列操作后,可以看到最终效果:一个vue-cli项目的默认界面。


推荐阅读
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • VUE中引用路径的配置
    在vue项目开发中经常引用JS、CSS、IMG文件。当项目较大时文件层级很多,导致路径很长,我们可以通过在bulidwebpack.base.conf.js设置简便的引用路径一、 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
author-avatar
暖心我在这_若惜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有