本節(jié)內(nèi)容:
一、Jenkins介紹Jenkins是一個開源軟件項(xiàng)目,是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續(xù)集成變成可能。
二、安裝部署Jenkins下載地址:https:///download/ 我這里下載war包安裝,版本:1.642.3 LTS .war
1. 環(huán)境信息
2. 新建Jenkins用戶
3. Jenkins安裝方式 安裝jenkins有兩種方式,tomcat方式部署和java部署啟動。本次實(shí)驗(yàn)我以tomcat下部署啟動為例。 (1)tomcat方式部署 a.首先安裝tomcat和JAVA,配置環(huán)境變量(此步驟不再講述,java配置不可缺少) 我這里安裝的是jdk 1.8.0_65。
b.將從官網(wǎng)下載下來的jenkins.war文件放入tomcat下的webapps目錄下,進(jìn)入tomcat的/bin目錄下,啟動tomcat即啟動jenkins。 我這里用的是tomcat8。
c.啟動jenkins時,會自動在webapps目錄下建立jenkins目錄,訪問地址為:http://localhost:8080/jenkins
如果啟動時報錯:
解決:
d.訪問jenkins http://172.16.206.30:8080/jenkins
(2)java部署啟動jenkins 切換到j(luò)enkins.war存放的目錄,輸入如下命令:
可以修改啟動端口
然后在瀏覽器中(推薦用火狐、chrom)輸入http://localhost:8080,localhost可以是本機(jī)的ip,也可以是計(jì)算機(jī)名。就可以打開jenkins;修改端口后,訪問地址的端口需同步變更。
4. Jenkins授權(quán)和訪問控制 默認(rèn)地Jenkins不包含任何的安全檢查,任何人可以修改Jenkins設(shè)置,job和啟動build等。顯然地在大規(guī)模的公司需要多個部門一起協(xié)調(diào)工作的時候,沒有任何安全檢查會帶來很多的問題。 我們可以通過下面的方式來增強(qiáng)Jenkins的安全: 訪問jenkins:http://172.16.206.30:8080/jenkins 點(diǎn)擊系統(tǒng)管理—> Configure Global Security,點(diǎn)擊”啟用安全”,可以看到可以使用多種方式來增強(qiáng)Jenkins的授權(quán)和訪問控制: 查看策略: 如上圖所示,默認(rèn)是”任何用戶可以做任何事情(沒有任何限制)”。 我們在”安全域”選擇”Jenkins專有用戶數(shù)據(jù)庫”,”允許用戶注冊”;并先在“授權(quán)策略”點(diǎn)擊“任何用戶可以做任何事情(沒有任何限制)”, 防止注冊之后無法再管理jenkins。此時就可以刷新一下jenkins的頁面看到右上角有登錄、注冊的按鈕。
(1)注冊管理員賬號 a.點(diǎn)擊注冊,首先注冊一個管理員賬號。
b.點(diǎn)擊系統(tǒng)管理—> Configure Global Security,在“授權(quán)策略”選擇”安全矩陣”,添加用戶/組——添加admin賬戶——為admin賬戶添加所有權(quán)限,為匿名用戶勾選你希望對方了解的功能。 【注意】:匿名用戶一定要開啟此處的可讀權(quán)限,若不開啟,后面github或者bitbucket的webhook自動構(gòu)建會沒有權(quán)限。 并且勾選上該項(xiàng),點(diǎn)擊保存。 做完此部操作之后,即可用admin賬號登錄,取消登錄用戶可以做任何事的權(quán)限。 以上操作,即可完成jenkins的授權(quán)和訪問控制。
5. Jenkins系統(tǒng)配置 登錄jenkins——系統(tǒng)管理——系統(tǒng)設(shè)置,為jenkins添加上需要的功能配置,有如下幾個方面:
(1)JDK配置 在jdk的選項(xiàng),點(diǎn)擊”新增JDK”,取消自動安裝,輸入jdk別名(名稱隨意),JAVA_HOME大家應(yīng)該都很了解,在此處填寫jenkins所在服務(wù)器安裝的java程序的HOME位置即可,根據(jù)不同操作系統(tǒng)填寫不同路徑,如win7 D:\Java\jdk1.8 linux /usr/lib/jvm/jdk1.7.0_51。 設(shè)置完了請記得保存。
(2)git/svn版本控制添加 根據(jù)使用的版本選擇控制版本的應(yīng)用程序的路徑,如jdk配置即可。 【注意】:如果使用Git作為版本控制庫,Jenkins默認(rèn)情況下是沒有安裝Git的。我們需要到插件管理界面中選中Git,然后點(diǎn)擊直接安裝。 點(diǎn)擊系統(tǒng)管理—>管理插件—>可選插件,在右上角”過濾”處輸入git進(jìn)行搜索: 找到Git client plugin和Git plugin,在前面打上√,點(diǎn)擊直接安裝。 安裝插件中。。。 安裝成功后,重啟jenkins。
(3)Jenkins添加maven配置 先判斷jenkins所在主機(jī)是否安裝了maven:
如果沒有安裝,請先安裝maven。
a.CentOS 安裝maven
b.Jenkins配置maven 安裝完成后,登錄jenkins。點(diǎn)擊系統(tǒng)管理—>系統(tǒng)設(shè)置。
三、Jenkins構(gòu)建maven風(fēng)格的job1. 新建maven任務(wù) 登錄jenkins,點(diǎn)擊新建。輸入Item名稱,選擇“構(gòu)建一個maven項(xiàng)目”,點(diǎn)擊OK。
2. 構(gòu)建任務(wù)配置
3. 源碼管理配置 進(jìn)入配置頁面,找到”源碼管理”。我這里是svn,輸入項(xiàng)目所在版本庫的地址。
4. 構(gòu)建觸發(fā)器配置 在”源碼管理”下面是”構(gòu)建觸發(fā)器”。 ”構(gòu)建觸發(fā)器”是一個持續(xù)集成的觸發(fā)器插件,可以根據(jù)已經(jīng)完成構(gòu)建的結(jié)果,觸發(fā)新Job或者傳遞參數(shù)。默認(rèn)的選項(xiàng)是Build whenever a SNAPSHOT dependency is built,意思是依賴于快照的構(gòu)建,意思是依賴于快照的構(gòu)建,當(dāng)代碼有更新時就構(gòu)建項(xiàng)目。 Build periodically和Poll SCM可以設(shè)置定時自動構(gòu)建。兩者區(qū)別如下:
我這里設(shè)置為每12小時構(gòu)建一次。
5. Maven構(gòu)建設(shè)置 (1)Pre Step Pre Steps選項(xiàng)用來配置構(gòu)建前的工作,這里不作更改。 (2)配置Root POM和Goals and options 因?yàn)槭荕aven項(xiàng)目,所以Build選項(xiàng)有Root POM和Goals and options的設(shè)置。Root POM:填寫你項(xiàng)目的pom.xml文件的位置,注意:是相對位置,如果該文件不存在,會有紅色字提示。 比如我這里是: (3)Post Steps 在maven項(xiàng)目創(chuàng)建完成后,我們還需要實(shí)現(xiàn)每次構(gòu)建完成,將war發(fā)布到阿里云主機(jī)上,以實(shí)現(xiàn)自動發(fā)布。我們通過添加shell實(shí)現(xiàn)自動發(fā)布。 找到Post steps下有個Execute shell: 【注意】:Jenkins在執(zhí)行該shell腳本的時候是以jenkins這個用戶身份去執(zhí)行。某些場景下請注意環(huán)境變量PATH。 將構(gòu)建完成后,所要采取的動作,shell腳本腳本內(nèi)容如下: ![]() ![]() #!/bin/bash
#阿里云主機(jī)
# Stop tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/shutdown.sh' &>/dev/null
sleep 15
# Check the stop is successful or not. If until not, kill the tomcat process.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v 'grep'' &>/dev/null; then
tomcat_pid=`ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}'`
kill -9 ${tomcat_pid}
fi
# Check the stop is successful or not.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v 'grep'' &>/dev/null; then
echo 'Tomcat stop failed.Please check the problem.'
exit 5
fi
# Backup previous version and delete the war in the path /usr/local/apache-tomcat-7.0.65/webapps/.
ssh root@114.55.29.246 '/usr/bin/cp -f /usr/local/apache-tomcat-7.0.65/webapps/*.war /backups/*war'
ssh root@114.55.29.246 'rm -rf /usr/local/apache-tomcat-7.0.65/webapps/*'
# Copy the newest war to aliyun ECS.
scp /home/jenkins/.jenkins/workspace/godseye/godseye-parent/godseye-container/target/godseye-container-aliyun.war root@114.55.29.246:/usr/local/apache-tomcat-7.0.65/webapps/godseye.war &>/dev/null
# Start the tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/startup.sh' &>/dev/null
配置阿里云主機(jī)信任內(nèi)網(wǎng)的這臺jenkins主機(jī): 由于是war包在內(nèi)網(wǎng)服務(wù)器上,發(fā)布的環(huán)境是在阿里云主機(jī)上,所以要配置主機(jī)互信,防止scp war包時還需要輸入密碼。我這里內(nèi)網(wǎng)服務(wù)器ip是172.16.206.30,外網(wǎng)是114.55.29.246。
四、Jenkins郵件通知設(shè)置1. 配置jenkins自帶的郵件功能 (1)找到系統(tǒng)設(shè)置
(2)填寫系統(tǒng)管理員郵箱 【注意】:這個系統(tǒng)管理員郵件地址一定要填寫,否則郵件發(fā)不出去,連下面的測試郵件都發(fā)不出去。
(3)找到郵件通知,輸入SMTP服務(wù)器地址,點(diǎn)擊高級,輸入發(fā)件人賬號和密碼 (4)勾選上”通過發(fā)送測試郵件測試配置”,然后輸入收件人賬號 此時我們已經(jīng)可以發(fā)送郵件了。在具體job配置處,找到”構(gòu)建設(shè)置”,輸入收件人信箱,但是你會發(fā)現(xiàn)只能在構(gòu)建失敗時發(fā)郵件。可以安裝插件Email Extension Plugin來自定義。
2. 安裝使用插件Email Extension Plugin (1)安裝插件Email Extension Plugin 該插件支持jenkins 1.5以上的版本。 在系統(tǒng)管理-插件管理-安裝Email Extension Plugin。它可根據(jù)構(gòu)建的結(jié)果,發(fā)送構(gòu)建報告。該插件支持jenkins 1.5以上的版本。 【注意】:安裝完如果使用Email Extension Plugin,就可以棄用自帶的那個郵件功能了。
(2)配置使用插件Email Extension Plugin 點(diǎn)擊”系統(tǒng)配置”—>”系統(tǒng)設(shè)置”。 找到Extended E-mail Notification處,輸入如下的配置: 【注意】:上面的User Name和Password需要點(diǎn)開“高級設(shè)置”后才能看到,必須輸入用戶名和密碼,否則郵件發(fā)不出去。 ![]() ![]() 構(gòu)建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
<hr/>
(本郵件是程序自動下發(fā)的,請勿回復(fù)!)<br/><hr/>
項(xiàng)目名稱:$PROJECT_NAME<br/><hr/>
構(gòu)建編號:$BUILD_NUMBER<br/><hr/>
svn版本號:${SVN_REVISION}<br/><hr/>
構(gòu)建狀態(tài):$BUILD_STATUS<br/><hr/>
觸發(fā)原因:${CAUSE}<br/><hr/>
構(gòu)建日志地址:<a href='${BUILD_URL}console'>${BUILD_URL}console</a><br/><hr/>
構(gòu)建地址:<a href='$BUILD_URL'>$BUILD_URL</a><br/><hr/>
變更集:${JELLY_SCRIPT,template='html'}<br/><hr/>
點(diǎn)擊下面的保存。 然后去job配置頁面激活這個插件。找到需要發(fā)郵件的項(xiàng)目,點(diǎn)擊進(jìn)去。 點(diǎn)擊配置,點(diǎn)擊”增加構(gòu)建后操作步驟”,選擇Editable Email Notification。 附上構(gòu)建日志,點(diǎn)擊高級設(shè)置。 配置Triggers: 更詳細(xì)的介紹:http://www.cnblogs.com/zz0412/p/jenkins_jj_01.html
五、Sonar官方文檔:http://docs./display/SONARQUBE45/Documentation
1. sonar簡介 Sonar是一個用于代碼質(zhì)量管理的開源平臺,用于管理Java源代碼的質(zhì)量。通過插件機(jī)制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續(xù)集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。 與持續(xù)集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是簡單地把不同的代碼檢查工具結(jié)果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是通過不同的插件對這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。 在對其他工具的支持方面,Sonar 不僅提供了對 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 這些工具里聯(lián)機(jī)查看結(jié)果;同時 Sonar 還對大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar。 此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。
2. 環(huán)境要求 http://docs./display/SONAR/Requirements
3. 新建用戶
4. 安裝jdk
5. 安裝配置數(shù)據(jù)庫
6. 安裝sonar 我這里用的版本是SonarQube 4.5.7 (LTS *),上傳該軟件到sonar用戶的家目錄下。
修改如下字段(就是配置數(shù)據(jù)庫信息,其他不用動):
7. 啟動sonar Sonar默認(rèn)集成了jetty容器,可以直接啟動提供服務(wù),也可以通過腳本構(gòu)建為war包,部署在tomcat容器中。 Sonar默認(rèn)的端口是”9000”、默認(rèn)的上下文路徑是”/”、默認(rèn)的網(wǎng)絡(luò)接口是”0.0.0.0”,默認(rèn)的管理員賬號和密碼為:admin/admin,這些參數(shù)都可以在配置文件sonar.properties中修改。我這里修改下port,因?yàn)楸緳C(jī)的9000端口被其他程序占用了。
查看日志:
可以看到第一次啟動時,初始化語句:
8. 關(guān)閉sonar
9. 訪問sonar 瀏覽器輸入http://172.16.206.30:9003/ 默認(rèn)的管理員賬號和密碼為:admin/admin。
10. sonar插件 Sonar支持多種插件,插件的下載地址為:http://docs./display/SONAR/Plugin Library 將下載后的插件上傳到${SONAR_HOME}extensions\plugins目錄下,重新啟動sonar。 sonar默認(rèn)集成了Java Ecosystem插件,該插件是一組插件的合集:
11. 與jenkins集成 可以通過maven集成,也可以直接與jenkins集成。我這里選擇直接與jenkins集成。 (1)修改maven的主配置文件(${MAVEN_HOME}/conf/settings.xml文件或者 ~/.m2/settings.xml文件),在其中增加訪問Sonar數(shù)據(jù)庫及Sonar服務(wù)地址,添加如下配置:
這部分內(nèi)容具體可參照網(wǎng)上http://www.cnblogs.com/gao241/p/3190701.html
(2)在jenkins的插件管理中選擇安裝sonar jenkins plugin,該插件可以使項(xiàng)目每次構(gòu)建都調(diào)用sonar進(jìn)行代碼度量。 a.安裝插件
b.系統(tǒng)配置添加sonar的配置 進(jìn)入系統(tǒng)配置頁面對sonar插件進(jìn)行配置,如下圖:
然后點(diǎn)擊下面的保存。
c.配置構(gòu)建項(xiàng)目,增加Post Build Action 點(diǎn)擊要構(gòu)建的項(xiàng)目,在點(diǎn)擊左側(cè)的配置。 在頁面的最下面找到”構(gòu)建后操作”,選擇SonarQube。
It is no longer recommended to use SonarQube maven builder. It is preferable to set up SonarQube in the build environment and use a standard Jenkins maven target. 【解決】: 修改Build處:
最后去jenkins構(gòu)建項(xiàng)目,構(gòu)建完查看sonar控制臺:
12. 常見問題 Jenkins構(gòu)建完成后,sonar掃描代碼報錯: 解決: 卸載sonar的JavaScript插件。
六、Jenkins與Docker結(jié)合我這里沒有使用Docker Pipeline,直接在構(gòu)建完成后,執(zhí)行shell腳本,這樣更靈活。
1. 部署流程
2. 環(huán)境說明
3. 配置 由于在Jenkins機(jī)器上docker是使用root用戶運(yùn)行的,而Jenkins是使用普通用戶jenkins運(yùn)行的,所以要先配置下jenkins用戶可以使用docker命令。
另外在Jenkins機(jī)器上配置:
如果不配置這個,在執(zhí)行下面腳本時,會報錯誤:
在172.16.206.32機(jī)器上配置:
否則在機(jī)器172.16.206.32機(jī)器上執(zhí)行腳本時會報錯:
4. 安裝插件 登錄Jenkins,點(diǎn)擊“系統(tǒng)管理”,點(diǎn)擊“管理插件”,搜索插件“SSH plugin”,進(jìn)行安裝。 登錄Jenkins,點(diǎn)擊“Credentials”,點(diǎn)擊“Add domain”。
點(diǎn)擊“系統(tǒng)管理”,“系統(tǒng)配置”,找到“SSH remote hosts”。
5. 配置Post Steps 項(xiàng)目其他的配置不變,見上面的章節(jié)。 【注意】:腳本中用到的倉庫和認(rèn)證的賬號需要先在harbor新建好。
|
|