0
点赞
收藏
分享

微信扫一扫

jenkins 集成docker 实现jar包 发布-回滚

whiteMu 2022-09-21 阅读 157

需要在jenkins 服务器、后台节点服务器安装docker环境

安装jenkins 方法省略

安装docker 方法省略

 配置jenkins 界面如下:


jenkins 字符参数设置:

jenkins 集成docker 实现jar包 发布-回滚 _jar

jenkins 集成docker 实现jar包 发布-回滚 _docker_02

jenkins 集成docker 实现jar包 发布-回滚 _java_03

jenkins 集成docker 实现jar包 发布-回滚 _jar_04

jenkins 集成docker 实现jar包 发布-回滚 _docker_05

构建执行shell :

命令:

#!/bin/bash



repo=${repo_ip}/${repo_images}_${repo_project_name}:${publish_version}.${BUILD_NUMBER}



### maven 打包编译方法


maven_build(){


echo -e "\033[31m ################ maven_build  \n  \033[0m   "

/usr/local/apache-maven/bin/mvn clean package -Dmaven.test.skip=true


}


RUN_CHECK(){

if [ $? -eq 0 ];then

echo -e "\033[32m Run $1 is successful    \033[0m   "

else

echo -e "\033[31m Run $1 is fail    \033[0m   "

fi


}


# 构建管理镜像


dockerfile_management(){


## 配置dockerfile  

cat > Dockerfile << EOF

FROM ${repo_images}


ENV LANG en_US.UTF-8

ENV LANGUAGE en_US:UTF-8

ENV LC_ALL en_US.UTF-8


ENV JAVA_HOME /usr/local/java

ENV PATH  ${JAVA_HOME}/bin:${PATH}:.

ENV CLASSPATH  $CLASSPATH:${JAVA_HOME}/lib/dt.jar:$CLASSPATH:${JAVA_HOME}/lib/tools.jar:.


RUN mkdir -p /home/scf

RUN mkdir -p /data

COPY ./target/${1}-0.0.1-SNAPSHOT.jar  /home/scf


WORKDIR /data


EXPOSE  8888

ENTRYPOINT ["sh","-c","java  -jar /home/scf/${1}-0.0.1-SNAPSHOT.jar"]


EOF



}


# 构建节点镜像

dockerfile_node(){


## 配置dockerfile  

cat > Dockerfile << EOF

FROM ${repo_images}


ENV LANG en_US.UTF-8

ENV LANGUAGE en_US:UTF-8

ENV LC_ALL en_US.UTF-8


ENV JAVA_HOME /usr/local/java

ENV PATH  ${JAVA_HOME}/bin:${PATH}:.

ENV CLASSPATH  $CLASSPATH:${JAVA_HOME}/lib/dt.jar:$CLASSPATH:${JAVA_HOME}/lib/tools.jar:.


RUN mkdir -p /home/scf

RUN mkdir -p /data


COPY ./target/mdbc_node-0.0.1-SNAPSHOT.jar  /home/scf


WORKDIR /data


EXPOSE 6789 8081

#ENTRYPOINT ["java","-jar","-Dspring.profiles.active=${1}","-DmanagerUrl=http://192.168.10.202:8888","/home/scf/mdbc_node-0.0.1-SNAPSHOT.jar"]

ENTRYPOINT ["sh","-c","java  \$PROFILES_ACTIVE  \$MANAGER_URL  -jar /home/scf/mdbc_node-0.0.1-SNAPSHOT.jar"]


EOF



}



### docker 集成 jar 包 成镜像,并发布到私服


if [ "$run_stats" == "publish" ];then


  #echo "WORKSPACE is  ${WORKSPACE}"

  cd ${WORKSPACE}

  svn update



  if [[ "${repo_project_name}" == "mdbc_manager" ]];then

     cd md_blockchain_manager

     

   maven_build

     echo -e "\033[32m \n==> repo is ${repo}  \033[0m \n  "

     sleep 1    

     

     dockerfile_management "${repo_project_name}"

     

     #构建镜像

  docker build -t ${repo} .

  # 上传镜像

  docker push ${repo}

  fi


  if [[ ${repo_project_name} == mdbc_node ]];then

     cd md_blockchain

      maven_build

 

   

     dockerfile_node  

     #构建镜像      

  docker build -t ${repo} .

  # 上传镜像

  docker push ${repo}    

     echo -e "\033[32m \n==> repo is ${repo}  \033[0m \n  "

 

  fi




fi


#远端节点执行命令:

需要安装  Execute shell 插件:

jenkins 集成docker 实现jar包 发布-回滚 _docker_06

SSH site : root@192.168.XX.XX:22

Command:

#/bin/bash

echo -e "\033[31m \n *############################### hostname is `hostname`  ###############################* \n  \033[0m   "

########### 客户端执行方法

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

RUN_CHECK(){

if [ $? -eq 0 ];then

echo -e "\033[32m==> Run $1 is successful    \033[0m   "

else

echo -e "\033[31m==> Run $1 is fail    \033[0m   "

fi

}


if [ "$run_stats" == "publish" ];then

repo=${repo_ip}/${repo_images}_${repo_project_name}:${publish_version}.${BUILD_NUMBER}

echo -e "\033[31m docker pull the private repo is :  $repo  \033[0m   "

fi


if [ "$run_stats" == "rollback" ];then

repo=${repo_ip}/${repo_images}_${repo_project_name}:${publish_version}

echo -e "\033[31m docker rollback image is :  $repo  \033[0m   "

fi



## docker 停止方法

docker_stop(){

echo -e "\033[31m docker stop ${1} ---- \033[0m   "

 

docker stop ${1}  >/dev/null 2>&1

RUN_CHECK  "docker stop ${1}"


}


## docker 启动方法

docker_start(){

echo -e "\033[31m docker start ${1} ---- \033[0m   "

 

docker start  ${1}  >/dev/null 2>&1

RUN_CHECK  "docker start ${1}"


}


## docker 删除容器方法

docker_rm(){

echo -e "\033[31m docker rm ${1} ---- \033[0m   "

docker rm ${1}  >/dev/null 2>&1

RUN_CHECK  "docker rm ${1}"


}



## docker 重启方法

docker_restart(){

docker_stop "${1}"

docker_start "${1}"

}


## docker 发布方法


docker_publish(){

docker_stop "${1}"

docker_rm "${1}"


if [ "$1" == "mdbc_manager" ];then

echo -e "\033[31m  docker  run  -d  --name  ${1}   -P   ${2}  -v  /usr/local/java:/usr/local/java  -v /data/${1}:/data    ${repo}      \033[0m  "

docker  run  -d  --name  ${1}   -P   ${2}  -v  /usr/local/java:/usr/local/java  -v /data/${1}:/data    ${repo}    


RUN_CHECK  "docker run  ${1}"

fi


if [[ ${1} == mdbc_node* ]];then

echo -e "\033[31m docker  run  -d  --name  ${1}   -P   ${2}  -v  /usr/local/java:/usr/local/java  -v /data/${1}:/data   \

-e  PROFILES_ACTIVE="-Dspring.profiles.active=mdbc_node_a"   -e MANAGER_URL="-DmanagerUrl=http://192.168.10.202:8888"     ${repo}      \033[0m  "


docker  run  -d  --name  ${1}   -P   ${2}  -v  /usr/local/java:/usr/local/java  -v /data/${1}:/data   -e  PROFILES_ACTIVE="-Dspring.profiles.active=${1}"  \

-e MANAGER_URL="-DmanagerUrl=http://192.168.10.202:8888"  ${repo}    


RUN_CHECK  "docker run  ${1}"


fi


echo -e "\n\n"

}


#### 发布 启动容器 核心方法


if [ "$run_stats" == "publish" ] || [ "$run_stats" == "rollback" ];then


case  "${repo_project_name}"  in  

   mdbc_manager)

      docker_publish "mdbc_manager"  "-p 8888:8888 "

;;

   mdbc_node)

      docker_publish "mdbc_node_a"  "-p 6001:6789 -p 7001:8081 "

      docker_publish "mdbc_node_b"  "-p 6002:6789 -p 7002:8081 "

;;


esac


else

  docker_$run_stats  "$repo_project_name"    

fi



echo -e "\033[32m \n *############################### end  ###############################* \n  \033[0m   "


jenkins 构建发布界面如下:

jenkins 集成docker 实现jar包 发布-回滚 _jar_07


构建日志如下:

jenkins 集成docker 实现jar包 发布-回滚 _docker_08

举报

相关推荐

0 条评论