mac通過docker一鍵部署Jenkins

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電腦通用
//hub.docker.com/r/jenkins/jenkins/tags

1、一鍵安裝

1.1、下載腳本

//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、啟動成功後,即可正常訪問

//localhost:39090/login

1.4、查看登錄密碼

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

1.5、插件自定義安裝

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

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

image
image

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 //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 基本上就可以隨便玩,文章如有不對之處請留言,會及時修正,謝謝閱讀!!

五、後記

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