一、简要描述

  • Jenkins整合Kubernetes

二、Jenkins整合Kubernetes

1、登录Jenkins管理后台,新建一个部署任务

图片

2、配置构建Jenkins任务构建参数信息

2.1、Git构建参数信息

图片

2.2、配置容器启动时占用的端口号参数

图片

2.3、配置流水线信息

图片

图片

3、Jenkins添加k8s master节点的服务器信息

3.1、系统管理->系统配置

图片

3.2、新增k8s master节点的服务器信息

$ mkdir -p /usr/local/deploy/k8s

图片

3.2、填写k8s master节点的服务器用户和密码信息,并测试

图片

图片

3、在Jenkins容器内部与k8s master节点设置免费登录

3.1、进入Jenkins运行容器内部,生成服务器公钥/私钥对

# docker过滤查询出运行的Jenkins服务
$ docker ps | grep jenkins

# 进入Jenkins容器内部
$ docker exec -it jenkins-server /bin/bash

# 在 /root/.ssh 目录下生成了 id_rsa和id_rsa.pub,三次回车
$ ssh-keygen -t rsa

# 进入生成秘钥的目录
$cd /root/.ssh/

# 查看秘钥文件
$ ls

图片

3.2、把Jenkins容器内部生成的秘钥配置到k8s master节点服务器

# 在A服务器查看公钥内容
$ cat /root/.ssh/id_rsa.pub

# 在B服务器编辑 在B服务器的/root/.ssh/authorized_keys文件里添加公钥内容
$ vi /root/.ssh/authorized_keys

图片

3.3、在Jenkins容器内部测试连接k8s master节点服务器

$ ssh root@192.168.95.101

图片

4、在Springboot工程准备k8s yml部署文件和修改Jenkinsfile

// 所有的脚本命令都放在pipeline中
pipeline {
    // 指定任务再哪个集群节点中执行
    agent any

    // 声明全局变量,方便后面使用
    environment {
        // harbor用户名
        harborUserName = 'DevOps'
        // harbor密码
        harborPassword = 'Dev12345'
        // harbor地址
        harborAddress = '192.168.95.131:9020'
        // harbor项目名
        harborRepo = 'repos'
    }

    stages {
        stage ('拉取git仓库代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
            }
        }
        stage ('通过maven构建项目') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
        stage ('通过Sonarqube做质量检测') {
            steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
            }
        }
        stage ('通过Docker制作自定义镜像') {
            steps {
                sh '''cp -rf target/*.jar docker/
                    docker build -t ${JOB_NAME}:$tag docker/'''
            }
        }
        stage ('将自定义镜像推送到Harbor') {
            steps {
                sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}
                    docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
                    docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
            }
        }
        stage ('将yml文件传到k8s-master上') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }

    post {
        // 构建成功通知
        success {
            dingtalk (
                robot: 'Dingding-robot',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 构建成功: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
                               "- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
        // 构建失败通知
        failure {
            dingtalk (
                robot: 'Dingding-robot',
                type: 'MARKDOWN',
                title: "fail: ${JOB_NAME}",
                text: ["- 构建失败: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
                                   "- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
    }
}

4.1、把准备好的k8s yml部署文件复制到项目工程中

图片

4.2、修改Jenkinsfile部署文件

4.2.1、在Jenkins管理后台,进入项目部署详情,进入流水线语法

图片

4.2.2、填写 SSH传输的信息

图片

4.2.3、生成流水线脚本,复制脚本到Jenkinsfile脚本步骤中

图片

4.3、提交修改Jenkinsfile到Gitlab仓库中

图片

5、修改Springboot测试代码,在Gitlab中新增一个tag

5.1、修改测试Controller的测试代码并提交到Gitlab

图片

5.2、在Gitlab管理后台,新增一个tag版本

图片

图片

6、Jenkins打包部署与测试

6.1、在Jenkins项目部署详情,选择一个版本部署

图片

6.2、查看打包部署的日志

图片

图片

6.3、在k8s master节点的目录,查看复制传输过来的k8s yml部署文件

图片

7、Jenkinsfile增加远程执行k8s master服务器执行流水线脚本步骤

// 所有的脚本命令都放在pipeline中
pipeline {
    // 指定任务再哪个集群节点中执行
    agent any

    // 声明全局变量,方便后面使用
    environment {
        // harbor用户名
        harborUserName = 'DevOps'
        // harbor密码
        harborPassword = 'Dev12345'
        // harbor地址
        harborAddress = '192.168.95.131:9020'
        // harbor项目名
        harborRepo = 'repos'
    }

    stages {
        stage ('拉取git仓库代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])
            }
        }
        stage ('通过maven构建项目') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
        stage ('通过Sonarqube做质量检测') {
            steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'
            }
        }
        stage ('通过Docker制作自定义镜像') {
            steps {
                sh '''cp -rf target/*.jar docker/
                    docker build -t ${JOB_NAME}:$tag docker/'''
            }
        }
        stage ('将自定义镜像推送到Harbor') {
            steps {
                sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}
                    docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
                    docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
            }
        }
        stage ('将yml文件传到k8s-master上') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
        stage ('远程执行k8s-master的kubectl命令') {
            steps {
                sh 'ssh root@192.168.95.101 kubectl apply -f /usr/local/deploy/k8s/jenkins-publish-demo.yml'
            }
        }
    }

    post {
        // 构建成功通知
        success {
            dingtalk (
                robot: 'Dingding-robot',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 构建成功: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
                               "- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
        // 构建失败通知
        failure {
            dingtalk (
                robot: 'Dingding-robot',
                type: 'MARKDOWN',
                title: "fail: ${JOB_NAME}",
                text: ["- 构建失败: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +
                                   "- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
    }
}

7.1、Jenkins项目配置详情,进入流水线语法页面

图片

7.2、生成‘远程执行k8s-master的kubectl命令’ 流水线脚本

图片

8、提交修改Jenkinsfile文件,同时修改测试代码版本

8.1、提交Jenkinsfile和修改的测试代码到Gitlab

图片

8.2、修改Springboot项目中 k8s 部署yml配置文件,并提交到Gitlab

图片

8.3、在Gitlab仓库后台新建一个tag

图片

图片

9、Jenkins项目执行部署并测试部署结果

9.1、Jenkins项目详情执行部署

图片

9.2、Jenkins查看部署日志信息

图片

图片

9.3、登录kuboard管理后台,查看部署结果

图片

图片

10、浏览器访问部署的服务

图片

ip加端口的方式访问服务:http://192.168.95.101:30778/sayHello

域名加端口的方式访问:http://nginx.flygo.tech:30778/sayHello

图片

图片

正文到此结束
最后修改:2025 年 06 月 24 日
如果觉得我的文章对你有用,请随意赞赏