研發(fā)效率提升-利用 travis 實現(xiàn)應用自動部署到 google compute engine 的實踐

目標

實現(xiàn) git push 后,自動將代碼發(fā)布到 google 云服務器 compute engine。其它服務器同理。

準備1-免密登錄操作步驟

原理

要想通過 travis 在執(zhí)行服務器得腳本首先得登陸到我們的服務器,但是在 travis 不像交互式終端。一般利用用戶名和密碼登陸是需要輸入用戶名,密碼的,但是 travis 里面沒有提供與用戶交互的界面,當然這也與自動化不符,所以我們只有利用其他方式登陸–SSH 免密登陸

SSH 的登陸原理大家可以看這個:SSH 公鑰登陸原理。大概過程就是,在客戶端生成一個公鑰/私鑰對,將公鑰內容保存到服務器 ~/.ssh/authrized_keys 中,然后客戶端發(fā)起連接請求時,服務器發(fā)送一個字符串給客戶端,客戶端用本地的私鑰對字符串進行加密然后發(fā)送給服務器,服務器將收到的加密字符串用公鑰解密,如果能解密成功就登陸成功。

這里的公鑰/私鑰對就是登陸的關鍵,我們不能直接操作 travis 服務器,在上面生成公鑰/私鑰對,所以按照上面正常的流程就走不通,這時候就需要讓 travis 偽裝成一個受信的客戶端去連接。也就是我們需要有一對公鑰/私鑰對,公鑰已經保存在我們的 Linux 服務器中,私鑰保存在某個 travis 能訪問到的地方,在必要的時候用這個私鑰去連接服務器,這里我們可以把私鑰放在 git 代碼倉庫中,但是直接把私鑰放代碼中不安全,所以travis 提供了對私鑰進行加密的功能,我們可以把私鑰加密之后放在代碼倉庫,在登陸的時候 travis 解密該私鑰用于連接。

了解了大概原理,接下來就是具體操作。

1、在 root 用戶下創(chuàng)建新用戶

#新建用戶
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 用戶執(zhí)行命令權限,否則報無權限

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 用私鑰與服務器建立可信連接,從而實現(xiàn)免密登錄

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

提交代碼后,觸發(fā)運自動部署,效果如下:



從此提交代碼后,幾分鐘后自動發(fā)布到 google cloud,相當方便,希望以上采坑對各位有所幫助

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 敏捷開發(fā) 敏捷開發(fā)以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發(fā)。 在敏捷開發(fā)中,軟件項目在構建初期...
    null_fca6閱讀 3,786評論 0 1
  • 前言 文中首先解釋加密解密的一些基礎知識和概念,然后通過一個加密通信過程的例子說明了加密算法的作用,以及數(shù)字證書的...
    sunny沖哥閱讀 3,018評論 0 2
  • 數(shù)字證書原理 - 無恙 - 博客園 文中首先解釋了加密解密的一些基礎知識和概念,然后通過一個加密通信過程的例子說明...
    拉肚閱讀 1,679評論 0 3
  • 文中首先解釋了加密解密的一些基礎知識和概念,然后通過一個加密通信過程的例子說明了加密算法的作用,以及數(shù)字證書的出現(xiàn)...
    sunny沖哥閱讀 1,401評論 0 3
  • 轉自:https://blog.51cto.com/3381847248/2066599 一、ssh詳解 1、什么...
    950545c4cd64閱讀 50,932評論 0 6