0%

使用Travis CI部署项目到服务器

前言

《Hexo配置Travis CI自动发布》一文中,我们学习了使用travis-ci构建发布hexo项目的方法。

因为项目的特殊性,所以发布时只是把代码push到了git仓库,并没有把代码发布到我们自己的服务。本文,我们就来学习一下怎样通过travis-ci,把项目发布到我们自己的服务器。

需求:
已知hexo项目部署在github,百度抓取不到github的内容,因此我们想要在自己的服务器也部署一份代码,国内的流量打到自己的服务器。实现国内流量 -> 阿里云服务器,国外流量 -> github pages。
配置 hexo-deploy ,在发布时会同时发布静态页面到 voidking.github.iovoidking
阿里云服务器上有项目 /opt/nginx/work/voidking ,项目仓库为 voidking
现在想要实现的是,当使用 hexo-deploy 之后,阿里云服务器上的代码能够自动更新。

思路

给 voidking.github.io 项目配置travis-ci,当静态页面更新完成后,在阿里云服务器上执行 git pull。
中间需要解决的主要问题是: travis-ci 访问阿里云服务器的权限问题。
另外,因为 voidking.github.io 项目是线上项目,所以我们创建一个 travis-test 项目用来测试travis-ci的配置。

配置travis-ci

服务器密钥配置

1、创建一个用户专门用来更新代码

1
2
3
useradd -m voidking -s /bin/bash
passwd voidking
chown voidking -R /opt/nginx/work/

2、生成密钥

1
2
3
su voidking
cd ~
ssh-keygen

执行完之后,.ssh目录下生成了 id_rsa 和 id_rsa.pub。

3、使密钥生效

1
2
3
ALI_IP="8.136.13.58"
ssh-copy-id -i .ssh/id_rsa.pub voidking@${ALI_IP}
ssh voidking@${ALI_IP}

安装travis client

直接安装travis破坏服务器环境,因此最好使用Docker安装travis。
1、运行travis容器

1
2
3
docker pull ruby:slim
docker run --name travis -it -d ruby:slim /bin/bash
docker exec -it travis /bin/bash

2、容器内安装travis client

1
2
3
# gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem install travis
travis -h

travis-ci密钥配置

1、拷贝密钥到容器

1
2
docker cp /home/voidking/.ssh/id_rsa travis:/tmp
docker exec -it travis /bin/bash

2、登录travis-ci

1
2
cd /tmp
travis login --com --github-token xxxxxx

3、对id_rsa加密,生成id_rsa.enc;同时生成服务端解密命令

1
2
touch .travis.yml
travis encrypt-file id_rsa --add --com --repo=voidking/travis-test

详情参考Encrypting Files

执行完命令,会生成加密文件 id_rsa.enc,.travis.yml 中会被写入解密命令:

1
2
before_install:
- openssl aes-256-cbc -K $encrypted_f217180e22ee_key -iv $encrypted_f217180e22ee_iv -in id_rsa.enc -out id_rsa -d

travis.yml配置

1、访问Travis CI Pro,找到 voidking.github.io 项目,Settings,在Environment Variables一栏填入Name为GITEE_TOKEN,VALUE为gitee的access token。

2、在 travis-test 项目中放入 id_rsa.enc

3、在 travis-test 项目中创建 .travis.yml,内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sudo: false
language: python
python:
- 3.6
branches:
only:
- main # build main branch only

env:
global:
- ALI_IP: 8.136.13.58
- GIT_USER: voidking
- GITEE_PAGES_REPO: gitee.com/voidking/voidking.git

addons:
ssh_known_hosts:
- 8.136.13.58

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

script:
- ssh voidking@${ALI_IP} "cd /opt/nginx/work/voidking/ && git pull --force --quiet \"https://${GIT_USER}:${GITEE_TOKEN}@${GITEE_PAGES_REPO}\" master:master"

after_success:
- echo "deploy success"

4、提交代码

1
2
3
git add .
git commmit -m "添加travis.yml"
git push

5、验证
打开travis voidking/travis-test ,可以看到脚本已经成功执行。

登录阿里云服务器,git log查看代码版本,确实也已经更新到了最新版。nice!

  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-travis-ci-deploy-to-server/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~