docker+jenkins自動部署

一、下載Jenkins鏡像,安裝啟動

1:創(chuàng)建docker掛載目錄,目的是將docker中Jenkins的持久化數(shù)據(jù)寫到本地,否則每次重啟 jenkins都會重置

? ? ?mkdir -p /root/jenkins

? ? ?chown -R 1000 /root/jenkins (修改目錄權限,重要)

2:安裝jenkins容器

? ??docker pull jenkins/jenkins

? ? docker run?--name?jenkins??-d -p 8080:8080 -p 50000:50000 -v /root/jenkins:/var/jenkins_home jenkins/jenkins

? ??3:查看初始化秘鑰的兩種方式

? ??docker logs jenkins? (秘鑰會直接打印在日志中)

? ? cat/root/jenkins/secrets/initialAdminPassword (日志中沒有發(fā)現(xiàn)秘鑰說明不是第一次啟動)

二、登陸初始化jenkinss? 服務器Ip:8080

選擇安裝推薦的插件


插件安裝后創(chuàng)建管理員用戶


到這里jenkins容器就已經(jīng)安裝啟動完成了

三、使用jenkins構建一個簡單的maven項目

1:系統(tǒng)管理 - 全局工具配置 - JDK配置

如果獲取jenkins容器中的默認jdk安裝路徑:

? ? ? ? 第一步:需要登錄jenkins:docker exec -it jenkins /bin/bash

? ? ? ? 第二步:執(zhí)行命令?echo$JAVA_HOME

? ??????第三步:獲取java環(huán)境安裝地址配置到全局配置的jdk部分


2:系統(tǒng)管理 - 全局工具配置 - MAVEN配置


3:系統(tǒng)管理 - 插件管理 - 可選插件 插件安裝


構建maven項目所需的插件

4:創(chuàng)建maven項目


? ? 配置SSH(系統(tǒng)管理->系統(tǒng)配置),用于連接遠程服務器(需安裝插件 SSH plug,Publish Over SSH)

添加完成后需要點擊check,出現(xiàn)success則表示成功

? ? SSH的全局憑據(jù)


憑據(jù)


用戶名:連接遠程服務的登錄名

密碼:遠程服務的密碼

id:不可重復,隨意添加

描述:該憑據(jù)的用途

? ? 添加git配置


? ? ? ? ? ? 無法連接到倉庫,進入jenkins容器創(chuàng)建ssh key 并上傳到git就好了


將生成的公鑰上傳到git后,jenkins還需要添加全局憑據(jù)


我已經(jīng)配置好憑據(jù)所以沒有報錯了已經(jīng)

憑據(jù)添加


id:自定義,不可重復

描述:可為空

username:自定義

private Key:將jenkins生成的私鑰添加進去

Passphrase:生成SSH KEY時輸入的驗證密碼

構建完成后執(zhí)行shell腳本

選擇僅在構建成功后執(zhí)行

shell腳本

#=====================================================================================#=================================定義初始化變量======================================#=====================================================================================?

#!/bin/bash

#操作/項目路徑(Dockerfile存放的路徑)

BASE_PATH=/usr/local/docker/renren

# jenkins構建好的源jar路徑,jenkins的workspace下,jenkins服務內地址為:/var/jenkins_home/workspace

#因為docker啟動的jenkins,目錄進行了宿主機的目錄掛載,則使用宿主機目錄: /apps/Devops/jenkins/workspace

#完整地址應為:/apps/Devops/jenkins/workspace/項目名稱/target/ 后面會進行拼接

SOURCE_PATH=/root/jenkins/workspace

#【docker 鏡像】【docker容器】【Dockerfile同目錄下的jar名字[用它build生成image的jar]】【jenkins的workspace下的項目名稱】

#這里都以這個命名[微服務的話,每個服務都以ms-swapping這種格式命名]#注意統(tǒng)一名稱!?。。?!

SERVER_NAME=renren

#容器id [grep -w 全量匹配容器名] [awk 獲取信息行的第一列,即容器ID] [無論容器啟動與否,都獲取到]

CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')

#鏡像id [grep -w 全量匹配鏡像名] [awk 獲取信息行的第三列,即鏡像ID]

IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')

#源jar完整地址 [jenkins構建成功后,會在自己的workspace/項目/target 下生成maven構建成功的jar包,獲取jar包名的完整路徑]

#例如:/apps/Devops/jenkins/workspace/swapping/target/swapping-0.0.1-SNAPSHOT.jar

SOURCE_JAR_PATH=$(find "$SOURCE_PATH/$SERVER_NAME/target/" -name "*$SERVER_NAME*.jar" )

DATE=`date +%Y%m%d%H%M%S`#=====================================================================================#============================對原本已存在的jar進行備份================================#=====================================================================================

# 備份function backup(){ if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then echo "=========================>>>>>>>$SERVER_NAME.jar 備份..."

mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar echo "=========================>>>>>>>備份老的 $SERVER_NAME.jar 完成

" else echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳過備份" fi}#=====================================================================================#=========================移動最新源jar包到Dockerfile所在目錄=========================#=====================================================================================

# 查找源jar文件名,進行重命名,最后將源文件移動到Dockerfile文件所在目錄

function transfer(){ echo "=========================>>>>>>>源文件完整地址為 $SOURCE_JAR_PATH" echo "=========================>>>>>>>重命名源文件" mv $SOURCE_JAR_PATH $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar echo "=========================>>>>>>>最新構建代碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH" cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH echo "=========================>>>>>>>遷移完成Success"}

#=====================================================================================#==================================構建最新鏡像=======================================#=====================================================================================

# 構建docker鏡像function build(){ #無論鏡像存在與否,都停止原容器服務,并移除原容器服務 echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID" docker rm $CID

#無論如何,都去構建新的鏡像 #構建新的鏡像之前,移除舊的鏡像 if [ -n "$IID" ];

then echo "=========================>>>>>>>存在$SERVER_NAME鏡像,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME鏡像,IID=$IID" docker rmi $IID echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,開始---->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,完成---->" else echo "=========================>>>>>>>不存在$SERVER_NAME鏡像,構建新的鏡像,開始--->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>構建新的$SERVER_NAME鏡像,結束--->" fi}#=====================================================================================#==============================運行docker容器,啟動服務===============================#=====================================================================================

# 運行docker容器# 先備份老的jar包

# 再移動新的jar包到Dockerfile文件所在目錄

# 接著,構建新的鏡像

# 最后運行最新容器,啟動服務

function run(){ backup transfer build docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro? $SERVER_NAME}

#入口

run

全部配置好之后點擊應用保存,返回開始構建,第一次構建可能會很慢。


如圖出現(xiàn)SUCCESS說明構建成功

阿里云老用戶福利

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容