jenkins+git+maven+docker发布
1.jenkins安装.
这个太简单略过。
2.插件安装
需要安装以下插件,插件源地址请使用以下地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
Git Parameter git参数构建插件
Maven Integration maven项目构建插件
SSH Publish Over SSH
3.全局配置
系统配置,需要配置publish over ssh,相关配置如下
name:配置一个名称 具有标识性的 我这里随便写的
hostname: 主机名或者ip地址
username:主机账户
password: 主机密码 这里我选择的密码认证,可以选择key认证
remote directory:远程工作目录
全局工具配置
按照自己的实际情况填写
4.构建项目
新建任务———构建一个maven项目
选择参数化构建过程-添加一个git parameter 一个string parameter
git parameter 定义名称为release_brach string parameter 定义名称为project_name
源码管理-选择git 添加git仓库地址和认证,我这里这个仓库无需认证
构建触发器,选择轮询
Build 设置maven构建的一些参数
构建后操作-send build artifacts over ssh
name 系统设置里面的publish over ssh
source files 构建后包的相对地址 workspace的相对路径
remove prefix 要过滤的 这里我们去掉target 只保留他下面的war包
remote directory 相对于publish over ssh 工作目录的相对路径 这里是/data0/dockerfiles/$project_name
exec command 要执行的脚本 脚本地址写绝对路径 后面是参数
deploy.sh 相关内容
#!/bin/bash
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 daocloud.io/library/tomcat:8.5-jre8-slim" > ${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}
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 ""
完成后保存即可
选择build with parameter – 设置对应的变量
等待构建后会在对应的主机上启动一个docker容器 目标主机需要提前安装docker服务