一、準(zhǔn)備docker環(huán)境
Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看CentOS的內(nèi)核版本。(uname -a)
1.在安裝docker 之前先要清除之前的版本
yum remove docker \
? ? ? ? ? ? ? ? ? docker-client \
? ? ? ? ? ? ? ? ? docker-client-latest \
? ? ? ? ? ? ? ? ? docker-common \
? ? ? ? ? ? ? ? ? docker-latest \
? ? ? ? ? ? ? ? ? docker-latest-logrotate \
? ? ? ? ? ? ? ? ? docker-logrotate \
? ? ? ? ? ? ? ? ? docker-engine
2.添加docker國內(nèi)源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.查看倉庫中docker的版本,然后更新緩存并安裝(如果要安裝特定版本,可以在指定下載如:docker-ce-18.06.1.ce)
yum list docker-ce --showduplicates | sort -ryum makecache fast
yum -y install docker-ce-18.06.2.ce-3.el7
4.啟動docker
systemctl start docker && systemctl enable docker
5.設(shè)置國內(nèi)鏡像加速器 vim /etc/docker/daemon.json
{
? "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"],
? "data-root": "",
? "log-driver": "json-file",
? "log-opts": {"max-size":"200m", "max-file":"3"}
}
systemctl daemon-reload && systemctl restart docker 重啟docker
二、拉取jenkins最新的鏡像,并且啟動起來
1. docker pull jenkins/jenkins 默認(rèn)拉取最新的版本
2. 創(chuàng)建jenkins的工作目錄 最好創(chuàng)建到數(shù)據(jù)盤的目錄下
mkdir -p /opt/jenkins
chmod 777 /opt/jenkins? ? 賦予相應(yīng)權(quán)限
3.啟動jenkins鏡像
docker run --restart=always -m 2048M -p 8081:8080 -p 50000:50000 -v /etc/localtime:/etc/localtime --name jenkins -v /opt/jenkins:/var/jenkins_home -d jenkins/jenkins:latest
下面是參數(shù)的詳細(xì)解讀
--restart docker的開機自啟動
-m 2048M? 給jenkins分配最大內(nèi)存
-p 8081:8080? jenkins內(nèi)部默認(rèn)端口是8080,這里我們映射成我們自己定義喜歡的端口
-p 50000:50000 同上默認(rèn)不能修改,修改后面會出錯
-v? /etc/localtime:/etc/localtime? 容器內(nèi)部時區(qū)獨立,同步宿主機和容器的時間
--name? jenkins? 啟動來的容器命名
-v /opt/jenkins:/var/jenkins_home 掛載邏輯卷目錄? ,? /var/jenkins_home目錄為容器jenkins工作目錄,我們將硬盤上的一個目錄掛載到這個位置,方便后續(xù)更新鏡像后繼續(xù)使用原來的工作目錄。這里我們設(shè)置的就是上面我們創(chuàng)建的?
docker ps? 查看啟動的容器。 狀態(tài)為up啟動成功,其他狀態(tài),使用docker logs jenkins 查看日志尋找問題
3.ip加端口在瀏覽器下訪問,溫馨提示:如果是云服務(wù)需要開通安全組8081和50000.關(guān)閉防火墻和selinux,物理機關(guān)閉防火墻和selinux? ,開通和關(guān)閉方法請百度
出現(xiàn)下面圖片畫面就是啟動成功?
三、配置和使用jenkins
1.查看訪問jenkins的密碼
cat /opt/jenkins/secrets/initialAdminPassword? 復(fù)制黏貼到上面訪問的內(nèi)容中
2.配置jenkins
選擇第一個,推薦安裝,如果出現(xiàn)無法連接jenkins,請查看上面更換本地源是否正確或者電腦網(wǎng)絡(luò)問題選擇重試
點擊使用admin賬號繼續(xù)
保存并完成
后面開始使用jenkins
3.修改jenkins的admin賬號密碼
設(shè)置,下滑找到密碼
修改完之后保存,重新登錄
4.配置jenkins和安裝一些必要的插件
首先安裝必要的git、jdk、maven
系統(tǒng)管理<全局工具配置
git使用默認(rèn)就行
jdk 點擊新增jdk? 取個別名jdk1.8?
路徑是/opt/java/openjdk
以后的容器中的jenkins的jdk位置不知道會不會變,最好親自進入容器查看
docker exec -i -t jenkins /bin/bash
echo $JAVA_HOME
maven 點擊新增maven 取個名字 選擇你要安裝的maven版本
最后保存
再來安裝一些插件:
系統(tǒng)管理<插件管理<可選插件? 搜索插件Ant In Workspace? 配置jdk+maven環(huán)境的插件
Publish Over SSH把文件通過ssh發(fā)布到服務(wù)器的插件
Maven Integration java項目構(gòu)建
安裝
系統(tǒng)管理<系統(tǒng)設(shè)置? 滑倒最下面配置Publish over SSH
點擊新增
點擊高級
點擊使用密碼或者密鑰
三個填一個就行,有密碼使用密碼,至于密鑰,云服務(wù)器如果有密鑰對直接復(fù)制密鑰就行,也可以用ssh-keygen,在復(fù)制到目標(biāo)服務(wù)器上就行,具體操作不在這里細(xì)說,詳情百度ssh密鑰登入服務(wù)器
填完之后test一下,出現(xiàn)success即可。保存。
四、上面準(zhǔn)備工作完成,現(xiàn)在讓我們來構(gòu)建一個項目。
新建任務(wù)<取一個項目名稱構(gòu)建一個maven項目
描述為測試項目
源碼管理勾選git,填入代碼地址,添加憑據(jù),填寫用戶和密碼
指定分支,可以填分支名稱
構(gòu)建觸發(fā)器這里把原本的去掉
配置發(fā)布jar包規(guī)則
這上面的都是根據(jù)項目來填寫,每個java項目存放jar包可能略微不同
最后保存完成。
現(xiàn)在我們在目標(biāo)服務(wù)創(chuàng)建項目的路徑,還有寫dockerfile和啟動鏡像的腳本
cd? /opt/project
mkdir email
cd email
mkdir backup? 存放jar包的備份? mkdir build? ? #jenkins遠程傳出jar包的路徑? ? mkdir? docker? 項目日志
vim? Dockerfile
? #使用的基礎(chǔ)鏡像
FROM java:8u111
#作者
MAINTAINER jiangming
#把當(dāng)前目錄下的jar包添加到鏡像
ADD ./XXX.jar /usr/local/XXX.jar
#啟動時運行jar包,并把日志輸出到指定目錄中
CMD java -server -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH -jar -Duser.timezone=GMT+08 /usr/local/XXX.jar --spring.profiles.active=dev > /usr/local/logs/XXX.log??
XXX為項目名? ? ? ? dev為項目啟動的環(huán)境
vim ps.sh? ? ? ? ? ? 寫發(fā)布腳本
#!/bin/bash
export BUILD_ID=dontKillMe
web=XXX
webdir=/opt/projects/XXX
date=$(date +%Y%m%d%H%M)
echo "####### 備份jar包 ##########"
cp $webdir/$web.jar $webdir/backup/$web-$date.jar?
rm -rf $webdir/$web.jar
mv $webdir/build/*.jar $webdir/$web.jar
echo "####### 刪除當(dāng)前容器 ##########"
docker stop $web #先停止容器運行
sleep 3
docker ps -a | grep $web|grep -v "grep"|awk '{print $1}' |xargs docker rm -f?? #刪除容器
sleep 1
echo "####### 刪除當(dāng)前鏡像 ##########"
docker images |grep $web | grep -v "grep" | awk '{print $3}' |xargs docker rmi?? #刪除鏡像
sleep 1
echo "####### 制作最新的當(dāng)前鏡像 ##########"
cd $webdir
docker build -t $web .?????? #執(zhí)行dockerfile,生成項目鏡像
sleep 3
echo "####### 啟動當(dāng)前最新的容器 ##########"
docker run -m 2048M --restart=always --network=host -v $webdir/docker/:/usr/local/logs/ -d --name=$web $web:latest?
sleep 2
echo "#######判斷項目是否啟動成功 ##########"
pid=`ps aux|grep $web|grep -v grep |grep -v "/bin/sh"| awk '{print $2}'`???? #打印項目啟動后的pid
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
echo "################################項目啟動失敗################################"
cat dsadsadas #使jenkins發(fā)布失敗,導(dǎo)致構(gòu)建項目不穩(wěn)定
else
echo "################################項目啟動成功#########################################"
fi
上面腳本和dockerfile只是借鑒操作,可以模仿中間出現(xiàn)問題請自行調(diào)整,也可以來本人
現(xiàn)在我們所有的準(zhǔn)備工作都完畢。現(xiàn)在點擊構(gòu)建
打開控制臺輸出,
拉一些項目依賴jar包第一次有點慢,以后就不會了
success發(fā)布成功
現(xiàn)在去服務(wù)器底下docker ps ,查看服務(wù)有沒有啟動起來
項目服務(wù)已經(jīng)up,說明啟動成功,如果啟動失敗,可以docker logs email 查看日志,也可以去項目底下的docker目錄查看日志
最后,有問題請教聯(lián)系方式在主頁