zoukankan      html  css  js  c++  java
  • k8s实现Jenkins的Master-Slave分布式构建

    简介

    image-20210325085956904

    Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且同时可以构建多个,有点类似负载均衡的概念。

    k8s+Docker+Jenkins持续集成架构图:

    image-20210325091415176

    环境介绍

    安装环境说明

    ip 角色 内存 软件
    192.168.1.50 代码托管服务器 8G Gitlab
    192.168.1.52 Docker仓库 8G Harbor
    192.168.1.36 k8s-master 8G k8s,docker,NFS
    192.168.1.37 k8s-node1 8G k8s,docker,NFS
    192.168.1.38 k8s-node2 8G k8s,docker,NFS

    k8s安装这里就不具体介绍了

    安装配置NFS

    所有节点都需要执行:

    yum install -y nfs-utils
    

    master执行:创建共享目录:

    mkdir -p /opt/nfs/jenkins
    #编写NFS的共享配置
    vi /etc/exports 
    
    /opt/nfs/jenkins *(rw,no_root_squash)
    

    开启服务:

    #开机启动
    systemctl enable nfs
    #启动
    systemctl start nfs
    

    查看NFS共享目录

    showmount -e 192.168.1.36
    

    image-20210328224243708

    k8s安装Jenkins-Master

    下文所有yaml在https://gitee.com/wj204811/wj204811/tree/master/k8s-jenkins中

    cd  nfs-client/
    kubectl create -f .
    kubectl get pods
    

    image-20210325120641024

    cd ../jenkins-master/
    kubectl create namespace kube-ops
    kubectl create -f .
    
    kubectl get pods --namespace kube-ops
    kubectl  get  svc --namespace kube-ops
    kubectl  get pod --namespace kube-ops -o wide
    

    image-20210328221124039

    浏览器直接访问暴露出来的端口:http://192.168.1.36:32138/,可以访问jenkins

    image-20210328221146059

    至于具体的k8s_jenkins_jenkins-0_kube-ops后面字符是什么,要自己去看了。

    docker logs k8s_jenkins_jenkins-0_kube-ops_d572ec37-07dd-4fe3-b212-3df5ceec121d_0
    

    image-20210328221230602

    选择插件来安装

    image-20210328221320477 image-20210328221347057 image-20210328221418118 image-20210328221435720

    开始使用jenkins:进入我们熟悉的页面

    image-20210328215402884

    Jenkins-Master基本插件安装

    cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-a3a4e5c6-1ba0-41d1-a438-e6029a45b834
    cd updates
    sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' default.json
    

    这个页面:

    image-20210328215703620

    Update Site需要改成清华的url

    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    
    image-20210328221722727

    点击提交。

    访问:http://192.168.1.36:32138/restart 把jenkins重新启动,等待一段时间,重启完成后,安装一些插件。

    image-20210326171524683

    image-20210326171848810

    image-20210326171953608

    image-20210326172109054

    安装k8s插件

    image-20210328223305254

    安装完成后,进入系统配置

    image-20210328223459759

    点击那行下划线,点击add a new cloud,选择k8s

    image-20210328223516297

    配置集群,k8s地址固定:https://kubernetes.default.svc.cluster.local/

    名称空间填写:kube-ops

    点击连接测试,看能否连接上

    image-20210328223755195

    jenkins连接地址:http://jenkins.kube-ops.svc.cluster.local:8080

    image-20210328224007006

    点击save apply,然后重启jenkins

    构建jenkins-slave自定义镜像

    Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择 运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/jnlp-slave:latest,但是这个镜像里面并没有Maven 环境,为了方便使用,我们需要自定义一个新的镜像:

    所有文件已经上传到码云了:https://gitee.com/wj204811/wj204811/tree/master/k8s-jenkins-slave

    mkdir jenkins-slave
    

    上传所有文件到jenkins-slave文件夹下

    image-20210328225233678

    构建镜像:

    docker build -t jenkins-slave-maven:lasted .
    

    等待镜像构建,构建成功后,我们需要把镜像上传到harbor中

    image-20210328233642450

    docker tag jenkins-slave-maven:lasted 192.168.1.52:85/library/jenkins-slave-maven:lasted
    #登陆harbor,如果登陆失败,看我这篇博客 https://www.cnblogs.com/wwjj4811/p/14220541.html
    docker login -u admin -p Harbor12345 192.168.1.52:85
    docker push 192.168.1.52:85/library/jenkins-slave-maven:lasted
    

    image-20210328234636899

    image-20210328234708962

    jenkins-slave创建

    创建jenkins流水线

    image-20210328235306255

    创建凭证:

    image-20210329000712066

    image-20210329000733467

    设置流水线脚本:

    def git_address ="http://192.168.1.50:82/root/tensquare_back.git"
    def git_auth = "070a1a0f-6f41-4b47-8b4e-9621087df6fd"
    //创建一个Pod的模板,label为jenkins-slave
    podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
            containerTemplate(
                name: 'jnlp',
                image: "192.168.1.52:85/library/jenkins-slave-maven:lasted"
            )
        ]
    )
    {
        //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod
        node("jenkins-slave"){
             // 第一步
            stage('拉取代码'){
                checkout([$class: 'GitSCM', branches: [[name: 'master']],userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
            }
        }
    }
    

    image-20210329000807057

    点击保存,出来构建该流水线进行测试

    在节点管理中,可以看到k8s为我们动态创建了一个节点

    image-20210329000921518

    等待构建结束后,slave会被动态回收

    image-20210329001024801

    构建成功。

    image-20210329000939665

    至此:k8s实现了jenkins的Master-Slave分布式构建。
    (中间过程很曲折,坑特别多,花了我好几天时间才搭建完毕)

  • 相关阅读:
    笔记:今天必须读完的文章
    windows android 第三方模拟器 看日志
    彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
    texturepacker命令行处理图片 格式选择
    Android插件化主流框架和实现原理
    Socket心跳包机制与实现 一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
    图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理
    localstorage的跨域存储方案 介绍
    UGUI的图集处理方式-SpriteAtlas的前世今生
    web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14590698.html
Copyright © 2011-2022 走看看