用Travis进行自动部署

Travis

因为项目部署在服务器, 每次改动一点都要上服务器重新pull和启动服务, 特别麻烦, 所以用了travis来进行自动部署

使用Travis CI 实现自动部署

Travis CI是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。Travis只能在GitHub项目上使用,只要项目有改动,Travis就会为其提供一个运行环境,执行测试、构建甚至部署任务。

为项目开启Travis

进入Travis, 使用GItHub账号登录,点击右上角的头像,进入Profile。选择项目,打开开关即可。

基本配置

点击项目名和开关之间的齿轮可以进入设置页,在这里你可以进行相关的配置,不过大多数情况下保持默认即可。

编写部署脚本

当仓库发生改动时可以让 Travis 自动执行一些脚本来重新启动服务以使改动生效

先在项目根目录创建 script/deploy.sh 文件, 写好要执行的命令, 然后留着给后面待用, 下面是用在我的项目中的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
echo ---------------------------------------------
echo login Server
echo ---------------------------------------------
ssh -i rsa root@118.89.65.154 << eeooff
echo ---------------------------------------------
echo stop uwsgi3
echo ---------------------------------------------
cd /root/Server/config
uwsgi3 --stop uwsgi.pid
echo ---------------------------------------------
echo git pull
echo ---------------------------------------------
cd /root/Server
git pull
echo ---------------------------------------------
echo start uwsgi3
echo ---------------------------------------------
cd /root/Server/config
uwsgi3 --ini s_uwsgi.ini
eeooff
echo ---------------------------------------------
echo logout server
echo ---------------------------------------------

可以把两个 eeooff 中的命令换为你要执行的
ssh 命令对应的参数改为你实际的参数

编写.travis.yml

这个配置文件描述了Travis将如何工作, 可以参阅官方文档, 下面给出自己配置的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
language: python
python:
- 3.6
install: true
addons:
ssh_known_hosts: 118.89.65.154
before_install:
- openssl aes-256-cbc -K $encrypted_b0e4a20bf5fb_key -iv $encrypted_b0e4a20bf5fb_iv
-in id_rsa.enc -out id_rsa -d
- eval "$(ssh-agent -s)"
- chmod 600 id_rsa
- ssh-add id_rsa
script:
- pwd
- bash script/deploy.sh
  • language 代表执行命令的语言
  • before_install 表示下面的命令会在 install 之前执行, 这里主要是解密ssh key文件
  • install 表示安装依赖的命令, 这里只是部署, 不需要依赖, 所以设置为true
  • script 执行脚本命令完成部署

加密你的ssh key

linux 环境下进行下面的操作

安装 travis

1
2
3
4
5
6
7
# 安装ruby
sudo apt install ruby ruby-dev
# 安装travis
gem install travis

# 测试
travis version

登录 travis

1
2
3
4
5
# 登录Travis
travis login
# 确认登录
travis whoami
# > You are xxx

加密私钥文件

1
2
# 加密文件
travis encrypt-file key_file_name --add

加密完后,当前目录下会增加一个key.enc文件,即key加密后的文件。请注意,不要将key上传到GitHub, 取而代之的是key.enc, 然后通过上面的 before_install 钩子会帮我们解密成真正的私钥文件来帮助我们登录自己的服务器进行操作(当然要记得替换成自己的环境变量)

至于私钥怎么生成和配置, 可以看一下这个

自动部署效果

给项目加个小图标

travis 点击小图标出来

然后在项目readme添加上下面这样的语句就会显示出来了

1
[![Build Status](https://travis-ci.org/code-flows-in-you/Server.svg?branch=master)](https://travis-ci.org/code-flows-in-you/Server)

参考

travis
ssh密钥登录