Travis-ci远程部署到服务器

持续集成

Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。

目标

修改代码push之后可以自动完成远程服务器端代码更新,重启。

Django站点托管在github,远程服务器从github同步代码
服务器已经配置好Nginx+uWSGI

我的目的只是远程服务器可以拉取最新代码并重启uwsgi服务就可以了
实现流程是:
代码变动push到github ==> travis-ci自动构建,测试 ==> 测试通过,登录服务器 ==> 拉取github最新代码,重启uwsgi

关键在于需要从travis远程ssh登录服务器
1. 首先在本地生成ssh密钥对,保存为id_rsa_deploy,id_rsa_deploy.pub

ssh-keygen -t rsa -C "deploy_key"

2. 将公钥复制到远程服务器的authorized_keys文件上

ssh-copy-id -i ~/.ssh/id_rsa_deploy.pub ubuntu@123.123.123.123

3. 将私钥加密传输到travis,解决ssh登录的加密问题
在本机主机安装travis,可能需要更换gem源

# 更换gem源
gem sources -l
gem sources --add https://gems.ruby-china.org/ --remove 

sudo gem install travis

可能出现构建失败,安装依赖ruby-devsudo apt install ruby-dev

安装完成后登录travis,使用github账号

travis login --auto

目录切换到仓库根目录,生成加密文件

travis encrypt-file ~/.ssh/id_rsa_deploy --add

此时会生成加密文件id_rsa_deploy.enc,添加--add参数会在.travis.yml文件添加如下解密内容

openssl aes-256-cbc -K $encrypted_2bc13221a680_key -iv $encrypted_2bc13221a680_iv -in id_rsa_deploy.enc -out ~/.ssh/id_rsa_deploy -d

将解密文件的放到~/.ssh/id_rsa,并修改文件权限chmod 600 ~/.ssh/id_rsa
另外,在使用ssh登陆的时候会确认主机信息,travis-ci自动化运行无法进行交互操作,所以在.travis.yml中添加以下内容跳过确认:

addons:
    ssh_known_hosts: 123.123.123.123

接下来就可以通过ssh登录服务器进行拉取操作。

4. .travis.yml文件
在可以进行ssh登陆之后就可以进行服务器端的操作

after_success:
- ssh ubuntu@123.123.123.123 'cd ~/projects/proj && git pull && pkill uwsgi'

从travis远程ssh登录服务器,切换到工程目录,拉取最新代码,重启uwsgi
也可以通过sh脚本运行

ssh -tt ubuntu@123.123.123.123 < run.sh

-tt是强制分配一个伪终端进行服务器端的操作。比如需要切换到服务器的虚拟环境,进行python manage.py migrate

.travis.yml文件可以设置环境变量env:,不能公开的环境变量可以在Travis网站的仓库设置页进行设置,脚本内部可以使用这些环境变量。
这里写图片描述

完整的.travis.yml文件

language: python
python:
- '3.6'
branches:
    only:
    - master
env:
- DJANGO=2.0
install:
- cd proj/
- pip install -r requirements.txt
script:
- python manage.py test users.tests.UserTestCase

before_install:
- openssl aes-256-cbc -K $encrypted_2bc13221a680_key -iv $encrypted_2bc13221a680_iv
  -in id_rsa_deploy.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
  # - cp .travis/ssh_config ~/.ssh/config
addons:
    ssh_known_hosts: 123.123.123.123
after_success:
- ssh -tt ubuntu@123.123.123.123 < run.sh

完成一键部署,只需要本地修改代码push,自动拉取,重启。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值