前言
在開始之前,我們先來簡單介紹下Travis-ci,Travis-ci是一款持續(xù)集成(Continuous Integration)服務(wù),它能夠很好地與Github結(jié)合,每當代碼更新時自動地觸發(fā)集成過程。
Travis-ci配置簡單,很多nodejs項目都用它做自動測試。然而,對于持續(xù)集成,僅做到自動測試是不夠的,還要有后續(xù)的自動部署,才能完成“提交代碼 => 自動測試 => 自動部署”的集成鏈條。
本文以nodejs應(yīng)用為例,來談?wù)勅绾卫胻ravis-ci完成自動部署。話不多說,來一起看看詳細的介紹:
基本原理
從自動測試到自動部署的核心問題是測試機與生產(chǎn)服務(wù)器的信任問題,即如何安全地把程序包傳輸?shù)缴a(chǎn)服務(wù)器。市面上的部署工具如scp、ansible、chef,都繞不開這個核心問題。
以scp為例,測試機登錄生產(chǎn)服務(wù)器的方式有兩種:密碼和秘鑰。密碼登錄方式需要交互式地輸入密碼,總不能每次測試的時候,人為地輸入密碼吧,所以密碼方式行不通。
秘鑰的方式可以實現(xiàn)自動登錄,但首次將測試機的公鑰傳輸給生產(chǎn)服務(wù)器仍然需要密碼。似乎走入了死胡同,但辦法總是有的。我們知道開發(fā)機是可以登錄到生產(chǎn)服務(wù)器的,那么我們就可以將開發(fā)機的公鑰復(fù)制到生產(chǎn)服務(wù)器,將開發(fā)機的私鑰復(fù)制到測試機,測試機通過私鑰來偽裝成開發(fā)機,自動地登錄到生產(chǎn)服務(wù)器。
解決了自動登錄的問題,另一個問題是怎么將開發(fā)機的私鑰復(fù)制到測試機上。由于測試機每次都是新開的一個虛擬機,這個新開的虛擬機IP不固定,所以沒辦法直接登錄上去。解決辦法是將私鑰文件作為代碼庫的一部分提交,這樣測試機每次從代碼庫上拉取代碼的同時也獲取到了秘鑰文件,通過這種方式就實現(xiàn)了私鑰從開發(fā)機復(fù)制到測試機。
將私鑰文件提交到代碼庫有一個很嚴重的安全性問題,即任何人只要得到了這個私鑰文件,他就可以隨心所欲的操縱生產(chǎn)服務(wù)器。幸好,travis-ci提供了加密方案,它能夠?qū)⑺借€文件加密,加密后的文件只在當前代碼庫有效。
總的來說,通過復(fù)制私鑰完成自動登錄以及對私鑰加密來保障安全性,我們就可以建立起測試機與生產(chǎn)服務(wù)器的信任通道,測試機就可以安全地操作生產(chǎn)服務(wù)器完成自動部署。
配置
現(xiàn)在我以scp方式部署nodejs應(yīng)用為例,來說明travis-ci做自動部署的配置。
首先,建立起開發(fā)機與生產(chǎn)服務(wù)器的信任關(guān)系:
ssh-copy-id username@host
然后,加密你的私鑰,私鑰文件通常在~/.ssh/id_rsa。加密私鑰文件需要使用travis這個命令行工具,它是一個ruby包,使用gem安裝:
gem install travistravis login
輸入賬號密碼登錄成功后,使用
新聞熱點
疑難解答
圖片精選