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

目標(biāo)

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

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

原理

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

SSH 的登陸原理大家可以看這個:SSH 公鑰登陸原理高氮。大概過程就是慧妄,在客戶端生成一個公鑰/私鑰對,將公鑰內(nèi)容保存到服務(wù)器 ~/.ssh/authrized_keys 中剪芍,然后客戶端發(fā)起連接請求時塞淹,服務(wù)器發(fā)送一個字符串給客戶端,客戶端用本地的私鑰對字符串進(jìn)行加密然后發(fā)送給服務(wù)器罪裹,服務(wù)器將收到的加密字符串用公鑰解密饱普,如果能解密成功就登陸成功运挫。

這里的公鑰/私鑰對就是登陸的關(guān)鍵,我們不能直接操作 travis 服務(wù)器套耕,在上面生成公鑰/私鑰對谁帕,所以按照上面正常的流程就走不通,這時候就需要讓 travis 偽裝成一個受信的客戶端去連接冯袍。也就是我們需要有一對公鑰/私鑰對匈挖,公鑰已經(jīng)保存在我們的 Linux 服務(wù)器中,私鑰保存在某個 travis 能訪問到的地方康愤,在必要的時候用這個私鑰去連接服務(wù)器儡循,這里我們可以把私鑰放在 git 代碼倉庫中,但是直接把私鑰放代碼中不安全征冷,所以travis 提供了對私鑰進(jìn)行加密的功能择膝,我們可以把私鑰加密之后放在代碼倉庫,在登陸的時候 travis 解密該私鑰用于連接检激。

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

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

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

找到#Allow root to run any commands anywhere這一段注釋今穿,在下面新增一行:

user1  ALL=(ALL)   ALL

2缤灵、生成公鑰/私鑰對

#切換至用戶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腮出、測試免密

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

config 內(nèi)容如下

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

5、坑點

1)添加非 root 用戶執(zhí)行命令權(quán)限芝薇,否則報無權(quán)限

vim /etc/sudoers

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

準(zhǔn)備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 服務(wù)器晾嘶,生成加密后的私鑰妓雾,保存在 github 倉庫。travis 用私鑰與服務(wù)器建立可信連接垒迂,從而實現(xiàn)免密登錄

travis login
git clone [ github 代碼倉庫地址 ]
cd [ 倉庫項目名]
travis encrypt-file ~/.ssh/id_rsa --add

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



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

5机断、坑點

1)curl 安裝必須要 key 受信楷拳,運(yùn)行以下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 生成的加密私鑰配置:

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


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

1、安裝 docker

#安裝 Docker
sudo yum -y install docker

#啟動 Docker 后臺服務(wù)
sudo service docker start

#設(shè)置開機(jī)自啟動
sudo systemctl enable docker

#添加 docker group
sudo groupadd docker

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

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

2欢揖、坑點

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

#添加 docker group
sudo groupadd docker

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

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

最終效果

提交代碼

git commit -a
git push

提交代碼后浸颓,觸發(fā)運(yùn)自動部署物臂,效果如下:



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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛾狗,一起剝皮案震驚了整個濱河市晋涣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沉桌,老刑警劉巖谢鹊,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異留凭,居然都是意外死亡佃扼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蔼夜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兼耀,“玉大人,你說我怎么就攤上這事求冷×鲈耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵匠题,是天一觀的道長拯坟。 經(jīng)常有香客問我,道長韭山,這世上最難降的妖魔是什么郁季? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮钱磅,結(jié)果婚禮上梦裂,老公的妹妹穿的比我還像新娘。我一直安慰自己续搀,他們只是感情好塞琼,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禁舷,像睡著了一般彪杉。 火紅的嫁衣襯著肌膚如雪毅往。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天派近,我揣著相機(jī)與錄音攀唯,去河邊找鬼。 笑死渴丸,一個胖子當(dāng)著我的面吹牛侯嘀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谱轨,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼戒幔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了土童?” 一聲冷哼從身側(cè)響起诗茎,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎献汗,沒想到半個月后敢订,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡罢吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年楚午,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尿招。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矾柜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泊业,到底是詐尸還是另有隱情把沼,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布吁伺,位于F島的核電站饮睬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篮奄。R本人自食惡果不足惜捆愁,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窟却。 院中可真熱鬧昼丑,春花似錦、人聲如沸夸赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呼奢,卻和暖如春宜雀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背握础。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工辐董, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禀综。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓简烘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親定枷。 傳聞我的和親對象是個殘疾皇子孤澎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 敏捷開發(fā) 敏捷開發(fā)以用戶的需求進(jìn)化為核心,采用迭代依鸥、循序漸進(jìn)的方法進(jìn)行軟件開發(fā)亥至。 在敏捷開發(fā)中,軟件項目在構(gòu)建初期...
    null_fca6閱讀 3,755評論 0 1
  • 前言 文中首先解釋加密解密的一些基礎(chǔ)知識和概念絮供,然后通過一個加密通信過程的例子說明了加密算法的作用衣吠,以及數(shù)字證書的...
    sunny沖哥閱讀 2,988評論 0 2
  • 數(shù)字證書原理 - 無恙 - 博客園 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念,然后通過一個加密通信過程的例子說明...
    拉肚閱讀 1,662評論 0 3
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識和概念壤靶,然后通過一個加密通信過程的例子說明了加密算法的作用缚俏,以及數(shù)字證書的出現(xiàn)...
    sunny沖哥閱讀 1,382評論 0 3
  • 轉(zhuǎn)自:https://blog.51cto.com/3381847248/2066599 一、ssh詳解 1贮乳、什么...
    950545c4cd64閱讀 50,754評論 0 6