一、下載Jenkins鏡像,安裝啟動
1:創(chuàng)建docker掛載目錄,目的是將docker中Jenkins的持久化數(shù)據(jù)寫到本地意狠,否則每次重啟 jenkins都會重置
? ? ?mkdir -p /root/jenkins
? ? ?chown -R 1000 /root/jenkins (修改目錄權(quán)限乡恕,重要)
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
三童本、使用jenkins構(gòu)建一個簡單的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)管理 - 插件管理 - 可選插件 插件安裝
4:創(chuàng)建maven項目
? ? 配置SSH(系統(tǒng)管理->系統(tǒng)配置),用于連接遠程服務器(需安裝插件 SSH plug,Publish Over SSH)
? ? SSH的全局憑據(jù)
用戶名:連接遠程服務的登錄名
密碼:遠程服務的密碼
id:不可重復真屯,隨意添加
描述:該憑據(jù)的用途
? ? 添加git配置
? ? ? ? ? ? 無法連接到倉庫,進入jenkins容器創(chuàng)建ssh key 并上傳到git就好了
將生成的公鑰上傳到git后穷娱,jenkins還需要添加全局憑據(jù)
憑據(jù)添加
id:自定義绑蔫,不可重復
描述:可為空
username:自定義
private Key:將jenkins生成的私鑰添加進去
Passphrase:生成SSH KEY時輸入的驗證密碼
構(gòu)建完成后執(zhí)行shell腳本
shell腳本
#=====================================================================================#=================================定義初始化變量======================================#=====================================================================================?
#!/bin/bash
#操作/項目路徑(Dockerfile存放的路徑)
BASE_PATH=/usr/local/docker/renren
# jenkins構(gòu)建好的源jar路徑运沦,jenkins的workspace下,jenkins服務內(nèi)地址為:/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)一名稱Bㄒ丁A衣印!8淄小左敌!
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構(gòu)建成功后,會在自己的workspace/項目/target 下生成maven構(gòu)建成功的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 "=========================>>>>>>>最新構(gòu)建代碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH" cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH echo "=========================>>>>>>>遷移完成Success"}
#=====================================================================================#==================================構(gòu)建最新鏡像=======================================#=====================================================================================
# 構(gòu)建docker鏡像function build(){ #無論鏡像存在與否无宿,都停止原容器服務,并移除原容器服務 echo "=========================>>>>>>>停止$SERVER_NAME容器枢里,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器孽鸡,CID=$CID" docker rm $CID
#無論如何,都去構(gòu)建新的鏡像 #構(gòu)建新的鏡像之前坡垫,移除舊的鏡像 if [ -n "$IID" ];
then echo "=========================>>>>>>>存在$SERVER_NAME鏡像梭灿,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME鏡像,IID=$IID" docker rmi $IID echo "=========================>>>>>>>構(gòu)建新的$SERVER_NAME鏡像冰悠,開始---->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>構(gòu)建新的$SERVER_NAME鏡像堡妒,完成---->" else echo "=========================>>>>>>>不存在$SERVER_NAME鏡像,構(gòu)建新的鏡像溉卓,開始--->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>構(gòu)建新的$SERVER_NAME鏡像皮迟,結(jié)束--->" fi}#=====================================================================================#==============================運行docker容器,啟動服務===============================#=====================================================================================
# 運行docker容器# 先備份老的jar包
# 再移動新的jar包到Dockerfile文件所在目錄
# 接著桑寨,構(gòu)建新的鏡像
# 最后運行最新容器伏尼,啟動服務
function run(){ backup transfer build docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro? $SERVER_NAME}
#入口
run