1.应用根目录创建ansible文件夹,添加两个文件builder.sh 、Dockerfile
Dockerfile
FROM 127.0.0.1:5000/self_jetty:2.0 COPY webmerser /home/pbmp/jetty-web-merser/webapps/webmerser
#FROM 127.0.0.1:5000/self_jetty:2.0 引用的基础镜像
#COPY webmerser /home/pbmp/jetty-web-merser/webapps/webmerser 把应用copy到镜像里
builder.sh
#!/bin/bash VERSION=$1 if [ ! ${VERSION} ]; then echo "Please input release version number" exit 1 fi image_name="127.0.0.1:5000/prov-remote/webmerser:${VERSION}" echo "build image ${image_name}" docker build --pull --no-cache=true -t ${image_name} . if [ $? != 0 ]; then echo "build image failed" exit 1 fi echo "Push Image to register" docker push ${image_name} if [ $? == 0 ]; then echo "Push successfully" echo "image: ${image_name}" fi
2.整理应用中所有配置文件,把开发、测试、生产不一致的文件梳理3份
3.将整理的配置文件放到开发、测试、生产宿主机的对应应用目录下
cd /home/pbmp/webmerser [wangrc@pbmp-docker1 webmerser]$ ll total 0 drwxr-xr-x 3 pbmp mpsp 22 Oct 27 15:07 configs drwxr-xr-x 3 pbmp mpsp 22 Oct 27 15:28 logs drwxr-xr-x 2 pbmp mpsp 80 Oct 27 15:28 run drwxr-xr-x 2 pbmp mpsp 77 Oct 27 15:07 serial
#configs 路径下为所有配置文件
[wangrc@pbmp-docker1 webmerser]$ tree configs/ configs/ └── webmerser └── WEB-INF └── classes ├── config │ ├── platConfig.properties │ └── seq.properties ├── config.properties ├── jdbc-off.properties └── jdbc-on.properties 4 directories, 5 files
#logs下为所有日志
#serial下为映射文件
#run 下为启动脚本
#!/bin/bash CONST_HOST="/home/pbmp/webmerser/configs" CONST_JETTY_BASE="/home/pbmp/jetty-web-merser/webapps" CONST_CONFIG="webmerser/WEB-INF/classes/config.properties" CONST_PLATCONFIG="webmerser/WEB-INF/classes/config/platConfig.properties" CONST_SEQ="webmerser/WEB-INF/classes/config/seq.properties" CONST_JDBC_OFF="webmerser/WEB-INF/classes/jdbc-off.properties" CONST_JDBC_ON="webmerser/WEB-INF/classes/jdbc-on.properties" IMAGE_NAME=$1 if [ ! ${IMAGE_NAME} ]; then echo >&2 "请输入镜像名" exit 1 fi echo >&2 "拉取镜像: ${IMAGE_NAME}" docker pull ${IMAGE_NAME} if [ $? != 0 ]; then echo >&2 "拉取镜像失败!!!" exit 1 fi APPNAME=`echo ${IMAGE_NAME} | awk -F ':' '{print $2}' | awk -F '/' '{print $3}'` if [ ! ${APPNAME} ]; then echo >&2 "无法获取部署应用名" exit 1 fi # app_status=`docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'|grep ${APPNAME}` if [ ${app_status} ]; then echo >&2 "停止应用: ${APPNAME}" docker stop ${APPNAME} echo >&2 "删除旧版应用 ${APPNAME}" docker rm ${APPNAME} fi #create new container echo >&2 "创建新应用:${APPNAME}" docker run -d --net=host \ --name ${APPNAME} \ -v ${CONST_HOST}/${CONST_CONFIG}:${CONST_JETTY_BASE}/${CONST_CONFIG} \ -v ${CONST_HOST}/${CONST_PLATCONFIG}:${CONST_JETTY_BASE}/${CONST_PLATCONFIG} \ -v ${CONST_HOST}/${CONST_SEQ}:${CONST_JETTY_BASE}/${CONST_SEQ} \ -v ${CONST_HOST}/${CONST_JDBC_OFF}:${CONST_JETTY_BASE}/${CONST_JDBC_OFF} \ -v ${CONST_HOST}/${CONST_JDBC_ON}:${CONST_JETTY_BASE}/${CONST_JDBC_ON} \ -v /home/pbmp/webmerser/logs/webmerser:/home/pbmp/jetty-web-merser/logs \ -v /etc/localtime:/etc/localtime \ -v /home/pbmp/webmerser/serial:/home/pbmp/jetty-web-merser/webapps/webmerser/WEB-INF/classes/serial \ -v /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai \ ${IMAGE_NAME} sleep 5 docker top ${APPNAME} echo "任务执行成功"
#run.sh 主要作用 拉取镜像、创建新应用 ,并制定映射关系
4. 开发jenkins脚本配置–编译应用、创建镜像、启动应用
cd ${WORKSPACE}/webmerser_v2/ansible if [ -d "webmerser" ]; then echo "Delete dir webmerser" rm -rf "webmerser" fi cp -r ${WORKSPACE}/webmerser_v2/target/webmerser . chmod +x builder.sh ./builder.sh ${version} # deploy image image_name="127.0.0.1:5000/prov-remote/webmerser:${version}" cd /usr/mpsp/webmerser ansible -i hosts webmerser_dev -m shell -a "~/webmerser/run/webmerser.sh ${image_name}"
5. 测试jenkins脚本配置–启动应用
cd /usr/mpsp/webmerser ansible -i hosts webmerser_test -m shell -a "~/run/webmerser.sh ${image}"
6. 生产jenkins脚本配置–从开发仓库push镜像到生产docker仓库
if [ -e ${image} ]; then echo “请输入镜像名” exit 1 fi PROD_IP="10.16.59.66:80" image_name_short=${image#"127.0.0.1:5000"} echo ${image_name_short} prod_image=${PROD_IP}${image_name_short} #execute ansible cd /usr/mpsp/webmerser ansible -i hosts webmerser_test -m shell -a "docker tag ${image} ${prod_image}" ansible -i hosts webmerser_test -m shell -a "docker login -u admin -p 12345 172.16.59.66:80" ansible -i hosts webmerser_test -m shell -a "docker push ${prod_image}" if [ $? == 0 ]; then echo "Push Successfully" echo "Release product image name: ${prod_image}" fi