资讯专栏INFORMATION COLUMN

Travis CI 自动化部署博客

voidking / 736人阅读

摘要:自动部署到远程服务器现在已经可以自动构建了,那么接下来的一步就是部署到远程服务器。最后,贴出我自己的,里面有关涉及个人隐私的部分我会注释并说明请替换成自己的登录和登录用户请替换成自己的服务器本文参考链接使用进行持续集成自动化部署博客

Travis CI 是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。

对于 GitHub 的集成 Travis 做得很好,与 Jenkis 不同,Travis 不需要自己在服务器部署服务,并且是高度集成 GitHub 的,所以对于开源项目还是非常友好的。

注册配置 Travis

注册成功,登录,然后添加自己的 GitHub 上的 repo

选择其中一个或多个你需要集成的项目,开启 build,也就是点击叉叉变成勾勾的过程。

假设现在已经对某个项目开启了 Travis,那么先去看看 Settings 里默认开启的那几项,根据自己实际需求进行设置,没什么特殊需求默认的设置就可以了。

接下来的步骤很清楚,官方也有配图说明:

添加 .travis.yml

说白了接下来的事情都是如何去写这个配置文件,因为 Travis 全是根据这个配置文件去执行相应动作的。

根据你的语言不同,配置也会有较大差异,因为我的博客使用 PHP 的流行框架 Laravel 写的,所以这里也拿它作为例子,官方给出的最精简的 PHP 配置文件是:

language: php

php:
  - 7.1.9
  - nightly
触发构建

接下来如上面所说的第三步,将这个 .travis.yml 文件提交到 GitHub,那么 Travis 就会自动触发构建任务。

我就知道第一次不会这么简单的,失败了。。。

报错原因是执行 phpunit 时提示:

PHP Warning:  require(/home/travis/build/stephencode/super-admin/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /home/travis/build/stephencode/super-admin/bootstrap/autoload.php on line 17

一看是自己项目的 composer 依赖包的 autoload.php 文件没找到,那应该是没有执行 composer up 之类的操作,结合网上找的资料,比较好的解决方式是在 install 层添加一行:

install:
  - composer install --prefer-dist --optimize-autoloader --quiet

这样就不会报上面这个错了,然后会报接下来的一个错。。。

1) TestsFeatureRouteTest::testBasicTest
RuntimeException: No application encryption key has been specified.

其实这个是我在 Laravel 里面的 phpunit.xml 没有配置好的缘故。将 补上就好,在 标签里,这个 key 你自己去生成。

在经过五六次 build failed 之后,总算天不负我了。

自动部署到远程服务器

现在已经可以自动构建了,那么接下来的一步就是部署到远程服务器。Travis 提供 after_success 来实现这步骤。

等等,我们要部署到远程服务器,那么势必需要让 Travis 登录到远程服务,那么登录密码怎么处理才能保证安全?这是首先要解决的问题,明文肯定是不行的。

加密登录密码

那看来先得解决这个问题,Travis Docs 里也帮我考虑到了这个避不开的问题的解决方案(Encrypting Files)

我们一起来实践一下:

首先通过 Ruby 的 gem 安装 travis

gem install travis

哎,重试了几次发现敲完这段 shell 如同石沉大海一般,屁都不放一个。。。就算开了代理还是纹丝不动,没办法只能换镜像了。

$ gem sources -l

*** CURRENT SOURCES ***

https://rubygems.org/

查看一下当前的镜像,这货(rubygems)国内出奇的难以访问,网上一搜国内的镜像源,Ruby China 的应该很显眼吧~

$ gem update --system
$ gem sources --add https://gems.ruby-china.org/

然后再查看一下 gem 镜像,确保只有 Ruby China 的 gem 源。

好了,现在可以愉快的安装 travis 了

$ sudo gem install travis

接下来让我们先在命令行中登录 Travis

$ travis login

We need your GitHub login to identify you.
This information will not be sent to Travis CI, only to api.github.com.
The password will not be displayed.

Try running with --github-token or --auto if you don"t want to enter your password anyway.

Username: xxx@xxx.xxx
Password for xxx@xxx.xxx: ***
Successfully logged in as demo!

会要求你输入 GitHub 的账号密码,这个是走 GitHub 的服务,所以不用担心密码泄露。

将目录切换到项目根目录下,也就是 .travis.yml 目录下。因为我们需要让 travis 远程登录自己的服务器,所以需要将本地保存着的 SSH 私钥进行加密处理(默认你也是通过 SSH 免密登录的模式哦,不清楚可以参考我这一篇 《SSH 免密登录》)。

$ travis encrypt-file ~/.ssh/id_rsa --add

Detected repository as xxx/xxx, is this correct? |yes| yes
encrypting ~/.ssh/id_rsa for xxx/xxx
storing result as id_rsa.enc
storing secure env variables for decryption

Make sure to add id_rsa.enc to the git repository.
Make sure not to add ~/.ssh/id_rsa to the git repository.
Commit all changes to your .travis.yml.

这个时候去看一下当前目录下的 .travis.yml,会多出几行

before_install:
  - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
  -in id_rsa.enc -out ~/.ssh/id_rsa -d

为保证权限正常,多加一行设置权限的 shell

before_install:
  - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
    -in id_rsa.enc -out ~/.ssh/id_rsa -d
  - chmod 600 ~/.ssh/id_rsa

还有一点可能会用上,因为 travis 第一次登录远程服务器会出现 SSH 主机验证,这边会有一个主机信任问题。官方给出的方案是添加 addons 配置:

addons:
  ssh_known_hosts: your-ip

到这里,travis 就能够免密登录自己的远程服务器啦~

自动部署

既然已经可以免密登录服务器了,那么写一个部署脚本,在登录时执行该脚本就可以了,一切就是这么顺其自然就好~

写部署脚本

我写 Shell 脚本的水平很有限,这边也就给出一个最精简的 Demo 可以参考一下:

#!/bin/bash
cd /path/to/your-project
git pull origin master
echo "travis build done!"
执行部署脚本

.travis.yml 配置文件中写下这么两行:

after_success:
  - ssh your-user@your-ip "./your-shell-script"

记得将其中的 your-useryour-ipyour-shell-script 都替换成自己的哦!

高大上标志

辛苦奋斗了一天,总是希望别人看到自己的劳动成果的,除了写这篇文章意外还能做点什么呢?那自然是给自己的这个项目在 GitHub 上的 README.md 中显示一个高大上的 build:passing 标志,就像这样:

总结

这次过程中基本都是从不会到会的一个学习过程,从中了解到不少新东西,也发现一些自己的短板,比如写 shell 脚本。。。

最后,贴出我自己的 .travis.yml,里面有关涉及个人隐私的部分我会注释并说明:

language: php

php:
  - 7.1.9
  - nightly

env:
  - APP_DEBUG=false

before_install:
  - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv
    -in id_rsa.enc -out ~/.ssh/id_rsa -d
  - chmod 600 ~/.ssh/id_rsa

install:
  - composer install --prefer-dist --optimize-autoloader --quiet

notifications:
  email:
    recipients:
    - stephenfxl@gmail.com
    on_success: always
    on_failure: always

script:
  - phpunit -c phpunit.xml --coverage-text

after_success:
  - ssh xxx@xxxx.xxxx.xxxx.xxxx "./travis_build" # 请替换成自己的登录IP和登录用户

addons:
  ssh_known_hosts: xxxx.xxxx.xxxx.xxxx # 请替换成自己的服务器IP

本文参考链接:

使用Travis进行持续集成

Jekyll + Travis CI 自动化部署博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25857.html

相关文章

  • InkPaper 最佳实践——使用 Travis CI 自动部署 Ink 博客到 GitHub pa

    摘要:使用可以解决自动构建和自动部署的问题这样能让我们更加专注书写。当仓库激活服务,当你的博客有新的修改提交到的时候,会通知。在里为对应的仓库添加,用于后续使用这样可以将通过生成的静态博客源文件推送到分支。 showImg(https://segmentfault.com/img/bVMhse?w=800&h=300); 简介 纸小墨(InkPaper)是一个GO语言编写的开源静态博客构建工...

    zhunjiee 评论0 收藏0
  • Travis CI + github + hexo 动化部署

    摘要:是目前新兴的开源持续集成构建项目,采用格式,简洁清新独树一帜。目前大多数的项目都已经移入到的构建队列中。测试提交代码到中查看部署情况至此,整个部署完成,赶快自己尝试一下吧 Travis CI是目前新兴的开源持续集成构建项目,采用yaml格式,简洁清新独树一帜。目前大多数的github项目都已经移入到Travis CI的构建队列中。Travis-CI会同步你在GitHub上托管的项目,...

    iliyaku 评论0 收藏0
  • Hexo 博客终极玩法:云端写作,自动部署

    摘要:配置触发方式一般会得到这么个语雀配置配置一个仓库的可以选择所有更新触发或者主动触发,主动触发的意思即发布需要勾选一个选项才会触发。 Hexo + Github + 语雀 + yuque-hexo +travis-ci+severless 打造全自动持续集成个人博客,云端写作,自动部署,完美体验~ 一、Hexo+Github 的痛点 1.为啥要用hexo+github? 作为一个程序猿,...

    AlphaWallet 评论0 收藏0
  • Hexo 博客终极玩法:云端写作,自动部署

    摘要:配置触发方式一般会得到这么个语雀配置配置一个仓库的可以选择所有更新触发或者主动触发,主动触发的意思即发布需要勾选一个选项才会触发。 Hexo + Github + 语雀 + yuque-hexo +travis-ci+severless 打造全自动持续集成个人博客,云端写作,自动部署,完美体验~ 一、Hexo+Github 的痛点 1.为啥要用hexo+github? 作为一个程序猿,...

    EsgynChina 评论0 收藏0
  • travis和git hook搞个一键部署

    摘要:一切看似妥当,但是频繁的调整以及部署自然成了头疼的问题。叫作部署的大问题由于我比较菜,所以没有写测试模块。为什么因为绝大多数都是党用来部署的啊。。。经过思考,原来在这里我们需要将部署工序做一个调整,同时增加步。。。 前言 在自己的vps上做博客系统已经有一段时间了,期间也是磕磕碰碰遇到不少问题,如今也算是有个基础版本能用。可是vps上只放一个博客有点浪费了,而且博客系统也不光是用来写文...

    archieyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<