Jenkins+docker实现应用发布

Jenkinscentos6.5 ip192.168.83.84

Dockercentos7.2 ip192.168.83.60

 

一、安装Jenkins

最新版:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

sudo yum install jenkins


稳定版

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo

sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

sudo yum install jenkins

 

根据需求在jenkins的服务器上(centos)执行其中一种命令,安装jenkins

另:jenkins依赖java环境,需先安装好java

 

启动jenkins

Service Jenkins start

 

二、安装jenkins插件

成功启动jenkins后,在浏览器中输入192.168.83.84:8080访问配置jenkins,根据提示找到密码并输入,选择默认插件自动安装。安装好了以后会提示创建第一个admin 用户,创建成功后进入jenkins界面。

 

选择系统管理—>插件管理—>可选插件

在右侧filter框中输入Docker plugin,找到Docker plugin后直接安装

 

安装完成后在系统管理à系统设置的最后可以找到新增一个云的选项

 

三、docker服务器配置

安装dockersudo yum install docker

参考文档:https://docs.docker.com/engine/installation/linux/centos/

 

以前台方式启动dockerdocker -d -H unix:///var/run/docker.sock -H 0.0.0.0:4243

 

dockerhub下一个新的centos镜像

docker pull centos:latest

 

构建基于dockertomcat镜像

cd

mkdir docker

cd docker

传输

wKiom1eF-UCgwLUBAAAM72MXnfw961.png

到该目录并解压

 

vim build.df

FROM centos:latest

MAINTAINER akjfit

 

#install jdk

ADD jdk1.8.0_91/opt/jdk1.8.0_91

ENV JAVA_HOME/opt/jdk1.8.0_91

ENV PATH$PATH:$JAVA_HOME/bin

RUN mkdir -p"$JAVA_HOME"

 

#install tomcat

ADDapache-tomcat-9.0.0.M4 /opt/apache-tomcat-9.0.0.M4

ENV CATALINA_HOME/opt/apache-tomcat-9.0.0.M4

ENV PATH$CATALINA_HOME/bin:$PATH

ENV JAVA_OPTS -Xmx512m-Duser.timezone=GMT+08

RUN mkdir -p"$CATALINA_HOME"

WORKDIR $CATALINA_HOME

 

ENV LANG en_US.UTF-8

 

RUN cp/usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

EXPOSE 8080

 

docker build -t centos:tomcat -f build.df/root/docker

 

四、配置docker

 

登录jenkinsweb管理端

 

点击系统管理-->系统设置

wKioL1eF-UCgleZeAAASisHBmZQ644.png

wKioL1eF-UGy25ZMAABnZbiusYo972.png

Namedocker云的名字,要唯一,等下有用

Docker URLDocker服务器的地址和端口

其他参数可如图配置,连接测试成功后会显示docker的版本号


wKiom1eF-UGxToFZAAATzfgQvbM097.png

添加temple并配置

 

wKioL1eF-UKyG3yNAACAYhlHr88287.png

wKiom1eF-ULRrV_lAACH-XqBOQE535.png

wKioL1eF-UPiy3PLAACQ2e1khx8070.png

需要配置的项:

Docker Image:当前docker云里存在的,需要用到的dockerp_w_picpath的名字

Docker Command:启动该docker时执行的命令

Volumes:将docker container内部的目录挂载至宿主机的目录

Port bindings:将docker container内部的端口映射至宿主机

Memory Limit in MB:限制dockercontainer的内存大小

Credentials:配置管理认证

 


点击新建(maven项目)

wKiom1eF-USx68I6AACYhWmqOIA987.png


wKiom1eF-UWhl8omAAByVWetAoE221.png


选中docker container

Label Expression中填写master(即由master来执行该job

 


wKiom1eF-UaTuk-qAACXdR1320s879.png

在源码管理中选中git

Repository URL:需要打成war包的代码的位置

Credentials:输入可以登录git服务器的用户密码

 

wKioL1eF-Uaz6HRiAACBhSZsYSs430.png

勾选Build whenever a SNAPSHOT dependency is built(如果项目有依赖关系)


wKioL1eF-UeSsDMqAAAzU7VeDW0261.png

按照上图填写相关信息

 

wKioL1eF-UeglnIWAACDwK8YVAU910.png

docker宿主机上部署2个脚本,stop.sh为判断当前项目的docker容器是否在运行,在运行就stop掉并删除该容器

deploy.sh为删除之前发布的包,并发布新生成的包

 

jenkins主机上部署1个脚本,scp.sh为将在jenkins 主机上生成的war包传递到docker宿主机上

 

Action to choose:选择Provsion&StartContainer

Docker Cloud name:在系统设置中配置的唯一的docker云名

Template ID:该docker云下要使用的镜像名

 

点击应用保存

 

五、相关脚本

scp脚本:

#/bin/bash

 

if [ -e /opt/.jenkins/workspace/$1-master/$1-core/pom.xml];then

scp/opt/.jenkins/workspace/$1-master/$1-core/target/*.war 192.168.83.60:/tmp/$1

 

else

 

scp/opt/.jenkins/workspace/$1-master/target/*.war 192.168.83.60:/tmp/$1

#sleep 20

fi

 

stop脚本

#/bin/bash

 

id=`dockerps -a |grep 0:$1 |awk '{print $1}'`

if [ -n"$id" ];

then

dockerstop $id

docker rm$id

else

echo"no running docker container"

fi

 

deploy脚本:

#!/bin/bash

 

cd/workspace/$1-master

rm -rfROOT

cp/tmp/$1/$2.war /workspace/$1-master

unzip$2.war -d ROOT >/dev/null

rm -f$2.war

rm -rf/workspace/$1-master/ROOT/profiles