ci工程 java_[ci]jenkins构建容器项目java-helloworld-非docker plugin模式

栗子思路说明:

不使用任何docker plugin

使用jenkins server本地(含mvn环境)构建,无jenkins slave

jenkins server本地构建的war包,推送deploy机,使用sh动态生成镜像(含镜像名/标签[dev/test]等),并删掉原来的镜像,启动.

jenkins构建容器项目

16a377212fa9ed3da6900ff802ddb7d9.png

初始化web节点目录

$ tree /data/dockerfiles/

/data/dockerfiles/

├── first_docker_proj01

│ ├── Dockerfile

│ └── trucks.war

├── scripts

│ └── deploy.sh # 当执行这个脚本时候,将会将这里的*.war干掉,将最新的war目录下东西移进来.并开始构建镜像

└── war

└── first_docker_proj01 ## jenkins server构建好后,将war包通过publish over ssh插件推送到这个目录.

系统管理->系统设置->Publish over SSH

2177acd2f7816efbe95cf981402e3909.png

新建maven风格的项目

2e144bd96c2961ea9827aaf8e81a5f19.png

https://github.com/lannyMa/trucks.git

$release_branch

926e40fa3597c666adacc126a13975f7.png

clean package -DskipTests=true

b779b4db3f4abd281105ee80e42b6a6f.png

target/*.war

target/

/war/first_docker_proj01

/data/dockerfiles/scripts/deploy.sh first_docker_proj01 hello_docker $release_branch 11000 8080

0ae49a7f7b7a2719b39ae88635182731.png

效果

可以实现一键切换脚本, web节点在启动新容器时候会把老版本容器干掉.

5028e4a18954a58a4a6149c23674621e.png

2445181f4051a5b45554c6d4938d8587.png

73ca9279c7d0afdea76fa0002a2c98fc.png

deploy.sh

主要是这个脚本牛x

#!/bin/bash

############################################

# this script function is :

# deploy new docker container

#

# USER YYYY-MM-DD - ACTION

# maotai 2018-01-25 - CREATED

#

############################################

parasnum=5

# function

help_msg()

{

cat << help

+----------------------------------------------------+

+ Error Cause:

+ you enter $# parameters

+ the total paramenter number must be $parasnum

+ 1st :DOCKER_NAME

+ 2nd :PROJECT_NAME

+ 3rd :PROJECT_VERSION

+ 4th :SOURCE_PORT

+ 5th :DESTINATION_PORT

+----------------------------------------------------+

help

}

# ----------------------------------------------------

# Check parameter number

# ----------------------------------------------------

if [ $# -ne ${parasnum} ]

then

help_msg

exit

fi

# ----------------------------------------------------

# Initialize the parameter.

# ----------------------------------------------------

DOCKER_NAME=$1

PROJECT_NAME=$2

PROJ_VERSION=$3

SPORT=$4

DPORT=$5

PROJ_VERSION=${PROJ_VERSION/"origin/"/""}

DOCKER_FILE="/data/dockerfiles/${DOCKER_NAME}/Dockerfile"

DOCKER_FILE_DIR=/data/dockerfiles/${DOCKER_NAME}

if [ ! -d ${DOCKER_FILE_DIR} ]; then

mkdir -p ${DOCKER_FILE_DIR}

fi

# ----------------------------------------------------

# check docker images

# ----------------------------------------------------

DOCKER_IMAGE=`/usr/bin/docker images | grep ${DOCKER_NAME} | awk -F ' ' '{print $3}'`

if [ -n "${DOCKER_IMAGE}" ]; then

# check docker container

for dc in `/usr/bin/docker ps -a | grep ${DOCKER_NAME} | awk -F " " '{print $1}'`

do

echo "Stop container: ${dc}"

/usr/bin/docker stop ${dc}

# delete while docker container was exists

echo "##Delete exists Container_Id: "${dc}

/usr/bin/docker rm ${dc}

done

# delete while docker image was exists

echo "##Delete exists Image: "${DOCKER_IMAGE}

/usr/bin/docker rmi ${DOCKER_IMAGE}

fi

echo ""

# ----------------------------------------------------

# Init dockerfile

# ----------------------------------------------------

echo "**Init dockerfile start: "${DOCKER_FILE}

echo "FROM tomcat" > ${DOCKER_FILE}

echo 'MAINTAINER maotai "maotai@sina.com"' >> ${DOCKER_FILE}

echo "ADD *.war /usr/local/tomcat/webapps/${PROJECT_NAME}.war" >> ${DOCKER_FILE}

echo "EXPOSE 8080" >> ${DOCKER_FILE}

echo "CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out" >> ${DOCKER_FILE}

cat ${DOCKER_FILE}

echo "**Init dockerfile end."

# ----------------------------------------------------

# Build dockerfile

# ----------------------------------------------------

cd ${DOCKER_FILE_DIR}

rm *.war -rf

mv /data/dockerfiles/war/${DOCKER_NAME}/*.war ./

echo ""

echo "##Build dockerfile for "${DOCKER_NAME}

/usr/bin/docker build -t ${DOCKER_NAME}:${PROJ_VERSION} .

# ----------------------------------------------------

# Run docker container

# ----------------------------------------------------

echo ""

echo "##Running docker container: "${DOCKER_NAME}

/usr/bin/docker run --name ${DOCKER_NAME}_d1 -d -p ${SPORT}:${DPORT} ${DOCKER_NAME}:${PROJ_VERSION}

#/usr/bin/docker run ${cmd}

echo ""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值