学习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&useUnicode=true&characterEncoding=UTF-8&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&useUnicode=true&characterEncoding=UTF-8&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上

浙公网安备 33010602011771号