mac通過docker一鍵部署Jenkins

2022-09-30 18:01:40

mac通過docker一鍵部署Jenkins

一、前言

程式猿開發任務本來就比較繁鎖,如果搭建各種開源的軟體還需要搜尋這樣那樣的設定,那基本上兩鬢斑白的頭髮基本上都快脫光了,如何找女朋友呢?難道一直和五姑娘為伴?所以自己當第一個吃螃蟹的人摸索了一些套路,編寫一些簡易的 shell 指令碼幫我們快速的搭建伺服器,猿們只要按著套路「一步一步」的操作,基本上都可以快速部署服務,也有《Jenkins自動安裝指令碼》,大家根據自己的實際情況進行操作。

二、系統設定

mac os:Monterey
mac version:12.4 (21F79)
mac type: MacBook Air (M1, 2020), Apple M1

docker desktop version:v4.10.0 
docker version:v20.10.17
docker-compose version: v1.29.2

三、安裝步驟

Dockerhub檢視映象地址

# 如果你比較懶可以使用最後的「Jenkins自動安裝指令碼」,mac電腦通用
https://hub.docker.com/r/jenkins/jenkins/tags

1、一鍵安裝

1.1、下載指令碼

https://gitee.com/xiaoyaojiugui/technical/blob/master/docker/foundations/cicd/jenkins

1.2、安裝程式

# 跳轉到指定資料夾,並執行如下命令:
sh ./jenkins.sh
1.2.1、安裝程式詳情
---------------函數開始執行---------------
1.1、檢查必要軟體,跳過此步驟,目錄已存在[/Users/jason.zhuo/data/docker/apps/jdk-17]
1.2、檢查必要軟體,跳過此步驟,目錄已存在[/Users/jason.zhuo/data/docker/apps/apache-maven-3.8.6]
1.3、檢查必要軟體,跳過此步驟,檔案已存在[/Users/jason.zhuo/codes/leisure/doc/technical/docker/foundations/cicd/jenkins/software/jenkins.war]

2.1、執行建立容器操作,跳過此步驟,映象已存在[jenkins/jenkins:latest]
2.2、執行建立容器操作,建立目錄並授權,執行命令:sudo mkdir -p -v /Users/jason.zhuo/data/docker/volumes/jenkins/{jenkins-home,conf} && sudo chown -R jason.zhuo /Users/jason.zhuo/data/docker/volumes/jenkins 
mkdir: created directory '/Users/jason.zhuo/data/docker/volumes/jenkins'
mkdir: created directory '/Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home'
mkdir: created directory '/Users/jason.zhuo/data/docker/volumes/jenkins/conf'
2.3、執行建立容器操作,執行命令:docker run -d -p 39090:8080 -p 50000:50000 -v /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home:/var/jenkins_home --name jenkins jenkins/jenkins:latest

2.4.1、執行建立容器操作,根據伺服器效能調整時間,預設休息 10 秒,--> Tue 20 Sep 2022 11:12:41 AM CST <--
2.4.2、執行建立容器操作,根據伺服器效能調整時間,預設休息 10 秒,--> Tue 20 Sep 2022 11:12:51 AM CST <--
2.5.1、執行建立容器操作,修改組態檔[/Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/hudson.model.UpdateCenter.xml]
2.5.2、執行建立容器操作,檢視組態檔,執行命令:cat /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/hudson.model.UpdateCenter.xml | grep 'url'

2.5.3、執行建立容器操作,修改組態檔[/Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/updates/default.json]
sed -i "" 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/updates/default.json && sed -i "" 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/updates/default.json

2.5.5、執行建立容器操作,拷貝設定[/etc/profile]到本地並設定環境變數,執行命令:sudo docker cp $(docker ps -a | grep jenkins | awk '{print $1}'):/etc/profile /Users/jason.zhuo/data/docker/volumes/jenkins/conf/
2.6.1、執行重建容器操作,其容器為[jenkins/jenkins:latest],執行命令: docker run -d -p 39090:8080 -p 50000:50000 --privileged=true -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home:/var/jenkins_home -v /Users/jason.zhuo/data/docker/volumes/jenkins/conf/profile:/etc/profile -v /Users/jason.zhuo/data/docker/volumes/jenkins/conf/.bashrc:/root/.bashrc -v /Users/jason.zhuo/data/docker/apps/apache-maven-3.8.6:/usr/local/apps/apache-maven-3.8.6 -v /Users/jason.zhuo/data/docker/apps/jdk-17:/usr/local/apps/jdk-17 --name jenkins jenkins/jenkins:latest
2.6.2、複製Jenkins的最新war包到指定目錄,執行命令:docker cp ./software/jenkins.war $(docker ps -a | grep jenkins | awk '{print $1}'):/usr/share/jenkins/jenkins.war
2.7.1、檢視容器狀態,執行命令:docker inspect --format='{{.State.Status}}' jenkins
2.7.2、檢視容器狀態,[exited],啟動命令:docker start jenkins
jenkins
2.7.3、檢視容器詳情,執行命令:docker ps | grep jenkins/jenkins:latest

3.1、其他待執行命令,登入容器其命令為:docker exec -it -u root jenkins /bin/bash
3.2、其他待執行命令,複製最新war包其命令為:docker cp ./jenkins.war $(docker ps -a | grep jenkins | awk '{print $1}'):/usr/share/jenkins/jenkins.war
---------------函數執行完畢---------------

注意:此處休息10秒,是因為剛啟動該檔案沒有初始完成(hudson.model.UpdateCenter.xml)
1.2.2、下載必要軟體詳情
1、檢查目標目錄,待執行指令碼的路徑為[/Users/jason.zhuo/code/leisure/doc/technical/docker/foundations/cicd/software],包括如下檔案:
2、檢查目標目錄,跳過此步驟,資料夾已存在[/Users/jason.zhuo/data/docker/apps]

3、檢查Maven軟體,其檔名[apache-maven-3.8.6],壓縮包名[apache-maven-3.8.6-bin.tar.gz]
4、檢查Maven軟體,解壓壓縮包,執行命令:tar -zxf apache-maven-3.8.6-bin.tar.gz
5、檢查Maven軟體,拷貝到指定目錄,執行命令:sudo cp -r apache-maven-3.8.6 /Users/jason.zhuo/data/docker/apps

6、檢查JDK軟體,其檔名[jdk-17],壓縮包[jdk-17_linux-aarch64_bin.tar.gz]
7、檢查JDK軟體,解壓壓縮包,執行命令:tar -zxf jdk-17_linux-aarch64_bin.tar.gz
8、檢查JDK軟體,重新命名檔案,執行命令:sudo mv jdk-17.0.4.1 jdk-17
9、檢查JDK軟體,拷貝到指定目錄,執行命令:sudo cp -r jdk-17 /Users/jason.zhuo/data/docker/apps

10、檢視目標目錄內容,執行命令:ls /Users/jason.zhuo/data/docker/apps

1.3、啟動成功後,即可正常存取

http://localhost:39090/login

1.4、檢視登入密碼

docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

1.5、外掛自定義安裝

注意:此處不安裝任何外掛,因為Jenkins的官方外掛下載地址速度非常慢。

1、獲取密碼,登入即可;
2、「選擇外掛來安裝」而非社群推薦的外掛 --> 選擇「無」 --> 然後點選「安裝」即可;
3、建立第一個管理員賬戶,只有建立了新賬戶併成功登入後,才能執行如下《步驟1.6》


1.6、修改國內外掛下載源

注意:執行完命令後請重啟!執行完命令後請重啟!執行完命令後請重啟!

1、Jenkins的官方外掛下載地址速度非常慢,需要替換成國內外掛地址;
2、手動更新設定,複製《1.2.1 安裝程式詳情》中的《2.5.3命令》,在終端執行即可;
3、執行完以下命令,需要重啟 jenkins 才能生效;

# 解決開啟登入介面時一直在轉圈圈,程式自動更新 update-center.json
sed -i "" 's/https:\/\/updates.jenkins.io\/update-center.json/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins\/updates\/update-center.json/g' /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-data/hudson.model.UpdateCenter.xml

# 替換成國內外掛地址,手動更新 default.json
# 其實有很多朋友會問,為什麼更新 default.json 不放在 shell 指令碼中操作呢?之前試過在 shell 指令碼中更新,但只要沒有建立第一個管理員賬戶,那 default.json 設定就會被還原成官方設定,請執行命令;
sed -i "" 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/updates/default.json && \
sed -i "" 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' /Users/jason.zhuo/data/docker/volumes/jenkins/jenkins-home/updates/default.json

1.7、容器內下載最新版本Jenkins

1.7.1、以root使用者登入容器
1、以root使用者登入容器
docker exec -it -u root jenkins /bin/bash

2、跳轉到指定目錄
cd /usr/share/jenkins

3、讓環境變數生效
source /etc/profile
1.7.2、在容器中下載jenkins的最新war包
# 1、如果容器內沒有wget命令,則安裝應用: 
sudo apt-get update && apt-get install wget

# 2、下載最新的映象
wget http://mirrors.jenkins.io/war/latest/jenkins.war
1.7.3、新舊war包替換
# 1、移除舊war包
rm -rf jenkins.war

# 2、重命令新war包
mv jenkins.war.1 jenkins.war
1.7.4、退出容器,並重啟應用
docker restart jenkins

1.8、手動安裝社群推薦的外掛

注意:如果安裝外掛時失敗,且有提示要更新 Jenkins 版本,操作請按《步驟1.7》
Jenkins -> Manage Jenkins -> Manage Plugins,點選Available

序號 外掛 是否安裝
1 Folders yes
2 OWASP Markup Formatter
3 Build Timeout yes
4 Credentials Binding
5 Timestamper yes
6 Workspace Cleanup yes
7 Ant yes
8 Maven Integration yes
9 GitHub Branch Source yes
10 Git yes
11 Pipeline yes
12 Pipeline: Groovy yes
13 Pipeline: Stage View yes
14 Pipeline: Declarative yes
15 Pipeline: Basic Steps yes
16 SSH Build Agents yes
17 Publish Over SSH yes
18 Matrix Authorization Strategy
19 Parameterized Trigger yes
20 Email Extension yes
21 JUnit yes
22 Localization: Chinese (Simplified) yes

1.9、解決問題

  • 開啟登入介面時,一直停留在「Please wait while Jenkins is restarting ...」
    解決方案:請參考《步驟1.6》

  • Jenkins的官方外掛下載地址速度非常慢,需要替換成國內外掛地址
    解決方案:請參考《步驟1.6》

  • Docker 中的 Jenkins 重啟時,「/etc/profile」環境變數失效
    解決方案:
    1.在/root/.bashrc檔案最下面新增如下指令:source /etc/profile
    2.儲存檔案,然後執行:source /root/.bashrc

1.10、解除安裝程式

備註:此步驟請慎用,執行指令碼時後面加任意引數即可解除安裝

# 引數1:即刪除容器
sh ./jenkins.sh del1

# 引數1:刪除容器和資料夾
sh ./jenkins.sh delete

# 引數2:即刪除映象,刪除後需要重新下載映象才能初始化容器
sh ./jenkins.sh del1 del2

1.10.1、解除安裝程式詳情

---------------函數開始執行---------------
1.1、執行容器刪除操作,跳過此步驟,檢查必要軟體
2.1、執行容器刪除操作,跳過此步驟,刪除原映象[jenkins/jenkins:latest]
2.2、執行容器刪除操作,跳過此步驟,建立目錄[/Users/jason.zhuo/data/docker/volumes/jenkins]
2.3、執行容器刪除操作,跳過此步驟,第一次初始化容器[jenkins]
2.4、執行容器刪除操作,跳過此步驟,休眠 120 秒
2.5、執行容器刪除操作,跳過此步驟,修改組態檔
2.6、執行容器刪除操作,執行命令:docker stop jenkins && docker rm jenkins
2.6、執行容器刪除操作,成功刪除容器[jenkins]
2.7、執行容器刪除操作,跳過此步驟,第二次初始化容器[jenkins]
2.8、執行容器刪除操作,跳過此步驟,檢查容器狀態
2.9.1、執行容器刪除操作,刪除資料夾,執行命令:sudo rm -rf /Users/jason.zhuo/data/docker/volumes/jenkins
2.9.2、執行容器刪除操作,成功刪除資料夾[/Users/jason.zhuo/data/docker/volumes/jenkins]
---------------函數執行完畢---------------

四、總結

自動化指令碼安裝完成後,原生的 Jenkins 基本上就可以隨便玩,文章如有不對之處請留言,會及時修正,謝謝閱讀!!

五、後記

所有文章均為本人原創,本人寫作的目的就是想幫助對技術有需要的人,所以歡迎同行轉載本站文章,但是,希望您註明來源,並留下原文連結地址,這是對文章作者的尊重,也是對知識的尊重。