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

目標(biāo)

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

準(zhǔn)備1-免密登錄操作步驟

原理

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

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

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

了解了大概原理,接下來(lái)就是具體操作。

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

#新建用戶(hù)
useradd user1
#修改密碼(應(yīng)該不是必要,但是萬(wàn)一以后需要用密碼登陸呢),按照提示設(shè)置密碼。
passwd user1
#為用戶(hù)添加添加權(quán)限
vim /etc/sudoers

找到#Allow root to run any commands anywhere這一段注釋?zhuān)谙旅嫘略鲆恍校?/p>

user1  ALL=(ALL)   ALL

2、生成公鑰/私鑰對(duì)

#切換至用戶(hù)user1,
su user1
cd ~
#一致默認(rèn)即可
ssh-keygen -t rsa

3、將生成的公鑰添加為受信列表

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

4、測(cè)試免密

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

config 內(nèi)容如下

Host test
HostName [服務(wù)器ip]
User user1
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa

5、坑點(diǎn)

1)添加非 root 用戶(hù)執(zhí)行命令權(quán)限,否則報(bào)無(wú)權(quán)限

vim /etc/sudoers

找到#Allow root to run any commands anywhere這一段注釋?zhuān)谙旅嫘略鲆恍校?```shell
user1  ALL=(ALL)   ALL

準(zhǔn)備2-安裝 travis 客戶(hù)端

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、添加加密的私鑰至代碼倉(cāng)庫(kù)

用 travis 命令行工具登錄 travis 服務(wù)器,生成加密后的私鑰,保存在 github 倉(cāng)庫(kù)。travis 用私鑰與服務(wù)器建立可信連接,從而實(shí)現(xiàn)免密登錄

travis login
git clone [ github 代碼倉(cāng)庫(kù)地址 ]
cd [ 倉(cāng)庫(kù)項(xiàng)目名]
travis encrypt-file ~/.ssh/id_rsa --add

運(yùn)行以上命令,在 .travis.yml 中生成如下配置:



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

5、坑點(diǎn)

1)curl 安裝必須要 key 受信,運(yùn)行以下3個(gè)命令

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 生成的加密私鑰配置:

當(dāng)前路徑需要去掉'',另外為了防止 ssh 時(shí)還需輸入密碼,需添加 addons 屬性


準(zhǔn)備3-安裝 docker

1、安裝 docker

#安裝 Docker
sudo yum -y install docker

#啟動(dòng) Docker 后臺(tái)服務(wù)
sudo service docker start

#設(shè)置開(kāi)機(jī)自啟動(dòng)
sudo systemctl enable docker

#添加 docker group
sudo groupadd docker

#將用戶(hù)加入該 group 內(nèi)
sudo usermod -aG docker user1

#重啟服務(wù)
sudo service docker restart

2、坑點(diǎn)

1)非 root 用戶(hù)沒(méi)有權(quán)限運(yùn)行 docker 命令,需要添加到 docker 用戶(hù)組,命令如下:

#添加 docker group
sudo groupadd docker

#將用戶(hù)加入該 group 內(nèi)
sudo usermod -aG docker user1

#重啟服務(wù)
sudo service docker restart

最終效果

提交代碼

git commit -a
git push

提交代碼后,觸發(fā)運(yùn)自動(dòng)部署,效果如下:



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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 敏捷開(kāi)發(fā) 敏捷開(kāi)發(fā)以用戶(hù)的需求進(jìn)化為核心,采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開(kāi)發(fā)。 在敏捷開(kāi)發(fā)中,軟件項(xiàng)目在構(gòu)建初期...
    null_fca6閱讀 3,917評(píng)論 0 1
  • 前言 文中首先解釋加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用,以及數(shù)字證書(shū)的...
    sunny沖哥閱讀 3,195評(píng)論 0 2
  • 數(shù)字證書(shū)原理 - 無(wú)恙 - 博客園 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明...
    拉肚閱讀 1,773評(píng)論 0 3
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了加密算法的作用,以及數(shù)字證書(shū)的出現(xiàn)...
    sunny沖哥閱讀 1,508評(píng)論 0 3
  • 轉(zhuǎn)自:https://blog.51cto.com/3381847248/2066599 一、ssh詳解 1、什么...
    950545c4cd64閱讀 51,425評(píng)論 0 6

友情鏈接更多精彩內(nèi)容