学习K8S之路.7---使用Jenkins打包war包,并部署Tomcat

一:准备Tomcat镜像底包

  1:在运维主机上准备Tomcat底包

  tomcat下载链接:http://tomcat.apache.org/

[root@k8s-6-96 src]# ls -l|grep tomcat
-rw-r--r-- 1 root root   9690027 Apr 10 22:57 apache-tomcat-8.5.40.tar.gz
[root@k8s-6-96 src]# mkdir -p /data/dockerfile/tomcat8 && tar xf apache-tomcat-8.5.40.tar.gz -C /data/dockerfile/tomcat
[root@k8s-6-96 src]# cd /data/dockerfile/tomcat8 && rm -fr apache-tomcat-8.5.40/webapps/*

  2:准备Dockerfile

[root@k8s-6-96 tomcat8-5.51]# vi /data/dockerfile/tomcat/Dockerfile

From stanleyws/jre8: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.51/ /opt/tomcat
WORKDIR /opt/tomcat
ADD entrypoint.sh /entrypoint.sh
CMD ["/entrypoint.sh"]

 

[root@k8s-6-96 tomcat8-5.51]# cat entrypoint.sh 
#!/bin/bash
M_OPTS="-Duser.timezone=Asia/Shanghai"
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

chmod + x entrypoint.sh
docker build . -t harbor.od.com/base/tomcat:v8.5.40

docker push harbor.od.com/base/tomcat:v8.5.40

  

二:Jenkins打包war包

  和打包jar的方式是一样,采用参数化进行构建。注:有的mav 打包需要使用 install,可以使用命令:mvn -X clean install

 

 

流水线脚本:

pipeline {
  agent any 
    stages {
    stage('pull') { //get project code from repo 
      steps {
        sh "mkdir ${env.BUILD_NUMBER} && cd ${env.BUILD_NUMBER} && svn checkout ${params.svn_repo} . --username=liyuanping --password=liy"
        }
    }
    stage('build') { //exec mvn cmd
      steps {
        sh "cd ${env.BUILD_NUMBER} && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
      }
    }
    stage('image') { //build image and push to registry
      steps {
        writeFile file: "${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.auth.com/${params.base_image}
ADD ${params.target_dir}/${params.app_name}.war /opt/tomcat/webapps/"""

        sh "cd ${env.BUILD_NUMBER} && docker build -t harbor.auth.com/${params.image_name}:v${params.add_tag} . && docker push harbor.auth.com/${params.image_name}:v${params.add_tag}"
      }
    }
  }
}

 

三:部署Tomcat

配置Tomcat 资源配置清单

[root@k8s-6-96 ~]# cd /data/k8s-yaml/tomcat/
[root@k8s-6-96 tomcat]# cat dp.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gmrz-tomcat
  namespace: system
  labels:
    name: gmrz-tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gmrz-tomcat
  template:
    metadata:
      labels:
        app: gmrz-tomcat
        name: gmrz-tomcat
    spec:
      containers:
      - name: gmrz-tomcat
        image: harbor.auth.com/base/tomcat:v8.5.51
[root@k8s-6-96 tomcat]# cat svc.yaml 
kind: Service
apiVersion: v1
metadata: 
  name: gmrz-tomcat
  namespace: system
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: gmrz-tomcat
[root@k8s-6-96 tomcat]# cat ingress.yaml 
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: gmrz-tomcat
  namespace: system
spec:
  rules:
  - host: tomcat.auth.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: gmrz-tomcat
          servicePort: 8080

补充一个工作的tomcat,主要是挂载一个配置文件,svc.yaml 和 ingress.yaml 文件是一样的。

[root@k8s-6-96 uap]# cat cm.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: gmrz-uap-config
  namespace: system

data:
  context.xml: |
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
  
    <Resource name="jdbc/fidods"
       type="javax.sql.DataSource"
       factory="org.apache.commons.dbcp.BasicDataSourceFactory"
       url="jdbc:mysql://192.168.6.120:3306/uap_511?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"
       driverClassName="com.mysql.jdbc.Driver"
       username="root"
       password="*********"
       auth="Container"
       maxTotal="300"
       maxIdle="300"
       maxWaitMillis="5000"
       timeBetweenEvictionRunsMillis="30000"
       minEvictableIdleTimeMillis="60000"
       removeAbandonedOnBorrow="true"
       removeAbandonedTimeout="30" />
  
    <Resource name="jdbc/fidologds"
      type="javax.sql.DataSource"
      factory="org.apache.commons.dbcp.BasicDataSourceFactory"
      url="jdbc:mysql://192.168.6.120:3306/uaplog_511?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"
      driverClassName="com.mysql.jdbc.Driver"
      username="root"
      password="*******"
      auth="Container"
      maxTotal="20"
      maxActive="1000"
      maxIdle="300"
      maxWaitMillis="5000"
      timeBetweenEvictionRunsMillis="30000"
      minEvictableIdleTimeMillis="60000"
      removeAbandonedOnBorrow="true"
      removeAbandonedTimeout="10" />
    </Context>
[root@k8s-6-96 uap]# cat dp.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gmrz-uap
  namespace: system
  labels:
    name: gmrz-uap
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gmrz-uap
  template:
    metadata:
      labels:
        app: gmrz-uap
        name: gmrz-uap
    spec:
      volumes:
      - name: config-context
        configMap:
          name: gmrz-uap-config
      containers:
      - name: gmrz-uap
        image: harbor.auth.com/base/tomcat-uap:v8.5.51
        volumeMounts:
          - name: config-context
            mountPath: /opt/tomcat/conf/context.xml
            subPath: context.xml

注解:先声明一个
volumes卷,然后把volumes卷挂载在 volumeMounts上

 

posted @ 2020-07-07 15:15  为生活而努力  阅读(754)  评论(0)    收藏  举报