• k8s-jenkins持续发布tomcat项目


    k8s-jenkins持续发布tomcat项目

    一、需求

      这个实验前期后后搞了很久,二进制部署完k8s集群就开始做jenkins持续集成了。

           参考这个语雀的部署链接:https://www.yuque.com/duduniao/k8s/gp8n04【从3. 交付Jenkins到K8S 开始到maven结束】。

           部署过程中遇到很多问题 :jenkins镜像要从版本2.190.3换为blueocean(pipeline用),然后gitlab拉不了代码。。。【这篇记录了问题:https://www.cnblogs.com/windysai/p/14161282.html 】

           说回正题吧,之前解决那个利用configmap覆盖tomcat项目数据库配置文件的问题【https://www.cnblogs.com/windysai/p/14305441.html】,然后回头搞完这个流程吧,公司办公电脑开了4台虚机做不了(就12G内存,拉镜像的时候卡死不动),然后我把这环境搬到家里(16G内存),勉强能做。然鹅,家里那个jenkins集群环境最近抽风了!!!jenkins登录连续几天报错:bad gateway,jenkins日志没有找到报错,唯一比较像错误的是kubelet的日志。。。。

           总的来说,就是不仅部署过程问题多,环境容易抽风或者配置不够不能做,还不会搞不出来!!!各种惨 = =

     jenkins 打开页面及对应日志:

             

     

    kubelet的日志(还没去研究)

          然后最近领导在我工作日志上评论,叫我把这个实验在公司的测试平台跑通发布,想想也挺有道理,毕竟公司环境有了(kubeadm安装),配置不用愁。大致介绍下这个环境(是公司前运维部署的,单节点master,2个工作节点,服务那列可能会有所遗漏)

    主机名

    IP

    配置

    服务

    master1(单节点,没做集群)

    192.168.0.233

    4核CPU,10G内存,150G存储

    Docker、Harbor、kubernetes 1.10.1服务

    slave01(工作节点1)

    192.168.0.243

    8核CPU,16G内存,100G存储

    Docker

    slave02(工作节点2)

    192.168.0.244

    8核CPU,16G内存,100G存储

    Docker

         当我终于看到这个成功页面,之前的阴霾一扫而空!!!

         大致说下实现思路:

          以docker hub下载的tomcat:8.5.31(为了与之前文章保持一致性)为最原始基础镜像,然后对其进行预处理变为tomcat:v8.5.31(最关键是复制tomcat的启动脚本【涉及解压容器内的war包】)

          jenkins发布,从gitlab拉取代码,maven编译之后生成war包,复制到tomcat:v8.5.31,重新构建发布包:tomcat-deploy:v1到harbor上,最后交付资源到k8s跑起项目的tomcat容器

     

     

    、问题解决

         说明:maven是从我的虚机复制出来的,因为构建公司项目需要很多依赖包。

         还是使用tomcat基础镜像:tomcat:8.5.31

         特别强调下,大家看这篇文章的时候一定要先看我这篇:https://www.cnblogs.com/windysai/p/14305441.html,因为就是基于这里改的,重复的部分我没写)

     

     ## 1、从官网下载基础镜像到本地: tomcat:8.5.31  ——》最原始的镜像

    docker pull tomcat:8.5.31

    ## 2、构造tomcat镜像(可以理解为预处理)

        加启动脚本,删除webapps下的文件等,是jenkins发布使用的基础镜像(跟最最原始拉下来的官方镜像有区别的,大家请注意)

     (1)编写Dockerfile

    (删掉了复制war包到镜像那句,因为我要用jenkins构建的war包,不能写死的!结合后面的pipeline代码一起看)

    From tomcat:8.5.31    #上面docker pull已拷到本地

    COPY wdtz-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war #去掉

     (2)runtomcat.sh  跟之前文章一样,保持不变

     (3)新增:构建tomcat镜像并上传到harbor:v8.5.31   ——》 供jenkins发布用

    docker build -t tomcat:v8.5.31 ./
    docker push 192.168.0.233/test/tomcat:v8.5.31

       上传到harbor:

    ## 3、编写交付k8s的资源配置文件:configmap.yaml,deployment.yaml,service.yaml

    (1)configmap.yaml:保持不变

    (2)deployment.yaml

     1 。。。
     2 spec:
     3       volumes:
     4       - name: tomcat-mysql-conf
     5         configMap:
     6           name: tomcat-mysql-conf
     7       containers:
     8       - name: tomcat
     9         image: 192.168.0.233/test/tomcat-deploy:v1
    10         ports:
    11         - containerPort: 8080
    12 。。。

    (3)service.yamlspec.ports.nodePort: 30031   ——》上篇文章的端口用不了,有范围限制

    1 spec:
    2   type: NodePort
    3   ports:
    4   - protocol: TCP
    5     port: 8080 
    6     targetPort: 8080
    7     nodePort: 30031
    8 。。。
    View Code

    ## 4、jenkins配置部分(直接贴代码了,有不懂的可以给我留言)

     1 pipeline {
     2     agent any
     3     environment {
     4         GIT_URL="拉取的项目代码地址"
     5         BRANCH="分支名"
     6         BUILD_PATH="/root/k8s/"
     7     }
     8     stages {
     9             stage('拉取代码') {
    10                 steps{
    11                     echo "git pull。。。"
    12                     git branch: "${BRANCH}", credentialsId: '拉取gitlab代码的凭证', url: "${GIT_URL}"
    13                 }
    14             }
    15             stage('代码编译') {
    16                 steps{
    17                     echo "maven build 。。。"
    18                     sh "/root/ljy_test/maven-3.6.2-8u232/bin/mvn clean install -e -Dmaven.test.skip=true -P pro -f pom.xml"
    19                 }
    20             }
    21             stage('构建镜像') {
    22                 steps {
    23                    echo "build docker tomcat deploy image。。。"
    24                    sh """
    25                    echo '
    26                        From 192.168.0.233/test/tomcat:v8.5.31
    27                        LABEL maintainer ljy
    28                        COPY ./target/wdtz-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
    29                    ' > Dockerfile
    30                    docker build -t 192.168.0.233/test/tomcat-deploy:v1 .
    31                    docker push 192.168.0.233/test/tomcat-deploy:v1
    32                    """
    33                 }
    34             }
    35      
    36             stage('部署到k8s节点'){
    37                steps{
    38                     echo "deploy project to k8s node。。。"
    39                     sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/configmap.yaml"
    40                     sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/deployment.yaml"
    41                     sh "/usr/bin/kubectl apply -f /root/ljy_test/tomcat/service.yaml"
    42                    }
    43             }
    44     }
    45 }

    三、实验结果
      访问:http://192.168.0.233:30031/report/notice.html

      服务器日志截图(代表项目可用,手机也有收到验证码):

       

    
    

     

  • 相关阅读:
    angularjs中的页面访问权限设置
    Html页面head标签元素的意义和应用场景
    脚本引用中的defer和async的用法和区别
    自适应页面中如何使用雪碧图
    网页颜色分辨测试小游戏的js化辨别及优化
    jQuery1.9及其以上版本中动态元素on绑定事件无效解决方案
    Data URL简介及Data URL的利弊
    浏览器调试:事件定位与源码查找
    简述ES5 ES6
    移动端中pagehide、pageshow的应用
  • 原文地址:https://www.cnblogs.com/windysai/p/14327932.html
Copyright © 2020-2023  润新知