一、简要描述
- 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

