实验环境

系统版本: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)

jdk版本:1.8.0_191

实验架构

ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第1张图片

安装三步曲

第一步安装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镜像并推送到镜像_第2张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第3张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第4张图片

2、使用Jenkins构建

ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第5张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第6张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第7张图片

注:以上截图使用密钥认证和http都行,建议使用密钥!构建完可能会失败,因为配置不全,但是jenkins服务器会出现项目目录!

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系统国内源文件放到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镜像并推送到镜像_第8张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第9张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第10张图片
注:这里使用的是密钥认证和http都行,建议使用密钥!
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第11张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第12张图片

8、点击立即构建查看控制台输出

ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第13张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第14张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第15张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第16张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第17张图片
ubuntu16.04通过Jenkins+shell脚本打包docker镜像并推送到镜像_第18张图片
注:以上截图说明构建成功!

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镜像并推送到镜像_第19张图片
注:以上验证说明一切工作正常!