交付tomcat形式的dubbo服务消费者到K8S集群_勿念旧梦的博客-程序员宅基地

技术标签: tomcat  K8s  k8s  jenkins  CI&CD  

制作tomcat容器的底包镜像

下载并配置

[root@node7-200 ~]# cd /opt/src/
[root@node7-200 src]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.70/bin/apache-tomcat-8.5.70.tar.gz
[root@node7-200 src]# mkdir /data/dockerfile/tomcat
[root@node7-200 src]# tar xvf apache-tomcat-8.5.70.tar.gz -C /data/dockerfile/tomcat/
[root@node7-200 src]# cd /data/dockerfile/tomcat/
[root@node7-200 tomcat]# vim apache-tomcat-8.5.70/conf/logging.properties

删掉3manager,4host-manager的handlers,并注释掉相关的
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler,  java.util.logging.ConsoleHandler
#3manager.org.apache.juli.AsyncFileHandler.level = FINE
#3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
#3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

#4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
#4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
#4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
#4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
日志级别改成INFO
1catalina.org.apache.juli.AsyncFileHandler.level = INFO
2localhost.org.apache.juli.AsyncFileHandler.level = INFO
java.util.logging.ConsoleHandler.level = INFO

准备Dockerfile

[root@node7-200 tomcat]#
[root@node7-200 tomcat]# cat Dockerfile

From harbor.od.com/public/jre:8u112
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ 
    echo 'Asia/Shanghai' >/etc/timezone
ENV CATALINA_HOME /opt/tomcat
ENV LANG zh_CN.UTF-8
ADD apache-tomcat-8.5.70/ /opt/tomcat
ADD config.yml /opt/prom/config.yml
ADD jmx_javaagent-0.3.1.jar /opt/prom/jmx_javaagent-0.3.1.jar
WORKDIR /opt/tomcat
ADD entrypoint.sh /entrypoint.sh
CMD ["/entrypoint.sh"]

[root@node7-200 tomcat]# vi config.yml

---
rules:
  - pattern: '-*'

[root@node7-200 tomcat]# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O jmx_javaagent-0.3.1.jar
[root@node7-200 tomcat]# vi entrypoint.sh

#!/bin/bash
M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=$(hostname -i):${M_PORT:-"12346"}:/opt/prom/config.yml"
C_OPTS=${C_OPTS}
MIN_HEAP=${MIN_HEAP:-"128m"}
MAX_HEAP=${MAX_HEAP:-"128m"}
JAVA_OPTS=${JAVA_OPTS:-"-Xmn384m -Xss256k -Duser.timezone=GMT+08  -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"}
CATALINA_OPTS="${CATALINA_OPTS}"
JAVA_OPTS="${M_OPTS} ${C_OPTS} -Xms${MIN_HEAP} -Xmx${MAX_HEAP} ${JAVA_OPTS}"
sed -i -e "1a\JAVA_OPTS=\"$JAVA_OPTS\"" -e "1a\CATALINA_OPTS=\"$CATALINA_OPTS\"" /opt/tomcat/bin/catalina.sh
cd /opt/tomcat && /opt/tomcat/bin/catalina.sh run 2>&1 >> /opt/tomcat/logs/stdout.log

[root@node7-200 tomcat]# chmod u+x entrypoint.sh
[root@node7-200 tomcat]# docker build . -t harbor.od.com/base/tomcat:v8.5.70
[root@node7-200 tomcat]# docker push harbor.od.com/base/tomcat:v8.5.70

使用Jenkins持续构建

改造下dubbo-demo-web项目,使用Jenkins进行CI

配置New job

create new jobs -->Enter an item name

tomcat-demo

Pipeline -> OK

Discard old builds
Days to keep builds : 3
Max # of builds to keep : 30

This project is parameterized

Add Parameter -> String Parameter
Name : app_name
Default Value :
Description : project name. e.g: tomcat-demo

Add Parameter -> String Parameter
Name : image_name
Default Value :
Description : project docker image name. e.g: app/dubbo-demo-service

Add Parameter -> String Parameter
Name : git_repo
Default Value :
Description : project git repository.

Add Parameter -> String Parameter
Name : git_ver
Default Value :
Description : git commit id of the project.

Add Parameter -> String Parameter
Name : add_tag
Default Value :
Description : project docker image tag, date_timestamp recommended. e.g: 190117_1920

Add Parameter -> String Parameter
Name : mvn_dir
Default Value : ./
Description : project maven directory. e.g: ./

Add Parameter -> String Parameter
Name : target_dir
Default Value : ./target
Description : the relative path of target file such as .jar or .war package. e.g: ./dubbo-server/target

Add Parameter -> String Parameter
Name : mvn_cmd
Default Value : mvn clean package -Dmaven.test.skip=true
Description : maven command. e.g: mvn clean package -e -q -Dmaven.test.skip=true

Add Parameter -> Choice Parameter
Name : base_image
Default Value :
base/tomcat:v7.0.94
base/tomcat:v8.5.70
base/tomcat:v9.0.17
Description : project base image list in harbor.od.com.

Add Parameter -> Choice Parameter
Name : maven
Default Value :
3.6.1-8u232
3.2.5-6u025
2.2.1-6u025
Description : different maven edition.

Add Parameter -> String Parameter
Name : root_url
Default Value : ROOT
Description : webapp dir

Pipeline Script

pipeline {
    
  agent any 
    stages {
    
    stage('pull') {
     //get project code from repo 
      steps {
    
        sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
        }
    }
    stage('build') {
     //exec mvn cmd
      steps {
    
        sh "cd ${params.app_name}/${env.BUILD_NUMBER}  && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
      }
    }
    stage('unzip') {
     //unzip  target/*.war -c target/project_dir
      steps {
    
        sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && unzip *.war -d ./project_dir"
      }
    }
    stage('image') {
     //build image and push to registry
      steps {
    
        writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.od.com/${params.base_image}
ADD ${params.target_dir}/project_dir /opt/tomcat/webapps/${params.root_url}"""
        sh "cd  ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
      }
    }
  }
}

构建tomcat-demo项目

点Build with Parameters
依次填入/选择:

app_name:       tomcat-demo
image_name:     app/dubbo-demo-web
git_repo:       [email protected]
git_ver:        tomcat
add_tag:        210831_2200
mvn_dir:        ./
target_dir:     ./dubbo-client/target
mvn_cmd:        mvn clean package -Dmaven.test.skip=true
base_image:     base/tomcat:v8.5.70
maven:          3.6.1-8u232
root_url:       ROOT

点击Build进行构建,等待构建完成。
完成后检查harbor仓库内可以看到镜像 app/dubbo-demo-web:tomcat_210831_2200
在这里插入图片描述

发布tomcat-demo

dashboard上修改资源配置清单镜像,重启pod
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wunianjiumeng/article/details/120028710

智能推荐

自定义注解和Annotation类使用-程序员宅基地

文章浏览阅读833次。注解相当于一个标记,是类的组成部分使用者可以使用注解传递参数(自定义注解)注解也可用于检验内容(@Override, @FunctionalInterface)注解也可用于强制运行内容(@before)等等... 自定义注解:格式:public @interface 注解名{格式1:数据类型 属性名();格式2:数据类型 属性名() default 默认值;...

安装cuda和Pytorch_pytorch cuda_九羽-的博客-程序员宅基地

文章浏览阅读1w次,点赞8次,收藏54次。1. 首先安装cuda和cudnn参考:CUDA安装教程(超详细)_Billie使劲学的博客-程序员宅基地_如何安装cuda先查看本机的cuda支持版本【非常重要,版本不对将无法使用】win+s,搜索NVIDIA Control Panel,打开NVIDIA控制面板。选择左下角的系统信息->组件,查看cuda版本官网:CUDA Toolkit Archive | NVIDIA Developer然后在该网站选者相应的cudatoolkit版本下载有一个地方注意,选._pytorch cuda

AndroidAPI28允许明文网络请求_api28使用网络-程序员宅基地

文章浏览阅读1.2k次。AndroidManifest.xml中,application下加入一项android:usesCleartextTraffic="true"_api28使用网络

layui官网将于2021年10月13日下架……_layui为什么下架-程序员宅基地

文章浏览阅读1.1k次。不管是前端还是后端,技术的更新速度超快,再过几年,当下流行的技术,很可能就会被替代;唯一的出路就是不断学,不然老技术抛弃你,新技术不会用,最终就被淘汰出局。_layui为什么下架

代码审计系列篇二之渗透技巧_代码审计渗透-程序员宅基地

文章浏览阅读186次。渗透技巧对于代码审计的意义在哪?我们知道代码审计的流程中有漏洞发现及payload构造,有的时候在漏洞发现阶段灰盒测试比源代码审计的速度更快效率更高,源代码审计,你得看代码吧,而灰盒测试时,测试语句以上,漏洞就发现了。payload的出现是为了证明漏洞的存在,而payload构造,单单作为一个开发程序员,或者渗透技巧菜鸟即便明白攻击原理,在漏洞证明时,也不一定能够证明出来。为什么?有一些奇葩的写法,是开发程序员或渗透技巧的菜鸟不曾接触过的,或者说你渗透经验不足,是不太可能能够证明漏洞存在的。这时候渗..._代码审计渗透

存储过程和T-SQL语句的执行计划重用性比较_存储过程和执行计划的区别-程序员宅基地

文章浏览阅读1.5k次。存储过程和T-SQL的区别是服务器端是否会对执行计划进行缓存,即每次是否都需要对于要执行的内容重新编译,这不仅仅取决于是存储过程还是T-SQL,还取决于你语句中对参数的使用方式。示例如下:1、直接使用T-SQL语句 select top 100 * from A where month_id=200901month_id值发生变化时,需要重新编译。2、直接使用的常量参数_存储过程和执行计划的区别

随便推点

p标签中有span标签,垂直居中时pc与移动的坑-程序员宅基地

文章浏览阅读4.4k次。题外话:修改别人的代码真的很辛苦,请各位前端er编写代码的时候要时时刻刻的问自己 正题来了,mm遇到了个什么坑呢?上图第一张图是用chrome的firebug调整到移动端大小的效果 第二张图是真机测试,移动端的效果 相信眼尖的小伙伴一眼就看出来了,行不是对齐的,可是为什么pc端测试是对齐的,移动端测试却不是兑取的呢?下一波截图:HTML截图 css截图 .p_no_li

python实现sip协议_SIP协议的常见命令 - HouWeiGui的个人空间 - OSCHINA - 中文开源技术交流社区...-程序员宅基地

文章浏览阅读2.1k次。一、常用的一些响应消息和SIP信令:1、sip相应消息100试呼叫(Trying)180振铃(Ringing)181呼叫正在前转(Call is Being Forwarded)200成功响应(OK)302临时迁移(Moved Temporarily)400错误请求(Bad Request)401未授权(Unauthorized)403禁止(Forbidden)404用户不存在(Not Found..._python sip

C# 基础(十三)C# XML配置文件、ini配置文件的创建、读写:动态修改IP_c#创建ini文件并新建一个节点-程序员宅基地

文章浏览阅读7.5k次,点赞4次,收藏46次。一、简介1、传统的配置文件ini已有被xml文件逐步代替的趋势,这里主要讨论XML配置文件。2、需要引入using System.Xml.Linq;命名空间二、ini网址https://www.cnblogs.com/cncc/p/3415694.html(重点)https://www.cnblogs.com/xmy-007/p/6400221.htmlhttps://ww..._c#创建ini文件并新建一个节点

ESP32-C3入门教程 问题篇②——Image length XX doesn‘t fit in partition length,flash 分区空间不足_e (679) esp_image: image length 1445984 doesn't fi-程序员宅基地

文章浏览阅读1.3k次,点赞6次,收藏4次。文章目录一、问题一、问题_e (679) esp_image: image length 1445984 doesn't fit in partition length 9216

Python-OpenCV基础:图像的全景拼接_opencv 4目摄像头 全景-程序员宅基地

文章浏览阅读5.2k次,点赞7次,收藏57次。背景介绍图片的全景拼接如今已不再稀奇,现在的智能摄像机和手机摄像头基本都带有图片自动全景拼接的功能,但是一般都会要求拍摄者保持设备的平稳以及单方向的移动取景以实现较好的拼接结果。这是因为拼接的图片之间必须要有相似的区域以保证拼接结果的准确性和完整性。本文主要简单描述如何用 Python 和 OpenCV 库实现两张图片的自动拼合,首先简单介绍一下两张图片拼接的原理。基本原理要实现两张图..._opencv 4目摄像头 全景

什么是BrightID_西京刀客的博客-程序员宅基地

文章浏览阅读2.1k次。BrightID什么是BrightIDBrightID 是一种社交身份网络,可让您证明您只使用一个帐户。 这是数字身份的圣杯。BrightID是一个去中心化的匿名社交身份网络,过创建和分析社交图谱来解决身份唯一性问题,用户通过BrightID可以向应用证明自己身份的独特,没有在使用多个帐户,而应用也无需收集可识别个人身份的信息或与中心化组织合作,不会侵犯用户隐私。目前,BrightIDBeta版本App已上线安卓和iOS平台。通俗来说,BrightID真正的意义在于,通过使用BrightID,我们的_brightid

推荐文章

热门文章

相关标签