使用jenkins通过docker方式自动发布java后端服务
前置条件:服务器提前安装jdk,maven,docker服务,jdk镜像。
jenkins安装过程省略(如果使用docker安装jenkins,注意将jenkins的home和workspace映射到宿主机,将宿主机docker目录、jdk目录、maven目录挂载到jenkins容器中!!!)
1、安装插件
jenkins首页点击Manage Jenkins,点击Manage Plugins
点击available,搜索框输入需要的插件,勾选相应插件,点击Install without restart
目前已知需要使用的插件如下:
2、全局工具配置
首页点击Manage Jenkins、点击Global Tool Configuration,配置JDK和maven,点击保存(jenkins如果是容器安装,则配置jenkins容器内挂载的jdk和maven安装目录)
3、配置Publish over SSH(jenkins安装在宿主机可省略)
首页点击Manage Jenkins、点击Configure System
配置Publish over SSH,填写admin用户密码,点击保存
4、创建项目
首页点击New Item
输入项目名,选中构建一个maven项目(例如ib-bpm),点击OK
5、配置项目git源码地址,shell脚本
首页点击项目,点击config
配置代码仓库git地址,git用户密码,分支
勾选Build whenever a SNAPSHOT dependency is built
配置项目目录,打包参数
clean install -Dmaven.test.skip=true
选中构建后执行ssh中shell脚本
拷贝打包生成的jar到目标服务器(可为本机),配置shell脚本
shell脚本内容:
#!bin/sh
pwd
cd /data/jenkins_home/workspace/ib-bpm/ib-bpm
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=ib-bpm
TAG=latest
SERVER_PORT=7004
pwd
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
#判断是否存在容器,如果存在删除旧的容器
if [ -n "$CID" ]; then
echo "存在容器$SERVER_NAME, CID-$CID"
docker stop $SERVER_NAME
docker rm $SERVER_NAME
fi
# 判断docker镜像是否存在,存在则删除旧的镜像
if [ -n "$IID" ]; then
echo "存在192.168.5.71:5609/docker_rep/$SERVER_NAME:$TAG镜像,IID=$IID"
docker rmi 192.168.5.71:5609/docker_rep/$SERVER_NAME:$TAG
fi
pwd
#cd ./ib-bpm
# 构建docker镜像
docker build -t 192.168.5.71:5609/docker_rep/$SERVER_NAME:$TAG .
# 运行docker容器
docker run --restart=always --network=host --name $SERVER_NAME -e SPRING_PROFILES_ACTIVE=dev -d -p $SERVER_PORT:$SERVER_PORT -p 9058:9058 192.168.5.71:5609/docker_rep/$SERVER_NAME:$TAG
#PUSH镜像到远程harbor仓库
#docker login 192.168.5.71:5609 -u harbor用户名 -p harbor用户密码
#docker push 192.168.5.71:5609/docker_rep/$SERVER_NAME:$TAG
#删除多余jar
rm -rf *.jar
点击保存
ps:192.168.5.71:5609/docker_rep为harbor仓库地址,镜像名必须为:harbor仓库地址/镜像名:版本号,才能push到远程仓库。
6、构建项目,生成镜像,运行容器
进入服务器查看是否生成镜像,运行容器
注意:
1.宿主机必须包含jdk镜像(比如openjdk:8-jdk-alpine)
Dockerfile中会引入该镜像
2.Dockerfile放置在项目ib-bpm和pom.xml同级目录下(若为其它目录需改shell脚本)
Dockerfile内容为:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY *.jar app.jar
ENTRYPOINT ["sh", "-c", "java -jar app.jar"]
欢迎留言指正!