研发效率提升-利用 travis 实现应用自动部署到 google compute engine 的实践

目标

实现 git push 后,自动将代码发布到 google 云服务器 compute engine。其它服务器同理。

准备1-免密登录操作步骤

原理

要想通过 travis 在执行服务器得脚本首先得登陆到我们的服务器,但是在 travis 不像交互式终端。一般利用用户名和密码登陆是需要输入用户名,密码的,但是 travis 里面没有提供与用户交互的界面,当然这也与自动化不符,所以我们只有利用其他方式登陆–SSH 免密登陆

SSH 的登陆原理大家可以看这个:SSH 公钥登陆原理。大概过程就是,在客户端生成一个公钥/私钥对,将公钥内容保存到服务器 ~/.ssh/authrized_keys 中,然后客户端发起连接请求时,服务器发送一个字符串给客户端,客户端用本地的私钥对字符串进行加密然后发送给服务器,服务器将收到的加密字符串用公钥解密,如果能解密成功就登陆成功。

这里的公钥/私钥对就是登陆的关键,我们不能直接操作 travis 服务器,在上面生成公钥/私钥对,所以按照上面正常的流程就走不通,这时候就需要让 travis 伪装成一个受信的客户端去连接。也就是我们需要有一对公钥/私钥对,公钥已经保存在我们的 Linux 服务器中,私钥保存在某个 travis 能访问到的地方,在必要的时候用这个私钥去连接服务器,这里我们可以把私钥放在 git 代码仓库中,但是直接把私钥放代码中不安全,所以travis 提供了对私钥进行加密的功能,我们可以把私钥加密之后放在代码仓库,在登陆的时候 travis 解密该私钥用于连接。

了解了大概原理,接下来就是具体操作。

1、在 root 用户下创建新用户

#新建用户
useradd user1
#修改密码(应该不是必要,但是万一以后需要用密码登陆呢),按照提示设置密码。
passwd user1
#为用户添加添加权限
vim /etc/sudoers

找到#Allow root to run any commands anywhere这一段注释,在下面新增一行:

user1  ALL=(ALL)   ALL

2、生成公钥/私钥对

#切换至用户user1,
su user1
cd ~
#一致默认即可
ssh-keygen -t rsa

3、将生成的公钥添加为受信列表

cd .ssh/
cat id_rsa.pub >> authorized_keys
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*

4、测试免密

#在.ssh目录下新增配置文件 config
vim config

config 内容如下

Host test
HostName [服务器ip]
User user1
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa

5、坑点

1)添加非 root 用户执行命令权限,否则报无权限

vim /etc/sudoers

找到#Allow root to run any commands anywhere这一段注释,在下面新增一行:
```shell
user1  ALL=(ALL)   ALL

准备2-安装 travis 客户端

1、安装 rvm

具体参考:https://rvm.io/rvm/security

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg2 --import-ownertrust
echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg2 --import-ownertrust
curl -sSL https://get.rvm.io/  | bash -s stable --ruby

2、安装 ruby

rvm install ruby

3、安装 travis 命令行工具

安装 travis 命令行工具.

sudo yum install -y gcc ruby-devel zlib-devel
gem install travis

4、添加加密的私钥至代码仓库

用 travis 命令行工具登录 travis 服务器,生成加密后的私钥,保存在 github 仓库。travis 用私钥与服务器建立可信连接,从而实现免密登录

travis login
git clone [ github 代码仓库地址 ]
cd [ 仓库项目名]
travis encrypt-file ~/.ssh/id_rsa --add

运行以上命令,在 .travis.yml 中生成如下配置:



并且生成加密秘钥文件,id_rsa.enc

5、坑点

1)curl 安装必须要 key 受信,运行以下3个命令

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499
BDB
echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg2 --import-ownertrust
echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg2 --import-ownertrust

2)安装 travis 命令行工具前安装如下:

sudo yum install -y gcc ruby-devel zlib-devel

3) .travis.yml 生成的加密私钥配置:

当前路径需要去掉'',另外为了防止 ssh 时还需输入密码,需添加 addons 属性


准备3-安装 docker

1、安装 docker

#安装 Docker
sudo yum -y install docker

#启动 Docker 后台服务
sudo service docker start

#设置开机自启动
sudo systemctl enable docker

#添加 docker group
sudo groupadd docker

#将用户加入该 group 内
sudo usermod -aG docker user1

#重启服务
sudo service docker restart

2、坑点

1)非 root 用户没有权限运行 docker 命令,需要添加到 docker 用户组,命令如下:

#添加 docker group
sudo groupadd docker

#将用户加入该 group 内
sudo usermod -aG docker user1

#重启服务
sudo service docker restart

最终效果

提交代码

git commit -a
git push

提交代码后,触发运自动部署,效果如下:



从此提交代码后,几分钟后自动发布到 google cloud,相当方便,希望以上采坑对各位有所帮助

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 在敏捷开发中,软件项目在构建初期...
    null_fca6阅读 3,743评论 0 1
  • 前言 文中首先解释加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的...
    sunny冲哥阅读 2,976评论 0 2
  • 数字证书原理 - 无恙 - 博客园 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明...
    拉肚阅读 1,657评论 0 3
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    sunny冲哥阅读 1,364评论 0 3
  • 转自:https://blog.51cto.com/3381847248/2066599 一、ssh详解 1、什么...
    950545c4cd64阅读 50,701评论 0 6