1. 程式人生 > >ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

實驗環境

系統版本:16.04-4.4.0-21-generic

Jenkins版本:v2.140

Docker版本:18.09.0

Harbor版本:v1.5.3(centos7-3.10)

注:由於Harbor是基於Docker Registry V2版本,所以就要求Docker版本不小於1.10.0,Docker-compose版本不小於1.6.0

gogs版本:v1.6.3(centos7-3.10)

dk版本:1.8.0_191

實驗架構

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

安裝三步曲

第一步安裝Gogs

Gogs安裝git和Gogs原始碼包

注:安裝過程簡單,不單獨介紹了,不懂可以看上一篇文章Centos7 用gogs搭建git倉庫

,但是切記一定要有java專案的原始碼,不然Jenkins無法通過以下方式下拉!

第二步安裝harbor

Harbor安裝docker和harbor

注:安裝過程簡單,不單獨介紹了,不懂可以看上一篇文章Centos7安裝Docker映象倉庫Harbor1.5.3

第三步安裝Jenkins

1、Jenkins安裝docke、jdk、jenkins和maven

Ubuntu16.04安裝Jenkins

Centos7x3.10安裝Jenkins

注:具體安裝方式不限,能達到實驗效果即可,這裡我不重複安裝Jenkins了,不會的可以自行百度或者參考以上兩篇文章,不許需要配置太多,如下圖:
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象


ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

2、建立Jenkins專案目錄

mkdir /root/.jenkins/workspace/smartloan-bms-dev

3、建立自動docker自動化目錄

mkdir /root/.jenkins/workspace/smartloan-bms-dev/docker

mkdir -p /root/.jenkins/workspace/smartloan-bms-dev/docker/{conf,src}

注:這個目錄裡主要是為了儲存shell自動指令碼、Dockerfile、國內docker源和Jenkins打包生成目錄!

4、建立shell指令碼

vi /root/.jenkins/workspace/smartloan-bms-dev/docker/images.sh

##############指定直譯器和指令碼主要作用#############
#!/bin/bash
#maven build war to docker images
##############賦值java或者xx專案生成目錄#############
base_dir='/root/.jenkins/workspace/smartloan-bms-dev/'
##############賦值war包或者jar包生成目錄#############
war_dir="${base_dir}target/"
##############賦值生成的jar包或者war包名稱行##############
war_snaphost=awk -F'[<>]' '/warPackageName/ {print $3}' ${base_dir}pom.xml
##############賦值生成的jar包或者war包名稱#################
war_name=echo $war_snaphost | awk -F- '{print $1"-"$2}'
##############賦值生成jar包或者war包的版本#################
war_version=echo $war_snaphost | awk -F- '{print $3}'
##############賦值docker工作目錄##########################
docker_dir="${base_dir}docker/"
###############賦值ubuntu的docker國內源地址目錄############
docker_conf_dir="${docker_dir}conf/"
##############賦值映象存放目錄#########################
docker_src_dir="${docker_dir}src/"
###############賦值docker環境變數目錄#####################
docker='/usr/bin/docker'
################賦值docker映象倉庫########################
registry='hub.xyc.idc/'
################賦值docker映象倉庫專案名##################
reg_name="feiyu/"
################檢查新版本映象是否存在####################
if $docker inspect ${registry}${reg_name}${war_name}:$war_version > /dev/null 2>&1 ;then
/bin/echo "This version already exists , skipping !!!"
exit 1
fi
###############建立不存在的目錄###########################
test -e $docker_dir || mkdir -p $docker_dir
test -e $docker_conf_dir || mkdir -p $docker_conf_dir
test -e $docker_src_dir || mkdir -p $docker_src_dir
################拷貝jar包到指定目錄###################
\cp ${war_dir}$war_snaphost ${docker_src_dir}${war_name}.jar || exit 1
################根據Dockerfile生成新映象###############
$docker build -t ${registry}${reg_name}${war_name}:$war_version $docker_dir && echo "shell -> docke build done" || exit 1;
################推送映象到倉庫########################
$docker push ${registry}${reg_name}${war_name}:$war_version && echo "shell -> docke push done" || exit 1;
#################檢視狀態########################
echo "shell -> status "$?

5、建立Dockerfile檔案

vi /root/.jenkins/workspace/smartloan-bms-dev/docker/Dockerfile

###映象名smartloan-bms-dev
FROM openjdk:8-jre
MAINTAINER [email protected]
###env
ENV TZ=Asia/Shanghai
ENV LANG en_US.UTF-8
###拷貝jar包到指定目錄
ADD src/smartloan-bms.jar /root/smartloan-bms.jar
###指定工作目錄
WORKDIR /root/
###執行命令
CMD java -jar /root/smartloan-bms.jar

6、將Ubuntu國內docker映象原始檔放到conf目錄下

vi /root/.jenkins/workspace/smartloan-bms-dev/docker/conf/sources.list

deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

7、Jenkins建立maven專案

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
注:這裡使用的是金鑰認證!
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

8、點選立即構建檢視控制檯輸出

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
注:以上截圖說明構建成功!

9、驗證

1)驗證是否本地打包完成

ls /root/.jenkins/workspace/smartloan-bms-dev/docker/src/
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

2)驗證本地是否構建了新的映象

docker images
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

3)驗證是否將新構建的映象上傳映象倉庫

訪問網址:https://hub.xyc.idc/
ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象
注:以上驗證說明一切工作正常!