当说到自动部署的时候,我很反感那些一上来就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项目的默认界面。

github pages与travis ci运作原理的更多相关文章

  1. GitHub搭配使用Travis CI 进行自动构建服务

    Travis CI (Continuous Integration)持续集成服务 用处:自动监控软件仓库,可以在代码提交后立刻执行自动测试或构建 1.在Github自己的仓库根目录里添加.travis ...

  2. [转]使用 Travis CI 部署你的 Hexo 博客

    之前使用Hexo的时候,都是在本地进行编译和部署的,平时使用的时候觉得没什么,只需要 hexo ghexo d 两步就可以把博客更新的内容推到GitHub Pages上.但是某些时候可能会遇到你的文件 ...

  3. 【Hexo】使用Hexo+github pages+travis ci 实现自动化部署

    目录 一.说明 二.成品展示 三.前期准备 本地安装 node.js 本地安装 git github 账号 创建仓库 travis ci 账号 四.安装 Hexo 五.使用 hexo 搭建博客 六.部 ...

  4. 利用Travis CI 让你的github项目持续构建

    Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...

  5. .NET Core+Selenium+Github+Travis CI => SiteHistory

    前言 总是三分钟热度的我折腾了一个可以每天自动截取指定网站页面并保存到Github的项目SiteHistory,感觉挺好(每次都这样). 想知道YouTube今天的首页长啥样么?点此查看 想知道You ...

  6. 博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署

    文章目录 完成Hexo主题安装和配置 基于Travis CI实现同步部署 参考内容 相关链接 待补充 完成Hexo主题安装和配置 如果您还没有安装Hexo环境,请参考Hexo文档安装,也给出这样两篇博 ...

  7. 利用Travis CI+GitHub实现持续集成和自动部署

    前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...

  8. 使用Travis CI自动部署Hexo博客

    自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...

  9. Travis CI Build Continuous Integration

    什么是持续集成 持续集成(Continuous Integration)是经常合并小的代码更改的实践,而不是在开发周期结束时合并大的更改.目的是通过以较小的增量开发和测试来构建更健康的软件.这就是Tr ...

随机推荐

  1. 什么是单点登录,php是如何实现单点登录的

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  2. vscod如何自定义 python虚拟环境

    参考文档:https://code.visualstudio.com/docs/python/environments 1.创建虚拟环境,cd到当前目录 py -3 -m venv env 2.Ctr ...

  3. JavaScript中的循环和闭包

    看一段比较经典的错误代码: // 希望获取页面上的所有div,在点击的时输出对应的编号 var oDom = document.querySelectorAll("div"); / ...

  4. Linux—修改ssh远程登录信息

    修改ssh远程登录端口 1.修改ssh服务的配置文件:/etc/ssh/sshd_config ,将 Port 22 改为 Port 3120 保存退出. [root@localhost ~]# vi ...

  5. 009.MongoDB分片群集部署

    一 前期准备 1.1 组件说明 MongoDB分片群集包含以下组件: shard:每个分片是分片数据的子集.从MongoDB 3.6开始,必须将分片部署为副本集. mongos:mongos充当查询路 ...

  6. Python入门基础学习(面向对象)

    Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  7. 【西北师大-2108Java】第八次作业成绩汇总

    [西北师大-2108Java]第八次作业成绩汇总 作业题目 面向对象程序设计(JAVA)--第10周学习指导及要求 实验目的与要求 (1)掌握java异常处理技术: (2)了解断言的用法: (3)了解 ...

  8. acwing 2 零一背包问题

    地址 https://www.acwing.com/problem/content/description/2/ 题目描述有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品 ...

  9. Windows10 安装grpc-go 详细步骤

    准备依赖 git clone https://github.com/grpc/grpc-go.git $env:GOPATH\src\google.golang.org\grpc git clone ...

  10. 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)

    找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...