想必部署過nodejs應用的朋友都有過這樣的經曆:
1、通過ssh登入伺服器
2、進入nodejs目錄
3、執行:git pull 指令拉取最新代碼
4、執行:npm install 安裝新依賴
5、執行:pm2 restart all 重新啟動所有nodejs程序
如果我們隻有一台機器,并且更新不是很頻繁,似乎這樣的操作還是可以接受,但是如果我們有4台nodejs應用的伺服器,每次的代碼改動将是災難!
好在我們有Jenkins幫助我們做這些事情,Jenkins是一個可以自動遠端部署,執行遠端腳本指令的工具,它被稱為持續內建工具,我們可以通過docker來快速搭建一個Jenkins服務。
一、安裝docker,拉取images,啟動container
在centos7下,隻需要執行
<code>yum </code><code>install</code> <code>docker</code>
<code>service docker start</code>
<code>ps</code> <code>-ef|</code><code>grep</code> <code>docker</code>
在centos6下,需要分别執行
<code>yum </code><code>install</code> <code>sudo</code>
<code>sudo</code> <code>yum </code><code>install</code> <code>-y epel-release</code>
<code>sudo</code> <code>yum </code><code>install</code> <code>-y docker-io</code>
進入 jenkins 的官方docker鏡像位址:
<a href="https://registry.hub.docker.com/_/jenkins/" target="_blank">https://registry.hub.docker.com/_/jenkins/</a>
然後根據說明執行:
<code>docker pull jenkins</code>
拉取好鏡像之後,我們先建立目錄,然後啟動docker的container
<code>mkdir</code> <code>/var/jenkins_home</code>
<code>docker run -d --name myjenkins -p 49001:8080 -</code><code>v</code> <code>/var/jenkins_home</code><code>:</code><code>/var/jenkins_home</code> <code>jenkins</code>
二、安裝nginx
安裝并啟動nginx,把如下代碼放在配置檔案中,添加一個server節點,反向代理到docker
<code>upstream app {</code>
<code> </code><code>server 127.0.0.1:49001;</code>
<code>}</code>
<code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name jenkins.your-domain.com;</code>
<code> </code><code>location / {</code>
<code> </code><code>proxy_pass http:</code><code>//app</code><code>;</code>
<code> </code><code>}</code>
這樣打開浏覽器我們就可以看到jenkins的首頁了
三、配置jinkens
我們首先需要進入jinkens添加使用者,這裡不累述了,根據提示一步步即可完成。
然後我們要安裝插件,依次進入:
系統管理 -> 插件管理 -> 進階(頁籤)-> 底部立即擷取按鈕
稍等片刻,就可以把可用插件更新下來,然後我們選擇安裝如下幾個插件:
<code>GIT client plugin</code>
<code>GIT plugin</code>
<code>Git server plugin</code>
<code>GitHub API Plugin</code>
<code>GitHub plugin</code>
<code>SSH Credentials Plugin</code>
<code>SSH plugin</code>
<code>Publish Over SSH</code>
安裝完成後,重新啟動 jenkins。如果無法自動重新開機,可以輸入 '/restart' 在位址欄,即可手動重新開機。
四、添加remote計算機
我們jenkins是安裝在docker中的,是以就算部署到本機,對于jenkins也是remote外部的機器,需要使用ssh來連接配接,我們需要添加ssh主機,來讓jenkins聯入。
依次進入 系統管理 -> 系統設定
如下圖增加remote server,這個是增加ssh remote 插件的伺服器
下圖是增加遠端拷貝檔案的remote server
五、建立項目
我現在在github上建了一個nodejs的helloworld項目:
<a href="https://github.com/DoubleSpout/jenkinsNodejs" target="_blank">https://github.com/DoubleSpout/jenkinsNodejs</a>
我們需要在jenkins中也建立一個相應的項目來,依次點選:建立 -> 取名為 nodejsPublish
進入項目,點選配置,我們就可以對這個項目進行配置,讓它自動部署
1、設定 git 倉庫路徑:
如下圖,因為是公共倉庫,是以不需要驗證使用者名,密碼:
2、建構完畢之後,将代碼打包儲存
我們先如下圖,增加一個建構完畢的shell腳本執行
然後些如下圖腳本,打包代碼,然後移動到workspace目錄下
3、接着我們需要連接配接到部署伺服器上,将原來的服務暫時暫停,删除上一次部署的壓縮包,選擇添加遠端shell腳本執行,如下圖:
寫如下腳本,将pm2服務停止,這裡大家可以根據自己的要求暫停腳本
4、最後我們要把打包好的代碼發送到伺服器上,然後執行安裝依賴包操作,并且啟動nodejs服務,選擇通過ssh發送檔案并執行指令到遠端伺服器,如圖:
下圖的 source files 的預設目前路徑就是workspaces,remote directory的目前路徑就是之前添加伺服器設定的,這裡我設定為 /var/nodejs
下面的指令很簡單,解壓代碼,執行依賴包安裝,然後通過pm2啟動nodejs服務。
5、開始建構
配置好上述指令之後,我們點選儲存,然後點選立即建構,出現藍色的球,就表示建構成功,紅色的球表示建構失敗,黃色的球表示執行建構指令失敗,如下圖,就是正在建構和釋出:
不論建構成功還是失敗,我們可以通過檢視控制台輸出看到建構的結果:
如果我們有多台裝置,就隻需要配置一次,然後以後每次有代碼變更,手動點選立即建構即可自動部署到目标伺服器,免去我們枯草的重複勞動。當然其他語言,例如python,php都是可以這樣來部署的。
本文轉自 zbill 51CTO部落格,原文連結:http://blog.51cto.com/dek701/1966929,如需轉載請自行聯系原作者