Jenkins+Harbor+Docker发布
使用Jenkins发布Docke
需要准备的,docker,jenkins,Harbor
docker安装
安装依赖:
# yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker软件包源:
# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker CE:
# yum install docker-ce -y
配置加速器:
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
启动并开机启动:
# systemctl start docker
# systemctl enable docker
#--------------------------------------------------------------------------
安装Jenkins(使用docker安装)
#dockerfile,内容如下
# 设置基础镜像
FROM jenkins/jenkins:lts
# 下面是一些创建者的基本信息
MAINTAINER www.cnblogs.com/fanpiao
# 设置环境变量,所有操作都是非交互式的
#ENV DEBIAN_FRONTEND noninteractive
#ENV MAVEN_HOME /opt/apache-maven-3.3.9
#ENV PATH $PATH:/opt/apache-maven-3.3.9/bin
#设置为root用户运行
USER root
#安装ansible,rsync,创建密钥目录
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" >> /etc/apt/sources.list \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
&& apt-get update \
&& apt-get -y install ansible rsync \
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
USER jenkins
#添加第三方工具JDK,mamven,密钥,opt.tar.gz中已加入了JDK,mamven,ADD,解压后即用,如果觉得这样导致镜像容量过大,可以去掉,用-v挂载
ADD opt.tar.gz /
COPY id_rsa /var/jenkins_home/.ssh
#--------------------------------------------------------------------------
#构建镜像
docker build -t ck-5 ck:v7 .
运行容器,以自己的需要修改,
#目录说明
ansible ansible配置
config Jenkins发布时对应的应用配置
Dockerfile 字面意思
jenkins.tar.gz jenkins工作目录配置
#容器运行命令,使用
docker run -d -p 9995:8080 \
-v /data/jenkins:/var/jenkins_home \
-v /data/jenkins-Docker/ansible:/etc/ansible \
-v /data/jenkins-Docker/config:/data/config \
-v /data/jenkins-Docker/repository:/var/jenkins_home/.m2/repository \
--name ck-5 ck:v7
#不需要挂载这些配置的只需要如下执行
docker run -d -p 9995:8080 --name ck-5 ck:v7 #运行Jenkins容器
Jenkins配置全局工具配置
主页面 -> 系统管理 -> 全局工具配置
指定JDK、Maven路径:
运行后进入Jenkins界面,安卓插件
SSH:用于SSH远程Docker主机执行Shell命令
Jenkins安装到此完成
#--------------------------------------------------------------------------
Harbor安装
先安装docker-compose,安装地址:https://github.com/docker/compose/releases/
#执行
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-composezan 安装完成
安装Harbor,地址:https://github.com/goharbor/harbor/releases/
#wget -P /usr/local/src/ https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.4.tgz
# cd /usr/local/src/
# tar zxf harbor-online-installer-v1.2.0.tgz -C /usr/local/
# cd /usr/local/harbor/
修改配置文件
配置文件为:/usr/local/harbor/harbor.cfg
# vim /usr/local/harbor/harbor.cfg
hostname = 192.168.1.17 (这里写你的域名或者IP,先不要去管其他配置)
执行安装脚本:
# /usr/local/harbor/install.sh
然后会有很长一大段
。。。
。。。
。。。
好了,不信你看看,docker ps -a
使用 docker-compose来管理Harbor,
# cd /usr/local/harbor/ #注意要先进去此目录哦
# docker-compose ps
Harbor的启动和停止
启动Harbor
# docker-compose start
停止Harbor
# docker-comose stop
重启Harbor
# docker-compose restart
访问测试
在浏览器输入 192.168.1.17,因为我配置的域名为192.168.1.17。请大家根据自己的配置情况输入访问的域名;
默认账号密码: admin / Harbor12345 登录后修改密码
默认安装后是http协议,docker在访问库的时候默认是使用https协议,所以要先修改
[root@localhost dockerfile]# more /etc/docker/daemon.json
{"insecure-registries":["192.168.1.17"]}
加入这个,加上后重启docker ,命令:systemctl restart docker
需要访问Harbor私库的机器需要先用
docker login 192.168.1.17(私库地址) 登录,那个用户下使用,就用那个用户界面下去操作登录
如果是用Jenkins 执行的 重启下Jenkins 重启命令:service jenkins restart
docker发布
首先先构建一个Tomcat基础镜像,JDK安装在宿主机上,容器以挂载形式使用
JDK安装
# tar zxvf jdk-8u45-linux-x64.tar.gz
# mv jdk-8u45-linux-x64 /usr/local/jdk1.8
Tomcat基础镜像Dockerfile:
# cat Dockerfile
FROM centos:7
MAINTAINER www.cnblogs.com/fanpiao
ENV VERSION=8.5.32
ENV JAVA_HOME /usr/local/jdk
RUN yum install wget -y
RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/ROOT
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
构建镜像并上传到Harbor
docker build -t harbor.yedsfe.cn/test/tomcat-web . #构建镜像,仓库地址/镜像名称
docker push harbor.yedsfe.cn/test/tomcat-web #上传镜像
接下来就是Jenkins的job配置了:
创建一个新的 Maven 项目
添加字符参数
添加仓库地址,我这是SVN
构建war包
增加个执行shell步骤
#docker仓库地址和镜像名称:版本
REPOSITORY=harbor.yijhjge.cn/test/mjs-web:${Tag}
echo '================开始构建镜像================'
cat > Dockerfile << EOF
FROM harbor.yinmishe.cn/test/tomcat-web:latest
MAINTAINER www.cnblogs.com/fanpiao
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY $module/target/*.war /usr/local/tomcat/webapps/ROOT.war
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
echo '================开始推送镜像================'
docker push $REPOSITORY
echo '================删除ci机器镜像=============='
docker image rm $REPOSITORY |true
接着部署到发布机器
REPOSITORY=harbor.yddfddwee.cn/test/mjs-web:${Tag}
# 部署
docker rm -f blog-solo |true
docker image rm $REPOSITORY |true
docker container run -d --name blog-solo -v /usr/local/jdk:/usr/local/jdk -p 88:8080 $REPOSITORY
保存后,就配置完成了
总结下过程,虽然说写的很多但其实发布过程很简单,把Jenkins, Docker ,Harbor仓库搭建好
先在构建个Tomcat基础镜像传入Harbor仓库
Jenkins拉取svn或者git仓库中的代码,使用maven打包出war包
增加,执行shell,拉取Harbor中的Tomcat基础镜像,替换war包后,构建出本次项目镜像,并上传到harbor仓库,可以在镜像命名的时候使用Tag区分
使用ssh插件,在远程需发布机器上,使用本次服务镜像,运行容器
这样就完成了
参考资料: