什麼是持續集成?java
簡單來講,大型系統拆分爲多個服務後,每一個小團隊負責一個服務,服務的更新、發佈會變得很頻繁,經過工具監控代碼的每次提交,持續進行自動化的構建過程,就是持續集成。linux
Jenkins是一個功能強大的應用程序,容許持續集成和持續交付項目,是一個免費的開源平臺,能夠處理任何類型的構建或持續集成。git
Post Steps 構建完成後添加執行 shell 腳本,腳本的意思是查找eureka-server的進程,並殺死,而後啓動 eureka-server包web
#!/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複製代碼