使用Jenkins優雅部署Java專案【超級詳細的實戰教程】

李博帥發表於2022-11-24

環境準備

  • centos 7
  • Java 1.8
  • Maven 3.6.3
  • Docker 20.10.17
  • Gitlab gitlab-ce:14.0.5-ce.0
  • Jenkins 2.60.3(強烈建議,其他版本有坑)

Jenkins相關依賴環境安裝

Java環境安裝

雖然我們是採用docker的方式安裝Jenkins,所有的依賴映象都已經打包好了。但是我們在後續使用Jenkins的過程中,會採用Jenkins主機上的Java執行環境,所以我們還是要安裝一下java JDK8、並且配置一下環境變數。

推薦教程:https://segmentfault.com/a/11...

maven環境安裝

推薦教程:https://segmentfault.com/a/11...

部署docker安裝

推薦教程:https://segmentfault.com/a/11...

Gitlab安裝

推薦教程:https://segmentfault.com/a/11...

部署jenkins(基於docker)

我們可以自己在本機上部署jenkins,也可以使用docker進行部署,這次我們選擇docker來部署。

  1. 備份一下/usr/local/java目錄和/usr/local/apache-maven-3.6.3目錄裡面的

    cp -r /usr/local/java /usr/local/java_bak
    cp -r /usr/local/apache-maven-3.6.3 /usr/local/apache-maven-3.6.3_bak
  2. 執行以下命令即可:

    docker run -d -p 8001:8080 -p 8002:50000 -v /usr/local/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /etc/local/java:/etc/local/java -v /usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3 --name jenkins jenkins:2.46.3
    可以嘗試在命令中加入-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai,這樣可以解決Jenkins時區不對的問題(待測試),也可以在部署後採用文中最後解決方案。
    其中要注意的是:
    • 掛載/usr/local/jenkinsHome是jenkins的主目錄
    • 掛載/etc/localtime目錄是為了容器內的jenkins與主機時間一致;
    • 掛載/etc/local/java是同步主機的java到容器中的jenkins(不然後面會有坑)
    • 掛載/usr/local/apache-maven-3.6.3是同步主機的maven到容器中的jenkins(不然後面會有坑)

    下面是命令的解釋:

    docker run -d   
     -p 8001:8080\ # 將容器中的埠8080,掛載到主機埠8001
     -p 8002:50000\ # 將容器中的埠50000,掛載到主機埠8002
     -v /usr/local/jenkins:/var/jenkins_home\ # 將容器中的目錄/var/jenkins_home,掛載到主機目錄/usr/local/jenkins
     -v /etc/localtime:/etc/localtime\ # 將容器中的目錄/etc/localtime,掛載到主機目錄/etc/localtime
     -v /etc/local/java:/etc/local/java\ # 將容器中的目錄/etc/local/java,掛載到主機目錄/etc/local/java
     -v /usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3\ # 將容器中的目錄/usr/local/apache-maven-3.6.3,掛載到主機目錄/usr/local/apache-maven-3.6.3
     --name jenkins\ # 給容器命名為jenkins
     jenkins:2.46.3 # 選擇映象
  3. 執行命令docker ps,我們會發現jenkins並沒有被啟動起來。這是因為我們剛才掛載的目錄,jenkins容器並沒有訪問啟動。所以,我們需要給掛載的目錄給予許可權。

    chown -R 1000:1000 /usr/local/java
    chown -R 1000:1000 /usr/local/apache-maven-3.6.3
    chown -R 1000:1000 /usr/local/jenkins
    chown -R 1000:1000 /etc/localtime
  4. 重新執行下面命令,以啟動jenkins。

    docker run -d -p 8001:8080 -p 8002:50000 -v /usr/local/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/local/java:/usr/local/java -v /usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3 --name jenkins jenkins:2.46.3
  5. 檢視jenkins是否啟動成功,執行命令docker ps,檢視是否有jenkins
    image.png
  6. 在瀏覽器訪問http://主機ip:8001,如果出現下面頁面表示成功
    image.png
  7. 執行命令docker logs jenkins,複製日誌檔案中的密碼。
    image.png
  8. 瀏覽器訪問http://主機ip:8001,到剛才複製的密碼,貼上到輸入框中。
    image.png
  9. 點選continue,出現以下頁面,選擇預設選項(安裝推薦外掛),繼續即可。
    image.png
  10. 等待外掛安裝完成,如果有安裝失敗的,多試幾次就行。(也可以後面再安裝)
    image.png
  11. 外掛安裝完畢後,會自動進入到建立賬號的頁面。我們這裡為了快速進行,直接選擇使用admin賬戶繼續
    image.png
  12. 設定jenkins的路徑,我們預設繼續即可
    image.png
  13. 點選開始使用jenkins,即可進入jenkins管理皮膚
    image.png
    image.png

使用Jenkins部署Java專案

  1. 點選Manage Jenkins,進入jenkins管理
    image.png
  2. 選擇Manage Plugins,進入jenins外掛管理
    image.png
  3. 選擇Available,進行外掛搜尋安裝
    image.png
  4. 搜尋maven,勾選第一個Maven Integration,最後選擇Download now...restart.
    image.png
  5. 等待外掛下載完成,最後選擇空閒時重啟即可
    image.png
    jenkins安裝外掛可能重啟可能會出現掛掉的情況,這個時候我們只需要手動執行docker start jenkins即可。
  6. 同理安裝外掛Publish Over SSH
    image.png
  7. 重啟進入jenkins後,我們重新進入Manager Jenkins,點選進入管理使用者
    image.png
    image.png
  8. 選擇admin旁邊的小齒輪,然後下滑找到密碼項。修改密碼,儲存即可。
    image.png
    image.png
  9. 重登jenkins,點選進入Manage Credentials,進行全域性賬號密碼配置
    image.png
    image.png
    image.png
  10. 選擇新增一些憑證,設定賬號密碼
    image.png
    image.png

    • 其中id,為憑證的唯一識別符號,只要保證唯一不重複即可。
    • 描述用於標識這個憑證是幹什麼的,例如圖中的host@xiaoYan,就意思為xiaoYan 主機的賬號密碼
  11. 按照上一步,我們同樣新增一條用於gitlab認證的憑證記錄
    image.png
  12. 再次進入Manager Jenkins,點選進入系統配置。然後一直下拉到最後,找到SSH Servers配置項,點選新增。按照下圖指示配置完畢後,點選儲存退出即可。
    image.png
    image.png

    • name: 給主機起一個名字
    • Hostname: 主機ip
    • Username: 主機使用者名稱
    • Remote Directory: 主機預設目錄
    • Passphrase / Password:主機使用者密碼
  13. 這次我們來配置全域性工具配置
    image.png
    首先配置全域性預設maven配置檔案,路徑填寫jenkins同主機上的maven配置檔案路徑
    image.png
    然後配置Java目錄,如果出現圖中的提示,表示主機的Java目錄並沒有掛載到docker容器的Jenkins中。所以需要我們進行將/usr/local/java手動掛載到Jenkins中。(如果前面的命令沒有錯,這裡不會出現這種情況的。但是我自己執行的過程中命令有偏差,導致了java目錄沒有被正確掛載上)

    手動掛載Docker目錄:https://segmentfault.com/a/11...
    在配置git目錄。在jenkins主機上執行whereis git,得到git命令所在目錄。
    image.png
    最後配置一下maven目錄。
    image.png
    儲存退出即可。
  14. 終於到了配置Java專案的時候了,點選新建專案
    image.png
  15. 選擇maven風格,輸入專案名稱(這個名稱會是jenkins下workspeace的工程目錄)
    image.png
  16. 新增描述
    image.png
  17. 配置gitlab地址,其中Credentials選擇我們之前在全域性Credentials配置的gitlab認證,分支選擇我們需要打包部署的分支。
    image.png
  18. 配置SSH Publishers,即jar包打包的動作
    image.png
  19. 配置Build,即構建需要的專案pom.xml檔案,和打包命令。
    image.png
  20. 儲存退出,點選立即構建。等等出現綠色小對鉤,即表示構建成功。
    image.png
  21. 登入部署jar包的伺服器,檢視jar包有沒有被正確的打包傳送過指定得目錄。java服務有沒有被正確的啟動起來。
    image.png

踩坑

Jenkins時區不對,差8個小時,解決方案

# 進入容器
docker exec -it -u root jenkins bash

#修改容器時區
echo  'Asia/Shanghai' > /etc/timezone

# 檢視修改後的容器時區
cat /etc/timezone
exit

# 重啟jenkins容器
docker restart jenkins

相關文章