docker安裝jenkins,jenkins遠程ssh發布springboot子項目全過程(挖坑踩坑之后總結的全過程)


一.什么是jenkins?

Jenkins是一款開源 CI&CD 軟件,用於自動化各種任務,包括構建、測試和部署軟件。

Jenkins 支持各種運行方式,可通過系統包、Docker 或者通過一個獨立的 Java 程序。

二.使用docker的方式安裝jenkins

docker安裝的話坑有點多的,比較推薦用war包安裝.(但是誰讓我頭鐵呢~✧(≖ ◡ ≖✿) )

1.搜索jenkins

docker search jenkins

 

 官網推薦安裝的是: jenkinsci/blueocean映像,所以我這里也安裝這個

 2.拉取下載

docker pull   jenkinsci/blueocean

2.運行鏡像

(這里有坑!注意!!)
docker run --name docker_jenkins -p 8181:8080 -v /usr/local/javasoft/jenkins/home:/var/jenkins_home  jenkinsci/blueocean

在這里掛在了目錄和端口之后然后發現並不能運行

 報錯Permission denied 一般是權限不足 ,那么我就在運行的時候加一個 -u 0  這命令的意思是覆蓋容器中內置的帳號,該用外部傳入,這里傳入0代表的是root帳號Id。這樣再啟動的時候就應該沒問題了,但是!你以為就加一個 -u 0就行了? 其實不是 為了一步到位 防止后面啟動成功部署的時候遇到問題,這里我先放一個能夠成功的命令

docker run -u 0 -d --name jenkinsci_blueocean  -p 8081:8080 -p 50000:50000  -v /var/run/docker.sock:/var/run/docker.sock   -v /usr/lib/jvm/java/bin/java:/usr/local/java/jdk1.8.0_252/bin/java  -v  /usr/lib/jvm/java:/usr/local/java/jdk1.8.0_252  -v /usr/local/apache-maven-3.6.3:/usr/local/maven  -v /usr/local/javasoft/jenkins/home:/var/jenkins_home  jenkinsci/blueocean

解釋:  把宿主機的docker java maven jenkins全部掛載起來,為了防止以后出現這樣的錯。其實java目錄可以不掛載,里面有自帶的java目錄 到時候進入容器自己 which java找到目錄添加就行了。后面具體操作都有。

 !!!這里還有個大坑  ≡ω≡  當時我就是這么啟動完成了。但是我忘記了給項目掛載目錄和端口了 ,雖然也有其他的解決方法,但是以防萬一 這里除了基本的掛載目錄之外。也要注意。萬一需要在本機運行的話。需要在上訴命令里面加上自己項目的端口或者tomcat的端口之類的別忘了

到這里安裝也就ok了,然后打開網址:ok 啟動成功 ,提示等待一下 那我就等一會

三.jenkins的使用安裝與發布

 1.使用jenkins安裝插件,發布項目前的准備

找到進程號進入jenkins 找到密碼

docker exec -it 318afac26836 /bin/bash
vi /var/jenkins_home/secrets/initialAdminPassword

ok找到。輸入之后登陸。

推薦使用直接點擊安裝推薦插件,后續用到什么插件再安裝。

 

安裝好了之后創建用戶,之后就是無限下一步

 

 ok完成,進入到了管理頁面

點擊系統管理 安裝插件

 

 

我這里需要裝 maven 插件  還有遠程部署項目的需求所以需要安裝ssh插件

插件名稱為:Maven Integration   和  Publish Over SSH

我這里就以maven舉例。(其他的插件也是同理這里以maven做演示) 點擊直接安裝 安裝完成后空閑時重啟jenkins

 

 

 

 安裝好了之后,會重啟一下,等待一下之后輸入剛才創建的賬號密碼,接下來就配置jdk git maven和ssh等一些配置

 

 

具體的地址 可以進入容器內部自己找地址。maven就是你剛才掛載的容器地址,我這里就不截圖了

 

 

接下來配置遠程主機的地址

也能配置本機的地址,上文我忘了給本機的項目開放端口就干脆用ssh連接本機發布一些項目這是后話這個看自己選擇

 

 

 

打開之后拉倒最后找到這個,配置遠程主機。有幾個配置幾個。看自己需求

 

 

 

如果遇到這個錯誤,你需要提前在服務器上創建好目錄不然會失敗

ok 這樣一切都配置完成了 開始准備發布項目了

2.發布項目

新建項目,選擇maven.

 

 

 

 

 

  

 

 

 

 

springboot里面肯定有很多子項目,直接發一整個項目肯定不現實,參考例子

package -pl 父目錄/子項目 -am -DskipTests

打包構建完成之后就是遠程發布了,這里選擇ssh

 

 

jar包的目錄地址:打開你的掛在的目錄之后找到workspace,都在這里面,找到你剛才創建的任務名,進入這個任務名之后,任務名之前的目錄是不用寫的。然后在任務名之后,舉例:csp-web開始找到你的jar包就行。

 

 ok 到這里就完成了。結尾附上腳本

腳本解釋,后續有腳本發布改進。這個有便於理解

#Jekins構建完成后會自動關閉進程及其子進程,加上這一句可以避免自動關閉
BUILD_ID=DONTKILLME
# 下面這一句代表該文件使用的是bash語法
#!/bin/bash
#獲取你想運行jar包的進程號,grep -v意為不包括(grep -v grep指的是不包括grep下的所有信息),awk '{print $2}'意為取第二個字段輸出,賦值給pid
pid=`ps -ef | grep 子工程jar包名稱.jar | grep -v grep | awk '{print $2}'`
#如果存在則把該進程殺掉,$符號表示獲取變量的值
if [ -n "$pid" ]
then
   kill -9 $pid
fi
#把jenkins打的jar包復制到自己指定的目錄下
cp  /jenkins/workspace/父工程項目名稱/子工程項目名稱/target/子工程jar包名稱.jar /自己指定的目錄路徑/
echo "啟動jar包"
#最后啟動jar包並把日志輸出到指定的文件中以便查看
nohup java -jar /自己指定的目錄路徑/子工程jar包名稱.jar > /自己指定的目錄路徑/csp.log &

ok到這里其實已經都ok了 

在這里就可以看到自己新建完成的任務

右擊立即構建

然后左邊列表有正在構建的列表,點進去

有當前構建的次數。上面有正在構建的進度條。點進去我們看控制台的輸出

 

點擊這個就可以看到輸出

 

然后就可以看自己的項目打包和發布日志。。。。。ok完成  (๑•̀ㅂ•́)و✧

到這里就結束了。可以到目標主機看看 有沒有剛才新建的文件夾和jar 還有項目是否運行

 

 👌!!到這里就結束了😄

改進:腳本發布

每個微服務有這樣寫腳本台麻煩了,那我們就單獨寫一個腳本出來執行腳本就行

1.創建測試腳本

touch test.sh

2.腳本內容

#!/bin/bash
source /etc/profile
echo '開始執行腳本'
project=$2
dir=/usr/local/javasoft/csp/$1/
echo "當前jar包:$project"
cd $dir
echo "當前目錄:$dir"
pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
echo "當前jar的pid為:$pid"
if [ -n "$pid" ]
then
   kill -9 $pid
fi
nohup java -jar $dir$project --spring.profiles.active=test >/dev/null 2>log &
echo "發布成功"
echo "具體日志詳情查看/usr/local/javasoft/csp/$1/logs"

3.賦權腳本

 ok這樣就完成了

chmod +x test.sh

4.修改ssh配置

 然后在任務配置里面 切換到腳本的目錄后,執行腳本就行。后面添加的2個參數,對應腳本的$1 $2 分別是項目名和jar包名

注意!這里也是有坑的。如果腳本未指定絕對路徑路徑的話可能會報錯

由於找不到遠程服務器的環境變量,所以在shell腳本中進行指定;另外,jenkins執行腳本很多情況下執行絕對路徑才行

下面是報錯截圖  

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM