SpringCloud實戰:Jenkins持續集成

什麼是持續集成?java

簡單來講,大型系統拆分爲多個服務後,每一個小團隊負責一個服務,服務的更新、發佈會變得很頻繁,經過工具監控代碼的每次提交,持續進行自動化的構建過程,就是持續集成。linux

爲何要用 Jenkins 作持續集成?

Jenkins是一個功能強大的應用程序,容許持續集成和持續交付項目,是一個免費的開源平臺,能夠處理任何類型的構建或持續集成。git

安裝 Jenkins 與其餘必備環境
  • 1.服務器環境:centos7(192.168.68.141),Tomcat8 ,Git ,jdk1.8,maven3.5.2
  • 2.Git碼雲賬號與倉庫代碼,jenkins從該倉庫拉取代碼,進行構建編譯,構建完後,自動執行shell命令啓動服務,完成發佈,該倉庫下有多個Spring Cloud的服務,源碼
  • 在這裏插入圖片描述
  • 3.安裝 jdk1.8,maven3.5.2,把jdk與maven配置到 /etc/profile中,再 source /etc/profile 使其生效
    在這裏插入圖片描述
  • 4.centos安裝git,yum install git-core,輸入 git --version,配置git全局用戶與郵箱信息,先把 git 上的項目 clone 到服務器上,看經過 git 命令是否能克隆項目,此步驟很重要,在家目錄拉取代碼 git clone git@gitee.com:zhuyu1991/spring-cloud.git 命令的方式拉取到本地,第一次構建時在jenkins中配置該目錄,以後的構建,須要配置jenkins的工做區,在 /root/.jenkins/workspace/ 下,下面有說明, 再對jenkins配置按期拉取倉庫中的代碼進行構建,下面截圖說明倉庫的代碼拉到了本地。
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 4.下載 jenkins.war,https://jenkins.io/download/
  • 5.下載 Tomcat ,https://tomcat.apache.org/
  • 6.把 jenkins.war 包放在 tomcat 的 webapps 目錄下,啓動tomcat
    在這裏插入圖片描述
  • 7.而後在瀏覽器中訪問 : http://192.168.68.141:8080/jenkins/ , 你將會看到以下界面 , 表明 Jenkins 已經部署完成了,下一步安裝配置 Jenkins
  • 獲取Jenkins admin的默認密碼 cat /root/.ssh/secrets/initalAdminPassword
    在這裏插入圖片描述
  • 8.進入選擇插件安裝界面,選擇第一個(Install suggested plugins)安裝默認Jenkins插件
  • 9.插件安裝完成以後,須要建立一個用戶
  • 10.進入系統主界面後,點擊左側的系統管理,再點擊又側的管理插件,jenkins須要安裝 Git plugin 、Maven Integration插件
  • 11.安裝完必備插件後,點擊系統管理,再點擊全局工具配置,給jenkins 配置 構建須要的 jdk、maven、git,jdk與maven的路徑已在 /etc/profile中配置,把路徑複製到對應的Home中,git的用默認
    在這裏插入圖片描述
  • 12.服務器生成ssh key,key分爲:id_rsa(私鑰),id_rsa.pub(公鑰),把公鑰配置到git倉庫的公鑰管理配置處,私鑰配置在jenkins中,jenkins憑藉私鑰向Git倉庫拉取代碼,Git倉庫經過私鑰與公鑰對比驗證決定是否能拉取
  • 在centos中輸入:ssh-keygen -t rsa -C 「your@email.com」,會在/root/.ssh/下生成2個文件,把公鑰配置到git倉庫的項目上,把私鑰配置到 jenkins 全局憑據中,查看公、私鑰:cat /root/.sshh/id_rsa
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 13.環境配置工做已經完成,回到主界面,點擊新建任務,輸入名稱,選擇構建maven項目,點擊保存,若是沒有maven說明jenkins的maven插件沒有安裝
    在這裏插入圖片描述
  • 14.開始配置 jenkins單個job

    選擇Git,輸入git倉庫地址,選擇Credentials憑據,就是前面建立的
    在這裏插入圖片描述
    勾選輪詢SCM,每隔10分鐘構建一次(H/10 * * * *),只要Git中數據有更新,則觸發構建任務
    在這裏插入圖片描述
    構建環境選擇 Add timestamps to the Console Output
    在這裏插入圖片描述
    注意:Pre Steps Build 須要輸入要構建項目的 pom.xml,第一次構建時,由於是在家目錄clone的,輸入 /root/spring-cloud/fast/pom.xml,第一次構建完後jenkins會把項目拷貝至它的工做目錄中 /root/.jenkins/workspace/ 下,第二次構建時須要修改此路徑,由於jenkins經過git拉取的代碼在此工做目錄下

Post Steps 構建完成後添加執行 shell 腳本,腳本的意思是查找eureka-server的進程,並殺死,而後啓動 eureka-server包
在這裏插入圖片描述
在這裏插入圖片描述web

  • 點擊保存,再點擊構建,左側會有一個藍白相間的進度條,點擊進度條上面的黑色三角形,查看控制檯輸出,能夠看到 maven 只在編譯項目
    在這裏插入圖片描述
    下面能夠看到構建成功了,因設置了構建成功後執行一段腳本,用來啓動服務
    因此接下來會執行的shell腳本,內容以下:
#!/bin/bash
echo "********************** Jenkins Stopping SpringBoot Application*************************"
jar_name=eureka-server-0.0.1-SNAPSHOT.jar
pid=`ps -ef | grep $jar_name | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
#!kill -9 強制終止
   echo "kill -9 的pid:" $pid
   kill -9 $pid
fi
file_path=/root/.jenkins/workspace/eureka-server/eureka/eureka-server/target/
echo "執行....."
java -jar $file_path$jar_name
echo "********************** Jenkins Started SpringBoot Application*************************"
1234567891011121314複製代碼

在這裏插入圖片描述
能夠看到日誌輸出 Started Eureka Server,ok到此構建完成了spring

訪問 eureka-server地址 http://192.168.68.141:10025/ ,能夠看到剛剛的構建成功了
在這裏插入圖片描述
由於上面配置了 輪詢 SCM,每隔10分鐘查詢一次Git倉庫,是否有代碼提交,有就會觸發構建,在Git倉庫改動代碼後提交(提交時的備註信息是:添加打印日誌),等待10分鐘的週期,看看是否會構建一次
隔了10多分鐘後,進行了一次自動構建,git提交時的備註信息也拉取過來了
在這裏插入圖片描述docker

好了,Jenkins輪詢拉取 Git 倉庫中的代碼,有變更就會觸發構建,構建後能夠執行自定義 shell 腳本,能夠很方便的作集成測試,打包到 docker 私有倉庫,再經過運維拉取docker鏡像到測試、正式環境進行上線
shell

補充一點,上面是 java -jar xxx.jar 的形式啓動,不是後臺啓動的,jenkins默認會在構建完成後殺掉構建過程當中有jenkins中shell命令觸發的衍生進程。jenkins根據BUILD_ID識別某個進程是否爲構建過程的衍生進程,故修改BUILD_ID後,jenkins就沒法識別是否爲衍生進程,則此進程能在後臺保留運行
1.改造 shell 腳本,能後臺啓動,在Post Steps中,替換以前的腳本,使用下面的腳本
在這裏插入圖片描述apache

OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe

#此處放入shell腳本或者shell命令
sh /restartBoot1.sh

BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
123456789複製代碼

2.而後在服務器的根目錄放一個 restartBoot1.sh 文件,該文件在centos上建立,而後把內容複製進去,由於windows上的文件格式與linux上的不同,啓動時會報錯,此處坑了我一下,內容以下:windows

#!/bin/bash
echo "********************** Jenkins Stopping SpringBoot Application*************************"
pid=`ps -ef | grep eureka-server-0.0.1-SNAPSHOT | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
#!kill -9 強制終止
   echo "kill -9 的pid:" $pid
   kill -9 $pid
fi
echo "執行....."
nohup java -jar /root/.jenkins/workspace/eureka-server/eureka/eureka-server/target/eureka-server-0.0.1-SNAPSHOT.jar &
echo "********************** Jenkins Started SpringBoot Application*************************"
123456789101112複製代碼

手動多構建幾回,能夠看服務器上 eureka-server的進程號,前面的被後面的kill,而後後面的後臺啓動
在這裏插入圖片描述centos

項目中使用了lombok,服務器上 jenkins 編譯報錯,須要更改maven complier的版本,低版本的才兼容

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
	</plugins>
</build>			
1234567891011121314151617複製代碼
相關文章
相關標籤/搜索