搜索jenkins,進入官網,5分鐘之內相信你能找到適合你操做系統的安裝步驟。此處爲省事,列出centos步驟(注意安裝穩定版)java
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum install jenkins 若是你係統裏沒有Java,那麼sudo yum install java 啓停service jenkins start/stop/restart 或者systemctl start/stop/restart jenkins
不要問service start xxx和systemctl(centos7引入)啥關係,後者是用來替代前者的。具體問百度。啓動後,驗證安裝是否成功,瀏覽器訪問http://localhost:8080/,看到老爺爺(jenkins logo)就行。python
要是遇到奇葩問題,看這裏 https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributionsgit
配置前安裝必要插件:web
Git Plugin:使用Git做爲源代碼管理shell
Python Plugin:Adds the ability to execute python scripts as build steps.django
Violations:代碼質量檢測,支持pylint、jslint等centos
配置job瀏覽器
1.新建-->job-->自由風格bash
2.填寫git 地址,觸發器選擇Poll SCM, Schedule可選服務器
3.填寫腳本:第二行#!/usr/bin/bash/...是給jenkins看的,讓jenkins不要輸出每條命令
#!/usr/bin/bash #!/usr/bin/bash/... source /home/luodaihong/py27/bin/activate cd /home/luodaihong/workspace/django-privilege/example coverage run --source=privilege manage.py test privilege coverage report -m --skip-covered pylint --output-format=parseable privilege > pylint.xml || exit 0
coverage pylint本身安裝咯
4.增長構建後操做步驟-->Report Violations--> pylint後填寫pylint.xml --->Faux Project Path填寫實際工程路徑,也就是腳本中cd的路徑
建好工程後,構建一次玩玩唄,點擊構建詳情,等待構建完畢,看到代碼風格統計圖, Console Output裏看到單元測試經過狀況,代碼覆蓋狀況。遇到問題:
初始安裝後基本都能運行jenkin並看到jenkins web頁面,不然重裝。修修改改後進程起不來,多看看權限問題,特別是修改jenkins_user
配置的job怎麼都不按預期執行,先手動命令行執行,確認無誤後查看jenkins環境變量
見Installing Jenkins。它也支持經過Docker安裝,真的是緊跟潮流!
須要提的一點是Jenkins比較耗內存,不運行任何構建任務的狀況下就吃掉了300多M,再加上構建任務時會佔用更多,因此建議服務器的內存至少有1G,512M的話極可能在執行構建任務的時候內存不夠用。
安裝後默認全部人均可以訪問,故須要更改訪問控制策略,具體見Standard Security Setup。
下面是我用到的一些插件:
Git Plugin:使用Git做爲源代碼管理
SSH plugin:遠程ssh登陸server執行命令
Parameterized Trigger Plugin:觸發其餘的job
Cobertura Plugin:代碼測試覆蓋率報告
Task Scanner Plugin:檢測代碼中出現的特殊標記(如TODO等)
Violations:代碼質量檢測,支持pylint、jslint等
ThinBackup:用於備份Jenkins
SCM Sync configuration plugin:將Jenkens的配置變動同步到SCM中
這裏只是集中地列舉一下,具體的使用會在下面穿插介紹。
根據本項目的須要,在Jenkins中創建了3個任務:
tm_test:用於執行測試、代碼質量檢測等
tm_staging_deploy:用於在staging服務器上deploy代碼
tm_deploy:用於在production服務器上deploy代碼
其中staging服務器用於進行線上測試,staging服務器和production服務器的環境必須保持徹底相同(固然,staging服務器配置能夠低一些)。
具體的開發、測試、部署流程是:
在開發新功能/修復bug的時候,通常是開新分支;但若是是那種很小的修改,則直接在master上改,這樣比較省事兒
新功能開發完成/bug修復後,進行單元測試+人工測試,若是經過,合併到master
每次master有變更後,觸發tm_test任務,執行集成的單元測試和代碼質量檢測,若是OK,則自動觸發tm_staging_deploy,部署到staging服務器上
若tm_staging_deploy成功,則登錄到運行在staging服務器的測試網站上,人工測試新功能是否OK/bug是否已修復;若tm_staging_deploy失敗,檢查失敗緣由,進行修復,直至成功
若staging人工測試經過,則手動觸發tm_deploy,部署到生產服務器上
登陸到生產服務器上進行人工測試,若出現問題,進行修復;同時密切關注Sentry發送的告警郵件,爭取在第一時間修復錯誤
比較簡單,沒有采用Git-Flow/GitHub-Flow,單元測試寫得很淺,也沒有作代碼審查。不過團隊規模小,從目前來看,上面的流程是夠用的。
下面對這三個任務作較爲詳細的介紹。
該任務用於執行測試、代碼質量檢測等。
每當項目倉庫的master分支有變更時,即會觸發tm_test。要作這一點,須要以下步驟:
設置tm_test的Build Triggers爲Poll SCM,但不填Schedule
爲項目倉庫添加Web Hook,URL填寫http://<Jenkins URL>/git/notifyCommit?url=<URL of the Git repository>
執行測試以前,須要肯定Python版本(通常是2.7),而後根據此版本初始化virtualenv。
在構建中添加Execute shell項:
if [ ! -d "venv" ]; then virtualenv -p /usr/bin/python2.7 venvfi . venv/bin/activate pip install -i http://pypi.douban.com/simple -r requirements.txt
測試中須要2個庫:nose用於執行單元測試,coverage用於統計測試覆蓋率。
須要在Jenkins中安裝Cobertura Plugin插件,用於生成代碼測試覆蓋率報告。
而後在構建中添加Execute shell項,輸入:
nosetests --with-xunit --with-coverage --cover-package=tm && coverage xml
其中--with-xunit
告訴nose輸出JUnit形式的測試報告,--with-coverage
表示同時運行coverage(這個功能至關贊),--cover-package=tm
表示僅對指定的package執行測試覆蓋率檢測,後面的coverage xml
表示輸出xml格式的coverage報告。
而後在構建後操做中,添加以下2項:
Publish JUnit test result report:填寫nosetests.xml
Publish Cobertura Coverage Report:填寫coverage.xml
這樣一來,就能夠執行測試,並獲得測試報告和測試覆蓋率報告啦:
上面的圖表都是可點擊的,點進去後有代碼級的詳細報告,很是贊:
綠色的代碼行表示已經覆蓋到,紅色則沒有。
Jenkins有一個蠻不錯的代碼質量報告插件:Violations,支持很是多的代碼測試工具。目前項目中使用Pylint作Python代碼質量檢測,使用JSHint作JavaScript代碼質量檢測。
在安裝好Pylint後,運行pylint --generate-rcfile > pylintrc
生成配置文件,並將其中的output-format
項的值改成parseable
。
而後在構建中添加2項Execute shell項,
pylint:
pylint tm2 > pylint.xml || exit 0
jshint:
jshint --reporter=jslint $WORKSPACE/tm2/static/js/ > jslint.xml || exit 0
其中的exit 0
是爲了告訴Jenkins該命令執行成功。對於jshint來講,report選擇jslint,而後須要使用$WORKSPACE
組成絕對路徑,不然沒法看到源碼級的分析報告(是否是一個bug?)。
而後在構建後步驟中添加Violations Report,在對應位置輸入jslint.xml和pylint.xml。
最終的圖形報告以下,能夠看到趨勢走向:
源碼級別的分析也有:
團隊中約定,在代碼未完成的地方使用TODO
進行標記,由於PyCharm有一個很好的功能就是能夠檢測出代碼中的全部TODO信息:
Jenkins中也有一個很是棒的插件Task Scanner Plugin用於檢測代碼中出現的特殊標記,固然,這些特殊標記徹底是能夠自定義的。
安裝完該插件後,在構建後操做中添加一項Scan workspace for open tasks,根據須要填寫配置:
而後報告就能夠出來啦:
若是構建後狀態是unstable或failed,則能夠發送郵件告警,及時通知相關負責人進行處理。Jenkins自帶SMTP功能,不過須要你提供SMTP服務器。
我使用的是qq郵箱SMTP服務器,挺好用的,目前沒有發現拒發的狀況。有一點須要注意的是,在配置好SMTP的帳戶信息後,還需填寫系統管理員郵件地址,不然會發送失敗,這也是比較容易忽略的地方。
配置好SMTP後,而後在構建後操做中添加E-mail Notification項,填寫負責人的郵箱便可。
若是tm_test構建成功,則須要自動觸發tm_staging_deploy任務,這個觸發過程是經過插件Parameterized Trigger Plugin來完成的。
在構建後操做中添加Trigger parameterized build on other projects項,選擇觸發條件爲stable,而後填寫待出發的任務名稱便可。
最後的tm_test任務面板以下:
界面是挺out的,不過很實用。
這一個job用於將最新代碼部署到staging服務器上,我採用的部署方法是經過ssh遠程登錄服務器執行命令的方式,須要一個插件SSH plugin。
而後在構建中添加Shell項:
cd /var/www/tmexport MODE=PRODUCTION git reset --hard HEAD git pull -fsource venv/bin/activate pip install -r requirements.txt python manage.py db upgrade supervisorctl restart tm
此任務和tm_staging_deploy基本差很少,不一樣的地方有2個:(1)目標服務器不一樣(2)觸發方式是手動觸發
使用thinBackup進行備份,可設定備份週期。
除此以外,我還用到了一個頗有用的插件SCM Sync configuration plugin,就是把Jenkins的配置(全局配置+各job配置)同步到一個Git倉庫中。這樣的話,每次配置有變更,都會造成一個commit推送到Git倉庫。
這至關於把配置的歷史變遷都記錄下來,若是哪天Jenkins任務掛了,能夠看看配置變動進行排錯。