docker+jenkins自動部署

一、下載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

選擇安裝推薦的插件


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


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

三童本、使用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)管理 - 插件管理 - 可選插件 插件安裝


構(gòu)建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時輸入的驗證密碼

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

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

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

全部配置好之后點擊應用保存,返回開始構(gòu)建尉尾,第一次構(gòu)建可能會很慢爆阶。


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

阿里云老用戶福利

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辨图,更是在濱河造成了極大的恐慌班套,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故河,死亡現(xiàn)場離奇詭異吱韭,居然都是意外死亡,警方通過查閱死者的電腦和手機鱼的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門理盆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凑阶,你說我怎么就攤上這事猿规。” “怎么了晌砾?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵坎拐,是天一觀的道長。 經(jīng)常有香客問我养匈,道長,這世上最難降的妖魔是什么都伪? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任呕乎,我火速辦了婚禮,結(jié)果婚禮上陨晶,老公的妹妹穿的比我還像新娘猬仁。我一直安慰自己,他們只是感情好先誉,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布湿刽。 她就那樣靜靜地躺著,像睡著了一般褐耳。 火紅的嫁衣襯著肌膚如雪诈闺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天铃芦,我揣著相機與錄音雅镊,去河邊找鬼。 笑死刃滓,一個胖子當著我的面吹牛仁烹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咧虎,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卓缰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起征唬,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤捌显,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳍鸵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苇瓣,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年偿乖,在試婚紗的時候發(fā)現(xiàn)自己被綠了击罪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贪薪,死狀恐怖媳禁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情画切,我是刑警寧澤竣稽,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站霍弹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岛宦。R本人自食惡果不足惜砾肺,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望变汪。 院中可真熱鬧裙盾,春花似錦闷煤、人聲如沸鲤拿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽域醇。三九已至譬挚,卻和暖如春减宣,著一層夾襖步出監(jiān)牢的瞬間漆腌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工悠砚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绑咱,地道東北人描融。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓骏庸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親一姿。 傳聞我的和親對象是個殘疾皇子叮叹,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353