研发效率提升-利用 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,相当方便,希望以上采坑对各位有所帮助

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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