使用travis-ci如何持續部署node.js應用詳解,travis-cinode.js

來源:互聯網
上載者:User

使用travis-ci如何持續部署node.js應用詳解,travis-cinode.js

前言

在開始之前,我們先來簡單介紹下Travis-ci,Travis-ci是一款持續整合(Continuous Integration)服務,它能夠很好地與Github結合,每當代碼更新時自動地觸發整合過程。

Travis-ci配置簡單,很多nodejs項目都用它做自動化的測試。然而,對於持續整合,僅做到自動化的測試是不夠的,還要有後續的自動部署,才能完成“提交代碼 => 自動化的測試 => 自動部署”的整合鏈條。

本文以nodejs應用為例,來談談如何利用travis-ci完成自動部署。話不多說,來一起看看詳細的介紹:

基本原理

從自動化的測試到自動部署的核心問題是測試機與生產伺服器的信任問題,即如何安全地把程式包傳輸到生產伺服器。市面上的部署工具如scp、ansible、chef,都繞不開這個核心問題。

以scp為例,測試機登入生產伺服器的方式有兩種:密碼和秘鑰。密碼登入方式需要互動式地輸入密碼,總不能每次測試的時候,人為地輸入密碼吧,所以密碼方式行不通。

秘鑰的方式可以實現自動登入,但首次將測試機的公開金鑰傳輸給生產伺服器仍然要求輸入密碼。似乎走入了死胡同,但辦法總是有的。我們知道開發機是可以登入到生產伺服器的,那麼我們就可以將開發機的公開金鑰複製到生產伺服器,將開發機的私密金鑰複製到測試機,測試機通過私密金鑰來偽裝成開發機,自動地登入到生產伺服器。

解決了自動登入的問題,另一個問題是怎麼將開發機的私密金鑰複製到測試機上。由於測試機每次都是新開的一個虛擬機器,這個新開的虛擬機器IP不固定,所以沒辦法直接登入上去。解決辦法是將私密金鑰檔案作為程式碼程式庫的一部分提交,這樣測試機每次從程式碼程式庫上拉取代碼的同時也擷取到了秘鑰檔案,通過這種方式就實現了私密金鑰從開發機複製到測試機。

將私密金鑰檔案提交到程式碼程式庫有一個很嚴重的安全性問題,即任何人只要得到了這個私密金鑰檔案,他就可以隨心所欲的操縱生產伺服器。幸好,travis-ci提供了加密方案,它能夠將私密金鑰檔案加密,加密後的檔案只在當前程式碼程式庫有效。

總的來說,通過複製私密金鑰完成自動登入以及對私密金鑰加密來保障安全性,我們就可以建立起測試機與生產伺服器的信任通道,測試機就可以安全地操作生產伺服器完成自動部署。

配置

現在我以scp方式部署nodejs應用為例,來說明travis-ci做自動部署的配置。

首先,建立起開發機與生產伺服器的信任關係:

ssh-copy-id username@host

然後,加密你的私密金鑰,私密金鑰檔案通常在~/.ssh/id_rsa。加密私密金鑰檔案需要使用travis這個命令列工具,它是一個ruby包,使用gem安裝:

gem install travistravis login

輸入帳號密碼登入成功後,使用travis encrypt-file加密:

travis encrypt-file ~/.ssh/id_rsa --add

上面命令執行完後,會產生一段解密命令並添加到.travis.yml中:

before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in ~/.ssh/id_rsa.enc -out ~/.ssh/id_rsa -d

接下來,把加密後的私密金鑰檔案(id_rsa.enc)複製到程式碼程式庫中,千萬要注意不要錯把未加密的私密金鑰檔案(id_rsa)複製到你的程式碼程式庫中。然後把上面的解密命令的-in ~/.ssh/id_rsa.enc改為-in id_rsa.enc

通過上面的過程就基本建立測試機與生產伺服器的信任關係,但還有一些小細節要處理。例如,降低id_rsa檔案的許可權,否則ssh處於安全方面的原因會拒絕讀取秘鑰;將生產伺服器位址加入到測試機的信任清單中,否則串連時會詢問是否信任伺服器。更改後的配置如下:

before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 102.201.64.94\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config

最後,測試機就可以愉快地操作生產伺服器了,例如下面是一個nodejs應用的.travis.yml檔案配置:

language: node_jsnode_js: - '4.4.4'before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 102.201.64.94\n\tStrictHostKeyChecking no\n" >> ~/.ssh/configscript: - npm run testafter_success: - npm prune --production # 刪除devDependencies - tar -jcf indoor-server.tar.bz2 * # 打包並壓縮代碼 - scp indoor-server.tar.bz2 jingsam@102.201.64.94:~/ # 複製到生產伺服器上 - ssh jingsam@102.201.64.94 'mkdir -p indoor-server && tar -jxf indoor-server.tar.bz2 -C indoor-server' # 解壓 - ssh jingsam@102.201.64.94 'cd indoor-server && pm2 startOrReload pm2.json' # 重啟pm2

總結

本篇文章講的自動部署其實與nodejs關係不大,完全適用於各種語言的自動部署,其原理都是相通的。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.