1、安装docker,yum install docker, 使用docker安装jenkins镜像 docker pull jenkins/jenkins
2、启动jenkins容器 docker run -d -p 9999:8080 -p 50000:50000 -v /root/jenkins:/home/jenkins --name jenkins jenkins/jenkins
3、启动jenkins页面,安装推荐插件,jenkins登录密码安装页面有提示,详细步骤请百度
4、配置maven、jdk、git插件,docker jenkins里面已经默认安装了jdk和git,找到jdk安装目录在jenkins全局设置里面配置
git配置的是git的运行目录
maven可以在宿主机映射的/root/jenkins目录安装,然后配置maven的路径即可,我这里映射的是另外一个目录
5、安装jenkins的maven、git、ssh插件,在插件管理页面搜索安装,并在系统配置里配置ssh账号密码
6、配置项目git地址,使用用户名密码方式获取源码
7、配置maven编译脚本
8、编译部署
sh文件如下带参数运行时这样的 /root/demo1/run.sh "/root/demo1" "demo1" "image_demo1" "8080" "9999"
#!/bin/bash
#项目的路径
project_path=$1
#项目名称/容器名称
project_name=$2
#镜像名称
image_name=$3
#服务端口
server_port=$4
#映射端口
proxy_prot=$5
#时间
currTime=`date +"%Y-%m-%d %H:%M:%S"`
#切换到项目目录
cd ${project_path}
#停止项目容器
docker stop ${project_name}
#删除项目容器
docker rm ${project_name}
#删除项目镜像(暂时不删除保留历史)
#docker rmi ${image_name}
#计算容器版本
tags=`docker images --filter=reference='image_demo*' --format "{{.Tag}}"`
last=1
for tag in $tags
do
if [ $tag -ge $last ]
then
last=$tag
fi
done
last=`expr $last + 1`
#创建项目镜像(在旧镜像版本上加1) --build-arg是运行Dockerfile的参数
docker build --build-arg project_name=${project_name} -t ${image_name}:$last .
#运行镜像/创建容器
docker run -d -p ${proxy_prot}:${server_port} --name ${project_name} ${image_name}:$last
# 查看进程是否存在
exist=""
while [ "${exist}" == "" ]
do
echo "容器启动中....."
sleep 5
exist=`docker inspect --format '{{.State.Running}}' ${project_name}`
done
#echo "容器启动完成!"
echo ${exist}
if [ "${exist}" != "true" ]; then
# 记录
echo "${currTime} 重启docker容器失败,容器名称:${project_name}"
echo "尝试回滚到上一个版本"
#这里只回滚到上一个版本,如果不成功可以写循环一直回滚之前的版本
last=`expr $last - 1`
#停止项目容器
docker stop ${project_name}
#删除项目容器
docker rm ${project_name}
#运行镜像/创建容器
docker run -d -p ${proxy_prot}:${server_port} --name ${project_name} ${image_name}:$last
else
echo "${currTime} 重启docker容器成功,容器名称:${project_name}"
fi
Dockerfile内容如下
# 基础镜像使用java openjdk
FROM openjdk:8-jre
ARG project_name
ARG active
ENV spring.profiles.active ${active}
#RUN echo $project_name
# 作者
MAINTAINER test test@qq.com
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD $project_name-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
RUN echo $active
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Duser.timezone=GMT+08","/app.jar"]
9、最后就可以构建项目了。
ps:也可以配合rancher打包成镜像,到rancher部署
#!/bin/bash
#项目名称/容器名称
project_name=$1
active=$2
#切换到项目目录
cd /root/demojar
#先删除旧的镜像
#docker rmi ${project_name}:1.0.0
#创建项目镜像 --build-arg是运行Dockerfile的参数
if [ "$active" = "" ];
then
docker build --build-arg project_name=${project_name} -t ${project_name}:1.0.0 -f /root/demojar/eurekaDockerfile .
else
docker build --build-arg project_name=${project_name} --build-arg active=${active} -t ${project_name}:1.0.0 .
fi
#添加镜像标签
docker tag ${project_name}:1.0.0 192.168.1.66:5000/${project_name}:1.0.0
#推送镜像
docker push 192.168.1.66:5000/${project_name}:1.0.0
#删除无用镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi
dockerfile示例
FROM openjdk:8-jdk-alpine MAINTAINER xxx ENV PARAMS="" # 设置容器时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ADD target/*.jar /app.jar ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]
jenkins打包到harbor示例
cd /home/jenkins_home/workspace/xxxxxx
docker rmi xxxxxx:1.0.0
docker rmi xxxxxx/xxxxxx/xxxxxx:1.0.0
docker build --build-arg project_name=xxxxxx -t xxxxxx:1.0.0 .
docker tag xxxxxx:1.0.0 xxxxxx/xxxxxx/xxxxxx:1.0.0
docker login -u admin -p admin xxxxxx
docker push xxxxxx/xxxxxx/xxxxxx:1.0.0
rancher配置私有镜像用户名密码
虚拟机ip地址修改
/etc/sysconfig/network-scripts 下的文件,一般是ifcfg-eth0 修改后内容如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=6c47b445-2d8d-4f22-9ea2-8957fc4a80b0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.209
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114