搭建jenkins實現自動化部署


 

轉自: http://blog.csdn.net/achuo/article/details/51086599

 

搭建jenkins實現自動化部署

Jenkins是一個非常有名的CI工具,開源、免費,通過jenkins我們可以更加智能、快速的持續集成,盡早的發現代碼里的問題並及時的部署上去。

Install Jenkins On Ubuntu

wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'sudo apt-get update sudo apt-get install jenkins

打開http://localhost:8080如果看到Jenkins的首頁說明你已經安裝成功了。

更改端口

如果端口8080已經被占用,要修改配置文件來改變端口。

sudo vi /etc/default/jenkins

找到HTTP_PORT=8080,把8080改為8000,然后

sudo service jenkins restart

新建任務

在左側欄選擇新建,填上名稱,選擇構建一個自由風格的軟件項目,點擊保存,進入到配置頁。這個頁面涵蓋了對這個任務的所有配置,有些復雜,下面會一一講解。

源碼管理

選擇Git, Repository URL里填上Github的地址,Credentials -> Add,填上Github的用戶名密碼。這個是Jenkins拉取源碼時需要的憑證。 "Branches to build"填上分支名,表示Jenkins將拉取該分支的源碼,后面觸發器也只針對該分支。

Github插件

“系統管理” -> "插件管理" -> "可選插件",搜索“Github plugin”,勾中,直接安裝。進入到插件安裝頁面,待安裝成功后,再次進入項目配置頁面。這時“構建觸發器”里應該多了一項“Build when a change is pushed to GitHub”,選中。接下來要去Github上配置hook。

登陸Github,在項目的settings -> Webhooks & Services -> Add Hook 里填上 http://jenkins_url/github-webhook/, 記住Content type一定要選擇“application/x-www-form-urlencoded”,否則是沒辦法正常工作的,secret不用填。

構建

在“構建”配置里,選擇“增加構建步驟”,選擇“Execute shell”,即可填寫你要執行的構建命令。對於Java項目,這里一般是Ant或Maven命令。對於我們項目,主要是執行shell命令。

依次增加如下構建命令:

npm installgrunt deploy
cd public/assets/javascript
gruntbin/migrate_database.sh
NODE_ENV=test bin/migrate_database.sh

以上按順序分別是安裝依賴包,編譯coffee,更新數據庫和model字段。再加上最后一步——測試:

NODE_ENV=test mocha --compilers coffee:coffee-script/register test/spec/**/*.coffee -R doc > test_result.html

這些命令可以放在一個里面,也可以分開放,但是順序一定要保持如此。尤其是最后一步。如果測試通過,構建結果就是成功;相反,構建會被標記為失敗。這決定了后面要說的構建后操作。

完成以上步驟后,已經實現了任務的自動構建,但是為了讓腳本能夠跑起來,還需要最后一步,即給jenkins用戶配置開發環境。

apt-get install jenkins后,系統就多了一個jenkins用戶,其主目錄在/var/lib/jenkins,jenkins也是以該用戶的身份在運行。所以在這個環境下,你當前登錄的用戶所配置的諸如npm grunt是無法在jenkins里正常使用的。所以必須先su jenkins配置環境,在這之前可能你先要sudo passwd jenkins來給jenkins設置一個密碼,並將jenkins用戶加到sudo列表以安裝npm。

做完以上配置之后,可以點擊“立即構建”測試一下構建過程是否正確。然后往github推送一次,看是否會觸發jenkins進行構建。確保以上都沒有問題后,做接下來的配置。

構建后操作

構建后操作分兩種情況:

  • 構建成功后,將程序部署上去;

  • 構建失敗后,發送通知郵件。

但是無論是部署程序還是發送郵件,在“增加構建后操作”里都找不到對應的選項。所以還需要安裝一些額外的插件。

按照上面所說的安裝插件的方法,安裝以下兩個插件:

  • Post build task

  • PostBuildScript

這兩個插件都是用來執行shell腳本的,不同的是Post build task插件可以根據不同的構建輸出做不同的動作,當前面構建失敗時,可以通過匹配失敗的輸出來執行發送郵件操作。

構建后操作 -> 增加構建后操作步驟 -> Post build task,在Log text里填上marked build as failure,這是構建腳本執行不成功時日志會輸出的一段文本。然后在Script里填上

coffee ~/mailer/mailer.coffee -f 石墨通知 -t chenxu@1heart.cn,a@1heart.cn -s "Jenkins Build Fail $BUILD_DISPLAY_NAME" -c $BUILD_URL -a test_result.html

這一段就是發送email的腳本,-a test_result.html是讓郵件帶上測試結果作為附件。mailer.coffee是我用NodeJS寫的發送郵件的腳本。具體參數如下:

coffee ~/mailer/mailer.coffee -h

Usage: mailer.coffee [options]

Options:

-h, --help               output usage information-V, --version            output the version number-f, --from [value]       發件人名稱-a, --attachment <file>  附件路徑-t, --to [value]         收件人郵件地址, 如果有多個以,隔開-s, --subject [value]    郵件主題-c, --content [value]    郵件內容

mailer.coffee因為涉及到郵箱賬號密碼,暫時放在Github私人倉庫里。

勾上Execute script only if build success。這樣就實現了構建成功自動部署。以下是部署腳本:

 

# 備份用戶上傳的文件if [ -d "/var/lib/jenkins/shimo/public/uploads" ]; then     cp -r /var/lib/jenkins/shimo/public/uploads/ /var/lib/jenkins/backups/fi# 刪除原本部署在pm2的程序rm -rf /var/lib/jenkins/shimo/# 將jenkins工作空間下構建好的版本復制出去cp -r /var/lib/jenkins/jobs/shimo/workspace/ /var/lib/jenkins/shimo/# 還原上傳文件cp -r /var/lib/jenkins/backups/ /var/lib/jenkins/shimo/public/uploads/# 建立軟鏈接rm /var/lib/jenkins/shimo/node_modules/shimo ln -s /var/lib/jenkins/shimo/ /var/lib/jenkins/shimo/node_modules/shimo# 部署到pm2pm2 startOrRestart processes.json

/var/lib/jenkins/jobs/shimo/workspace/是jenkins自動構建的位置,這個位置就是項目根目錄,但是並不能直接把這個位置部署到pm2。原因是如果構建失敗,即使沒有重啟pm2,前端的html、js都已經更新並生效了。為了防止這個問題,每次構建成功后將項目拷貝到另一個路徑,在該路徑下部署。

完成以上配置后,就實現了項目的CI/CD。Jenkins非常靈活,以上步驟需要根據自己的實際情況做調整。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM