使用 Docker 安裝 Jenkins 并實現項目自動化部署

安裝步驟

1. 拉取 Jenkins 鏡像

首先,拉取 Jenkins 鏡像:

docker pull jenkins/jenkins:2.500-jdk21

2. 創建 Jenkins 工作目錄

創建 Jenkins 工作目錄,并設置權限:

// Jenkins 創建數據卷(持久化數據)

mkdir -p /mnt/datadisks/docker-root/jenkins_5080/{jenkins_home,www}

mkdir -p /mnt/datadisks/docker-root/jenkins_5080/www/html

chmod 777 /mnt/datadisks/docker-root/jenkins_5080
chmod 777 /mnt/datadisks/docker-root/jenkins_5080/jenkins_home
chmod 777 /mnt/datadisks/docker-root/jenkins_5080/www/html

3. 啟動 Jenkins 容器

啟動 Jenkins 容器,并映射端口和掛載卷:

#啟動容器
docker run --name jenkins-5080 -d --restart=always -p 5080:8080 -p 50000:50000  \
  -v /mnt/datadisks/docker-root/jenkins_5080/jenkins_home:/var/jenkins_home \
  -v /mnt/datadisks/docker-root/jenkins_5080/www/html:/var/www/html \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:2.500-jdk21

# 獲取jenkins密碼
docker exec jenkins-5080 cat /var/jenkins_home/secrets/initialAdminPassword

-p 5080:8080:Web 訪問端口(宿主機端口:容器端口)

-p 50000:50000:Jenkins 代理通信端口

-v /mnt/datadisks/docker-root/jenkins_5080/jenkins_home:/var/jenkins_home:持久化 Jenkins 配置和數據

/var/www/html:/var/www/html:將nginx中的靜態資源目錄共享到jenkins中

/mnt/datadisks/docker-root/jenkins_5080/www/html : /var/www/html`:將nginx中的靜態資源目錄共享到jenkins中

-v /var/run/docker.sock:/var/run/docker.sock:允許容器內使用宿主機的 Docker(可選,用于在 Jenkins Pipeline 中調用 Docker)

--restart unless-stopped:容器自動重啟策略

4. 獲取初始管理員密碼

查看 Jenkins 容器日志,獲取初始管理員密碼:

docker logs jenkins-5080

或者進入容器,查看密碼文件:

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

5. 訪問 Jenkins

在瀏覽器中訪問 Jenkins:

http://<your_server_ip>:8080

輸入獲取的初始管理員密碼,完成初始設置。
jenkinsAdmin AdminJenkins

6. 配置插件源

為了加快插件下載速度,可以將插件源設置為國內鏡像。編輯 hudson.model.UpdateCenter.xml 文件:

vim /usr/local/jenkins/hudson.model.UpdateCenter.xml

將 URL 修改為:

<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>

xxxxxxxxxx 修改配置文件重啟nginx容器docker exec -it nginx service nginx reload查詢docker中nginx容器的日志的前10行docker logs --tail="10" nginxdocker容器中安裝vim(如果下載不下來,需要配置下國內鏡像)apt-get updateapt-get install vimtext

docker restart jenkins-5080

配置 Jenkins

配置 JDK

Jenkins 容器內已經默認安裝了 JDK,可以在全局配置中設置 JDK 路徑:

/opt/java/openjdk

配置 Maven

安裝 Maven 插件,并在全局工具配置中設置 Maven 路徑:

/usr/local/maven

創建 Jenkins 任務

創建 Maven 項目

在 Jenkins 上新建一個 Maven 項目,配置代碼倉庫地址和構建命令。構建完成后,可以通過執行 Shell 腳本來啟動服務。

示例 Shell 腳本


\#!/bin/bash

SERVER_NAME=jenkins-demo

APP_HOME=$(pwd)

JAR_NAME=jenkins-demo-0.0.1-SNAPSHOT.jar

JAR_PATH=${APP_HOME}/target

PID_FILE="${APP_HOME}/${SERVER_NAME}.pid"

if [ -f "${PID_FILE}" ]; then

PID=$(cat "${PID_FILE}") && kill -9 $PID && echo "kill process ${PID} finished!"

fi

cd $JAR_PATH

chmod 755 $JAR_NAME

BUILD_ID=dontKillMe nohup java -jar $JAR_NAME &

JAVA_PID=$!

echo "${JAVA_PID}" > "${PID_FILE}"

通過上述步驟,即可使用 Docker 安裝 Jenkins 并實現項目的自動化部署

發布SpringBoot項目

1、Publish Over SSH

在插件管理中安裝插件 Publish Over SSH

在系統管理 -> 系統配置中設置 Publish Over SSH,用于目標服務器的連接

  • Dashboard->Manage Jenkins -> System
    找到 SSH Servers 添加 SSH 遠程服務
圖1.png

新建任務

由于是 Gradle 項目,所以我們選擇 “構建一個自由風格的軟件項目

下面說幾個關鍵的配置點:

圖2.png

到達一定的天數或構建數目則自動廢棄前面的構建

圖3.png

構建觸發器,有定時、輪詢等情況。GitHub hook選項的意思是,檢測代碼有沒有更新,如果有更新則自動構建。但前提是:GitHub收到提交的代碼后要主動通知Jenkins,所以Jenkins所在服務器一定要有外網IP,并且還需要做一系列的配置,本文我們暫時不做詳細的介紹。


圖4.png

建步驟選的是:執行 shell,由于我要打包的是 manager 模塊,所以先進入 manager 目錄。先執行 gradle clean 清除之前打的包,再執行 gradle build 命令重新打包。整個項目的代碼下載存放的路徑在服務器的:/root/.jenkins/workspace 目錄下,GradleTest 為我們在 Jenkins 中創建的構建任務名。

圖5.png

構建后操作選擇:Send build artifacts over SSH,將打好的 Jar 包發送到目標服務器指定的目錄下,然后根據命令生成鏡像,運行容器。

注意:生成鏡像的前提是目標服務器上已經安裝完成 docker 服務,基礎鏡像已經下載完成,dockfile已經正確編寫。

構建后操作 在遠程服務器上執行 下面的腳本文件


#!/bin/bash
#1.2.3.4.5.6 需要根據不同項目修改不同值
#1.服務名稱
SERVER_NAME="mgt-admin"
#2 image 版本
Image_Version="v1.0"
#3 創建 image 的目錄
Creat_Image_Path="/docker-images-creat/mgt-hotel"

#4.啟動dev配置文件
CONFIG_NAME=prod

#5.源jar路徑,mvn打包完成之后,target目錄下的jar包或jar包名稱(包含后綴)
JAR_NAME="/docker-images-creat/hotel-booking/target/hms-mgt-0.0.1.jar"

#6.端口
PORT=9060

echo "清理$SERVER_NAME的容器"

containerId=$(docker ps -a | grep -w  $SERVER_NAME | awk '{print $1}')
if [ -n "$containerId" ];
then
 docker stop $containerId
 docker rm $containerId
 echo "成功停止、刪除容器--"$containerId
fi

imageId=$(docker images | grep -w $SERVER_NAME | awk '{print $3}')
if [ -n "$imageId" ];
then
 docker rmi -f  $imageId
 echo "成功刪除鏡像--"$imageId
fi

echo "停止并清除鏡像完成,進入創建新鏡像過程"

# echo "復制jar包到/createImages/demo目錄下"

#復制jar包到/createImages/demo目錄下
# cp $JAR_PATH/$JAR_NAME $JAR_WORK_PATH

#切換到demo創建鏡像文件夾目錄下
cd $Creat_Image_Path

#修改文件權限
chmod 755 $JAR_NAME

echo "執行命令創建新鏡像"

#執行docker創建鏡像命令
docker build -t $SERVER_NAME:$Image_Version .

#刪除Dockerfile文本文件
# rm /var/jenkins_home/createImages/$SERVER_NAME/Dockerfile

#運行鏡像
docker run --name $SERVER_NAME --restart=always -d -p $PORT:8080 \
-v /mnt/docker-root/hotel-booking/admin/config:/config/ \
-v /mnt/docker-root/hotel-booking/admin/logs-root:/logs-root/ \
-v /mnt/docker-root/hotel-booking/admin/upload_root:/upload_root/ \
--network my-net --log-opt max-size=10m --log-opt max-file=3 $SERVER_NAME:$Image_Version

echo "運行新鏡像,流程完畢,端口號為:$PORT"
 

這樣我們一次構建就已經完成了 代碼下載、打包、停止并刪除目標服務器指定的容器、刪除鏡像、重新生成鏡像、啟動容器等步驟,通過這一系列的動作完成了整個SpringBoot的項目的環境部署。

通過 docker 命令查詢容器運行的日志可查看容器運行的情況,如下:

docker logs -f 85f42a7d3230
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容