環境準備
- 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來部署。
備份一下
/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
執行以下命令即可:
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 # 選擇映象
- 掛載
執行命令
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
重新執行下面命令,以啟動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
- 檢視jenkins是否啟動成功,執行命令
docker ps
,檢視是否有jenkins
- 在瀏覽器訪問
http://主機ip:8001
,如果出現下面頁面表示成功
- 執行命令
docker logs jenkins
,複製日誌檔案中的密碼。
- 瀏覽器訪問
http://主機ip:8001
,到剛才複製的密碼,貼上到輸入框中。
- 點選continue,出現以下頁面,選擇預設選項(安裝推薦外掛),繼續即可。
- 等待外掛安裝完成,如果有安裝失敗的,多試幾次就行。(也可以後面再安裝)
- 外掛安裝完畢後,會自動進入到建立賬號的頁面。我們這裡為了快速進行,直接選擇
使用admin賬戶繼續
。
- 設定jenkins的路徑,我們預設繼續即可
- 點選
開始使用jenkins
,即可進入jenkins管理皮膚
使用Jenkins部署Java專案
- 點選
Manage Jenkins
,進入jenkins管理
- 選擇
Manage Plugins
,進入jenins外掛管理
- 選擇
Available
,進行外掛搜尋安裝
- 搜尋
maven
,勾選第一個Maven Integration
,最後選擇Download now...restart
.
- 等待外掛下載完成,最後選擇
空閒時重啟
即可
jenkins安裝外掛可能重啟可能會出現掛掉的情況,這個時候我們只需要手動執行docker start jenkins
即可。 - 同理安裝外掛
Publish Over SSH
- 重啟進入jenkins後,我們重新進入
Manager Jenkins
,點選進入管理使用者
- 選擇admin旁邊的小齒輪,然後下滑找到
密碼
項。修改密碼,儲存即可。
- 重登jenkins,點選進入
Manage Credentials
,進行全域性賬號密碼配置
選擇
新增一些憑證
,設定賬號
、密碼
等
- 其中id,為憑證的唯一識別符號,只要保證唯一不重複即可。
- 描述用於標識這個憑證是幹什麼的,例如圖中的
host@xiaoYan
,就意思為xiaoYan 主機
的賬號密碼
- 按照上一步,我們同樣新增一條用於gitlab認證的憑證記錄
再次進入
Manager Jenkins
,點選進入系統配置
。然後一直下拉到最後,找到SSH Servers
配置項,點選新增。按照下圖指示配置完畢後,點選儲存退出即可。
- name: 給主機起一個名字
- Hostname: 主機ip
- Username: 主機使用者名稱
- Remote Directory: 主機預設目錄
- Passphrase / Password:主機使用者密碼
這次我們來配置
全域性工具配置
。
首先配置全域性預設maven配置檔案,路徑填寫jenkins同主機上的maven配置檔案路徑
然後配置Java目錄,如果出現圖中的提示,表示主機的Java目錄並沒有掛載到docker容器的Jenkins中。所以需要我們進行將/usr/local/java
手動掛載到Jenkins中。(如果前面的命令沒有錯,這裡不會出現這種情況的。但是我自己執行的過程中命令有偏差,導致了java目錄沒有被正確掛載上)手動掛載Docker目錄:https://segmentfault.com/a/11...
在配置git目錄。在jenkins主機上執行whereis git
,得到git
命令所在目錄。
最後配置一下maven目錄。
儲存退出即可。- 終於到了配置Java專案的時候了,點選
新建專案
- 選擇
maven風格
,輸入專案名稱(這個名稱會是jenkins下workspeace的工程目錄)
- 新增描述
- 配置gitlab地址,其中
Credentials
選擇我們之前在全域性Credentials配置的gitlab認證,分支選擇我們需要打包部署的分支。
- 配置
SSH Publishers
,即jar包打包的動作
- 配置
Build
,即構建需要的專案pom.xml檔案,和打包命令。
- 儲存退出,點選
立即構建
。等等出現綠色小對鉤,即表示構建成功。
- 登入部署jar包的伺服器,檢視jar包有沒有被正確的打包傳送過指定得目錄。java服務有沒有被正確的啟動起來。
踩坑
Jenkins時區不對,差8個小時,解決方案
# 進入容器
docker exec -it -u root jenkins bash
#修改容器時區
echo 'Asia/Shanghai' > /etc/timezone
# 檢視修改後的容器時區
cat /etc/timezone
exit
# 重啟jenkins容器
docker restart jenkins