前置:環(huán)境配置
- 阿里云服務(wù)器1核2GB
- java 1.8.0._371
- maven apache-maven3.8.8
- git 1.8.3.1
docker和jenkins在一臺(tái)服務(wù)器上,環(huán)境的配置,對(duì)于java和maven可以自己下載對(duì)應(yīng)tar包進(jìn)行配置,記得配置環(huán)境,也可以使用yum進(jìn)行安裝。記得配置/etc/profile后source一下:source /etc/profile
Maven記得修改鏡像!?。?/li>
1. springboot測(cè)試項(xiàng)目
在本地創(chuàng)建一個(gè)簡(jiǎn)單的springboot項(xiàng)目,例如helloworld項(xiàng)目,寫一個(gè)簡(jiǎn)單的controller:
@RestController
public class HelloWorld {
@RequestMapping("/helloworld")
public String helloworld(){
return "hello";
}
}
2. 安裝jenkins和docker
2.1 安裝docker 和jenkins
下面的鏈接可以一直適用到j(luò)enkins的簡(jiǎn)單配置
安裝docker參考鏈接
在docker安裝完之后,使用docker pull jenkins的鏡像。
下拉jenkins鏡像
補(bǔ)充
運(yùn)行docker:
docker運(yùn)行參考
docker run -di --name=jenkins -p 宿主機(jī)ip(可自定義):8080(容器中jenkins端口默認(rèn)) -v 宿主機(jī)目錄:/var/jenkins_home(容器目錄) jenkins/jenkins:lts # docker啟動(dòng)Jenkins
docker run -itd -p 8080:8080 --name jenkins -u root --privileged=true -v /mydata/jenkins_docker/:/var/jenkins_home jenkins/jenkins:lts
可以參考安裝第一個(gè)鏈接,直到通過jenkins部署,然后通過
clean install -Dmaven.test.skip=true
來(lái)進(jìn)行打包。
拉去遠(yuǎn)程倉(cāng)庫(kù)的代碼可以參考下面鏈接
jenkins添加拉取代碼
可能遇到以下問題:
- 因?yàn)楸镜豷pringboot項(xiàng)目引用了自定義jar包,即通過maven遠(yuǎn)程倉(cāng)庫(kù)不能下載的jar包。需要以下配置。。
1.1 在springboot項(xiàng)目中創(chuàng)建lib文件,并將自定義jar包,復(fù)制到lib目錄下.
1.2 配置pom.xml
主要分為兩個(gè)部分,注意scope域不能省略,還有就是路徑要正確
<dependency>
<groupId>***</groupId>
<artifactId>*jar包名稱*</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/**.jar</systemPath>
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
參考鏈接:非mavenjar包
2. 因?yàn)閐ocker分為宿主機(jī)目錄和容器目錄,宿主機(jī)目錄極為阿里云服務(wù)器,容器目錄需要切換到docker相應(yīng)容器中進(jìn)行查看,下面提供兩種不同角色的切換方式
docker ps # 通過ps查看容器ID,
sudo docker exec -it 容器id /bin/bash #切換到指定容器的目錄
# 0 表示 root 用戶
docker exec -u 0 -it id /bin/bash #切換到root用戶
注意這個(gè)不同角色切換很重要!!!,在你成功打jar包后如果在指定容器中不能運(yùn)行,而在root用戶下能運(yùn)行,那么就是權(quán)限問題。
3. 配置jenkins下拉gitee倉(cāng)庫(kù)
因?yàn)閖enkins的默認(rèn)用戶為jenkins,需要切換到j(luò)enkins用戶去執(zhí)行ssh-keygen -t rsa
生成密鑰對(duì)來(lái)配置gitee和jenkins
參考鏈接:jenkins下拉gitee倉(cāng)庫(kù)
3 .自動(dòng)化部署
??如果上面兩步,你已經(jīng)成功通過jenkins打包jar包,并在容器目錄中可以查看到相應(yīng)的jar包,可以進(jìn)行下面操作。
??成功打jar包后,下面就是運(yùn)行的問題,如果在容器中直接通過java -jar進(jìn)行運(yùn)行會(huì)存在權(quán)限問題,而且成功運(yùn)行后,因?yàn)槭窃谌萜髦羞\(yùn)行,需要進(jìn)行IP轉(zhuǎn)化,才可以正確訪問。
??這里通過ssh將容器中打包好的jar包傳輸?shù)剿拗鳈C(jī)指定目錄。
3.1 jenkins配置
- 系統(tǒng)管理–>插件管理,下載對(duì)應(yīng)的插件
- 系統(tǒng)管理–>系統(tǒng)配置,配置SSH server
配置完成后,自己可以點(diǎn)擊下面的Test Configuration進(jìn)行測(cè)試,進(jìn)行相應(yīng)錯(cuò)誤的修改。 - 任務(wù)配置
exec command可以先不寫,可以先部署下看是否可以將容器中的jar包傳輸?shù)剿拗鳈C(jī)指定目錄。
如果可以進(jìn)行下面腳本的編寫
#!/bin/bash
source /etc/profile
#查看之前運(yùn)行的進(jìn)程id
pid=`ps -ef | grep ymxSeller-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
echo "部署前的pid進(jìn)程 :$pid"
# 關(guān)閉已經(jīng)啟動(dòng)的jar進(jìn)程
if [ -n "$pid" ]
then
kill -9 $pid
else
echo "進(jìn)程沒有啟動(dòng)"
fi
sleep 5s
#copy jar 到啟動(dòng)目錄
\cp -rf /home/workplace/maven-demo/ymxSeller-0.0.1-SNAPSHOT.jar /home/workplace/maven-demo/restartdir/ymxSeller-0.0.1-SNAPSHOT.jar
cd /home/workplace/maven-demo/restartdir
nohup /usr/java/jdk1.8.0_371/bin/java -jar /home/workplace/maven-demo/restartdir/ymxSeller-0.0.1-SNAPSHOT.jar > /home/workplace/maven-demo/restartdir/springboot.log 2>&1 &
echo "腳本執(zhí)行完畢"
sleep 5s
pid=`ps -ef|grep ymxSeller-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
# 檢驗(yàn)進(jìn)程是否啟動(dòng)
if [ -n "$pid" ]
then
echo "部署后的pid進(jìn)程 :$pid"
echo "啟動(dòng)成功"
else
echo "進(jìn)程沒有啟動(dòng)"
fi
~
創(chuàng)建restart.sh并編寫上面的腳本,大致意思就是查詢?cè)搄ar包是否正在運(yùn)行,如果正在運(yùn)行,kill掉該進(jìn)程,然后重新運(yùn)行新的jar包??梢宰约翰榭慈罩?br> 注意里面的jar包名稱和路徑。文件夾必須存在,日志文件可以自己生成。
BUG合集
1、建議將MAVEN_HOME、GIT_HOME、JAVA_HOME更新為docker中jenkins容器中的掛載目錄,其目錄可以在啟動(dòng)jenkins容器時(shí)進(jìn)行指定:
路徑:系統(tǒng)管理–>全局工具配置
2、Build step ‘Invoke top-level Maven targets’ marked build as failure
錯(cuò)誤分為三種情況:
2.1 檢查你的Maven指定目錄是否正確,可以使用sudo docker exec -it 容器id /bin/bash 命令進(jìn)入容器環(huán)境進(jìn)行查看。
2.2 服務(wù)器內(nèi)存不足,因?yàn)槲也渴鸬氖莝pringboot項(xiàng)目,會(huì)啟動(dòng)JAVA進(jìn)程,而jenkins本身也會(huì)啟動(dòng)JAVA進(jìn)程。可以使用ps -ef | grep java查看相應(yīng)進(jìn)程。這里可以使用kill -9 的命令殺死當(dāng)前項(xiàng)目java進(jìn)程重新部署,也可以通過配置jenkins的內(nèi)部JVM參數(shù)進(jìn)行調(diào)優(yōu)。
2.3 檢查項(xiàng)目pom.xml中是否有當(dāng)前jdk不支持的jar包,比如你使用的是jdk11,卻使用了jdk8自帶的sun.misc.BASE64Encoder;
重啟docker容器,附啟動(dòng)命令:
docker run --name jenkins
-u root
-d -p 8080:8080
-p 50000:50000
–privileged=true
-v /mydata/jenkins_docker/:/var/jenkins_home
-v /usr/local/apache-maven-3.8.8:/usr/local/apache-maven-3.8.8
-v /usr/java/jdk1.8.0_371:/usr/local/jdk1.8.0_371
jenkins/jenkins:lts文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-437871.html
#參考鏈接:
jar包自動(dòng)部署文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437871.html
到了這里,關(guān)于docker+jenkins自動(dòng)化部署springboot項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!