湛江市建設(shè)局官方網(wǎng)站seo百度刷排名
一、jenkins是什么
1.Jenkins
的前身是Hudson,采用JAVA編寫的持續(xù)集成開源工具。Hudson由Sun公司在2004年啟動,第一個版本于2005年在java.net發(fā)布。2007年開始Hudson逐漸取代CruiseControl和其他的開源構(gòu)建工具的江湖地位。在2008年的JavaOne大會上在開發(fā)者解決方案中獲得杜克選擇大獎(Duke's Choice Award)。
在2010年11月期間,因為Oracle對Sun的收購帶來了Hudson的所有權(quán)問題。主要的項目貢獻者和Oracle之間,盡管達成了很多協(xié)議,但有個關(guān)鍵問題就是商標(biāo)名稱“Hudson”。甲骨文在2010年12月聲明擁有該名稱并申請商標(biāo)的權(quán)利。 因此,2011年1月11日,有人要求投票將項目名稱從“Hudson”改為“Jenkins”。2011年1月29日,該建議得到社區(qū)投票的批準(zhǔn),創(chuàng)建了Jenkins項目。
2011年2月1日,甲骨文表示,他們打算繼續(xù)開發(fā)Hudson,并認(rèn)為Jenkins只是一個分支,而不是重命名。因此,Jenkins和Hudson繼續(xù)作為兩個獨立的項目,每個都認(rèn)為對方是自己的分支。到2013年12月,GitHub上的Jenkins擁有567個項目成員和約1,100個公共倉庫,與此相對的Hudson有32個項目成員和17個公共倉庫。到現(xiàn)在兩者的差異更多,應(yīng)該說Jenkins已經(jīng)全面超越了Hudson。此外,大家可能是出于討厭Oracle的情緒,作為Java開發(fā)者天然地應(yīng)該支持和使用Jenkins。后面Hudson被Oracle捐給了Eclipse基金會,所以右邊這老頭有個Eclipse的光環(huán)加持。
2.jenkins簡介
Jenkins是一款開源 CI&CD 軟件,用于自動化各種任務(wù),包括構(gòu)建、測試和部署軟件的流程化管理軟件是一款插件式的管理軟件,方便功能擴展,目前有幾百個插件可以使用,覆蓋了版本管控、構(gòu)建工具、代碼質(zhì)量、構(gòu)建通知、集成外部系統(tǒng)、UI定制等;
持續(xù)集成的特點
它是一個自動化的周期性的集成測試過程,從檢出代碼、編譯構(gòu)建、運行測試、結(jié)果記錄、測試統(tǒng)計等都是自動完成的,無需人工干預(yù);
需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建;
需要有代碼托管工具支持;
持續(xù)集成的作用
保證團隊開發(fā)人員提交代碼的質(zhì)量,減輕了軟件發(fā)布時的壓力;
持續(xù)集成中的任何一個環(huán)節(jié)都是自動完成的,無需太多的人工干預(yù),有利于減少重復(fù)過程以節(jié)省時間、費用和工作量
3.為什么要用jenkins
一般規(guī)模較小的項目,對外部系統(tǒng)的依賴和服務(wù)調(diào)用很小,對于軟件的集成不是問題。但是隨著軟件復(fù)雜度的增加,對集成提出了更多的要求,持續(xù)集成的好處就體現(xiàn)出來了。
1)對重復(fù)的編譯發(fā)布等操作進行抽象,減少重復(fù)過程。
2)及早發(fā)現(xiàn)各種沖突和錯誤,減少風(fēng)險。
3)任何時間、任何地點生成可部署的軟件
4.jenkins特點
易安裝:僅僅一個 java -jar jenkins.war,從官網(wǎng)下載該文件后,直接運行,無需額外的安裝,更無需安裝數(shù)據(jù)庫;
易配置:提供友好的GUI配置界面;
變更支持:Jenkins能從代碼倉庫(Subversion/CVS)中獲取并產(chǎn)生代碼更新列表并輸出到編譯輸出信息中;
支持永久鏈接:用戶是通過web來訪問Jenkins的,而這些web頁面的鏈接地址都是永久鏈接地址,因此,你可以在各種文檔中直接使用該鏈接;
集成E-Mail/RSS/IM:當(dāng)完成一次集成時,可通過這些工具實時告訴你集成結(jié)果(據(jù)我所知,構(gòu)建一次集成需要花費一定時間,有了這個功能,你就可以在等待結(jié)果過程中,干別的事情);
JUnit/TestNG測試報告:也就是用以圖表等形式提供詳細(xì)的測試報表功能;
支持分布式構(gòu)建:Jenkins可以把集成構(gòu)建等工作分發(fā)到多臺計算機中完成;
文件指紋信息:Jenkins會保存哪次集成構(gòu)建產(chǎn)生了哪些jars文件,哪一次集成構(gòu)建使用了哪個版本的jars文件等構(gòu)建記錄;
支持第三方插件:使得Jenkins 變得越來越強大;
二、jenkins的CI/CD流程
開發(fā)環(huán)境
推送代碼->編譯->生成的jar包發(fā)布到私服->打包為docker鏡像->推送到Harbor鏡像倉庫->部署到k8s集群->健康檢查(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗
測試環(huán)境
1、推送代碼->編譯->生成的jar包發(fā)布到私服->打包為docker鏡像->推送到Harbor鏡像倉庫(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
2、測試人員觸發(fā)部署到k8s集群->健康檢查(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
預(yù)發(fā)布環(huán)境
1、推送代碼->編譯->生成的jar包發(fā)布到私服->打包為docker鏡像->推送到Harbor鏡像倉庫(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
2、測試人員|運維人員 觸發(fā)部署到k8s集群->健康檢查(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
生產(chǎn)環(huán)境
1、推送代碼->編譯->生成的jar包發(fā)布到私服->打包為docker鏡像->推送到Harbor鏡像倉庫(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
2、運維人員 觸發(fā)部署到k8s集群->健康檢查(成功,微信通知,c結(jié)束返回成功|失敗,微信通知,ci結(jié)束返回失敗)
三、jenkins的部署
Ⅰ、SSH部署
1.java環(huán)境
yum install -y java-11-openjdk
2.jenkins的war包下載
jenkins官網(wǎng):Jenkins
3.進行初始化
java -jar jenkins.war
##注意8080端口不要被占用
web訪問8080端口


4.設(shè)置為系統(tǒng)服務(wù)
4.1創(chuàng)建一個腳本文件
mkdir -p /home/jenkins/.auto
cd /home/jenkins/.auto
vim jenkins.sh
#!/bin/bash
export JENKINS_HOME=/home/.jenkins
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$MAVEN_HOME/bin:$JRE_HOME/bin:$PATH:$HOME/binpid=`ps -ef | grep jenkins.war | grep -v 'grep'| awk '{print $2}'| wc -l`if [ "$1" = "on" ];thenif [ $pid -gt 0 ];thenecho 'jenkins is running'
else#配置java安裝根路徑,和啟動war包的存儲路徑nohup /usr/java/jdk1.8.0_152/bin/java -jar /home/jenkins/jenkins.war > /home/jenkins/jenkins.log 2>&1 &fielif [ "$1" = "off" ];thenexec ps -ef | grep jenkins | grep -v grep | awk '{print $2}'| xargs kill -9fi
chmod +x jenkins.sh
4.2創(chuàng)建jenkins.service
vim /lib/systemd/system/jenkin.service
[Unit]
Description=Jenkins
After=network.target[Service]
Type=forking
ExecStart=/home/jenkins/.auto/jenkins.sh on
ExecReload=
ExecStop=/home/jenkins/.auto/jenkins.sh off
PrivateTmp=true[Install]
WantedBy=multi-user.target
啟動jenkins
systemctl daemon-reload
systemctl enable --now jenkins.service
Ⅱ、docker下部署
前提:docker http://t.csdn.cn/Vp2ZV
docker-compose http://t.csdn.cn/uDRK6
1.創(chuàng)建docker-compose.yml文件
version: '3'
services:docker_jenkins:user: rootrestart: alwaysimage: jenkins/jenkins:ltscontainer_name: jenkinsports:- 8888:8080- 50000:50000volumes:- /docking/jenkins_home/:/var/jenkins_home- /docking/docker.sock:/var/run/docker.sock- /docking/docker:/usr/bin/docker- /docking/docker-compose:/usr/local/bin/docker-compose