iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
DevOps

從0開始學習DevOps,並部署CICD至Java專案中系列 第 25

轉換容器,使用jenkinsci/bueocean image啟動Jenkins版本不相符問題(現有容器升級版本)

  • 分享至 

  • xImage
  •  
  • 說明如何在現有容器下升級Jenkins版本 (如果前一篇就有直接掛載jenkins.war,那這篇就不用看)
  • 說明如何清除快取資料

啟動成功後,基本上原先container相關資訊會一併複製進來

如果舊的 jenkins-data 沒有清空,在這一行應該會複製舊資料進來 - jenkins-data:/var/jenkins_home。

這一行指令的用途主要就是建立一個數據卷,可以讓Jenkins的相關數據與配置,保存在這個數據卷中,之後重新創建容器時,可以直接複製進去。

情境一:如果沒有掛載新版本的Jenkins.war檔進來,bueocean使用的jenkins版本比較舊,有可能會導致與原先舊容器的插件版本不相容

但發現我本來其實有四個項目,卻只有出現兩個項目,發現跟pipeline相關的都沒有顯示出來

https://ithelp.ithome.com.tw/upload/images/20231010/201620589tmbN2rng5.png

到Jenkins容器中的jobs中確認,其實是有複製成功為四個項目的資料的

https://ithelp.ithome.com.tw/upload/images/20231010/20162058Fq1SSNoc6Q.png

到管理Jenkins 的介面中就發現有很多插件都沒有複製成功,其中包含pipeline

https://ithelp.ithome.com.tw/upload/images/20231010/20162058u8EUFADrb1.png

解決方式:更新容器的Jenkins版本

在Jenkins重新下載Git插件,發現一直下載失敗,接著到Jenkins Git插件說明頁面一看才知道是版本問題。

有特別註明Jenkins版本至少要2.387.3以上,但是使用image jenkinsci/blueocean下載下來的版本只有2.346.3,因為image目前沒有再發布更新的版本,所以這邊需要單獨更新Jenkins的版本。

Jenkins官方下載新版本

https://ithelp.ithome.com.tw/upload/images/20231010/20162058jrE2eQZCRU.png

Jenkins 登入頁面後,右下角可以瀏覽Jenkins的版本

https://ithelp.ithome.com.tw/upload/images/20231010/20162058PHqON4xInH.png

進到Jenkins容器中使用以下指令,可以知道Jenkins啟動的方式是使用Jenkins.war,以及其存放在容器內的路徑位置。

ps -ef|grep java

接著我們從Jenkins官方下載新版本的.war檔

https://ithelp.ithome.com.tw/upload/images/20231010/20162058agEocVIxag.png

先複製容器內的jenkins.war,並且更名為 jenkins.war-bak

mv jenkins.war jenkins.war-bak

再把下載下來的war檔案,複製進去Jenkins容器內部。確認複製進去後,重啟服務

docker cp /Users/lulu/Desktop/jenkins.war api-jenkins-1:/usr/share/jenkins

更新Jenkins版本後重啟服務

重新登入後就會看到版本已經變成最新的2.414.2啦!!!
https://ithelp.ithome.com.tw/upload/images/20231010/20162058clNBOYE2Ci.png
上方那些所有紅色的版本提示,幾乎都不見了!

⇒ 接著進到插件管理,會看到有很多可以update的項目,全部一起update,重啟服務。

https://ithelp.ithome.com.tw/upload/images/20231010/20162058SZcS9ejSCK.png

關於版本不相同的提示處理

這邊會有版本衝突問題主要是,本來是使用image jenkins/jenkins:lts 啟動容器並下載插件,現在因為轉換為**jenkinsci/blueocean,但其中的 jenkins版本不同,但原先的插件是會一起複製到容器內的,所以還是會顯示有版本不相容的提醒,如果真的很不喜歡提示,有以下兩種方式

  1. 進到jenkins容器中把衝突的插件刪除。(也就是卸載)

重新於項目中執行pipeline

錯誤項目:hudson.plugins.git.GitException: Command "git config remote.origin.url

本來一直以為是權限問題,但後來發現是快取暫存資料的問題。

https://ithelp.ithome.com.tw/upload/images/20231010/20162058wNn0zpzort.png

找到工作目錄→ 刪除工作目錄

重新執行就沒有再遇到這個問題了。

如果希望創建全新的Jenkins Container容器的話,需要移除舊的數據卷

在啟動新的Jenkins Container之前,先把 jenkins-data 數據卷的資料清空,再創建新的Jenkins Container。

docker volume rm jenkins-data
docker volume create jenkins-data

另外補充官方也有提供如何自己構建一個較高版本的Jenkins image

就可以直接透過這個自己構建的image啟動容器。

詳情可以參考官方:Customize the official Jenkins Docker image, by executing the following two steps

FROM jenkins/jenkins:2.414.2-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"

上一篇
關於Jenkins使用Docker Dood與Dind、與官方推薦的jenkinsci/bueocean image
下一篇
Jenkins Pipeline是什麼?如何建立?
系列文
從0開始學習DevOps,並部署CICD至Java專案中30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言