使用jenkins构建docker镜像,启动docker镜像,推送镜像到harbor镜像仓库

Jenkins配置:

#操作/项目路径(Dockerfile存放的路劲)
BACKUP_PATH=/usr/local/Docker/project/backup
BASE_PATH=/usr/local/Docker/project/rm_frontend
# 源jar路径  
SOURCE_PATH=/root/.jenkins/workspace/riskManagementFrontend_Docker/target  
#docker 镜像/容器名字 这里都命名为这个,定义为jenkins任务的名称
SERVER_NAME=docker_rm_frontend
#jar名字
JAR_NAME=riskManagementFrontend-0.0.1-SNAPSHOT
#容器id
CID=$(docker ps -a | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
 
DATE=`date +%Y%m%d%H%M`


# 备份
function backup(){
	if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
    	echo "$JAR_NAME.jar 备份..."
        	cp $BASE_PATH/$JAR_NAME.jar $BACKUP_PATH/$JAR_NAME-$DATE.jar
        echo "备份 $JAR_NAME.jar 完成"
    else
    	echo "$BASE_PATH/$JAR_NAME.jar不存在,跳过备份"
    fi
}


# 迁移,最新构建代码 移动到项目环境
function transfer(){
    echo "最新构建代码 $SOURCE_PATH/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
        cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH 
    echo "迁移完成"
}
 


# 停止,删除旧容器,删除旧镜像,重建镜像,重run容器
function build2(){
	if [ -n "$CID" ]; then
		echo "存在$SERVER_NAME容器,CID=$CID,删除容器 ..."
			docker rm -f $CID 
		echo "$SERVER_NAME容器删除完成..."
	else
		echo "不存在$SERVER_NAME容器..."
	fi


	if [ -n "$IID" ]; then
		echo "存在$SERVER_NAME镜像,IID=$IID"
        docker rmi -f $IID
        echo "镜像删除完成"
		cd $BASE_PATH
		docker build -t $SERVER_NAME .
        echo "镜像构建完成"
        
	else
		echo "不存在$SERVER_NAME镜像,开始构建镜像"
		cd $BASE_PATH
		docker build -t $SERVER_NAME .
        echo "镜像构建完成"
	fi
    
    echo "启动容器..."
    # docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 9690:9690 $SERVER_NAME
    docker run --name $SERVER_NAME -d -p 9690:9690 $SERVER_NAME
    echo "容器启动完成"
}


 
# 构建docker镜像
function build(){
	if [ -n "$IID" ]; then
		echo "存在$SERVER_NAME镜像,IID=$IID"
	else
		echo "不存在$SERVER_NAME镜像,开始构建镜像"
			cd $BASE_PATH
		docker build -t $SERVER_NAME .
	fi
}
 
# 运行docker容器
function run(){
	backup
	transfer
    build2
#	build
#	if [ -n "$CID" ]; then
#		echo "存在$SERVER_NAME容器,CID=$CID,重启docker容器 ..."
#			docker restart $SERVER_NAME 
#		echo "$SERVER_NAME容器重启完成"
#	else
#		echo "不存在$SERVER_NAME容器,docker run创建容器..."
#			docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 9690:9690 $SERVER_NAME
#		echo "$SERVER_NAME容器创建完成"
#	fi
    
    echo "push镜像到docker镜像仓库"
    docker tag $SERVER_NAME 192.168.20.123/gongkai/$SERVER_NAME:$DATE
    docker push 192.168.20.123/gongkai/$SERVER_NAME:$DATE
    echo "成功push镜像到docker镜像仓库"
}
 
#入口
run
/usr/local/Docker/project/cf_apply_backend/Dockerfile文件的内容:

​​​​​​​#基于openjdk:8
#FROM openjdk:8
#FROM openjdk:1.8.0_191
FROM java:8-alpine
 
# 指定当前操作目录
WORKDIR /usr/local/Docker/project/rm_frontend
 
#容器启动后执行的操作
CMD java -jar riskManagementFrontend-0.0.1-SNAPSHOT.jar

容器中以上配置文件的各级目录:

猜你喜欢

转载自blog.csdn.net/u013282737/article/details/90259663