jenkins基于node集成 maven docker Kubernetes

背景

jenkins集成三方插件经调研一共有两种方式,一种是基于静态的node节点和插件处理cicd的相关插件,一种是基于master-slave 基于k8s的pod节点的动态方式。

版本

jenkins 2.414

kubernetes 1.23.6

docker 2.10.+

maven 3.8.8

不同的优缺点

静态node的方式:配置简单,但是需要配置tools相关参数,需要再jenkins部署的节点安装对应的jdk,maven,docker

动态node的方式:基于云cloud的方式,配置Kubernetes,通过Kubernetes配置jnpl节点,在jnpl的pod节点进行运行。运行后则进行销毁当前pod

本期只调研基于静态node的方式

jenkins安装docker,maven,Kubernetes

jenkins集成 docker

1,安装docker插件

2,在tools配置 docker

jenkins集成Kubernetes

安装Kubernetes cli插件

需要配置kubectl的信任插件

点击 manage jenkins->cerdentials->systemc->global credentials

关于选择的文件需要进入kubernetes的节点中 获取 ./kube/config文件,将文件下载后,放入到选择文件夹中,如图,config.txt是k8s的配置文件,唯一标识是pipline使用的内容id

jenkins集成maven

在tools中配置maven,要记住name很关键,在jenkins脚本中要使用

新建项目运行下面内容

常用Pipeline的项目,更清晰和明确当前问题

pipeline语法,这里要简单说一下agent,这个代理节点里面的"devops"是物理节点,对应的位置在

javascript 复制代码
pipeline {
   agent {

	label 'devops'
   }
    tools {
        maven 'maven' // 这里的 'maven' 是您在全局工具配置中定义的 Maven 工具的名称
		dockerTool  'docker'
    }

   stages {
      stage('Hello') {
         steps {
            echo 'Hello World'
         }
      }
      stage("kubectl") {
      	steps {
            // 使用kubectl cli语法
            withKubeConfig([credentialsId: 'k8s-secret',serverUrl: 'https://192.168.10.7:6443']) {
                sh 'kubectl get nodes'
            }
         }
      }
	  stage("maven") {
      	steps {
            sh 'mvn -v'
         }
      }
	  stage("docker") {
      	steps {
            sh 'docker -v'
         }
      }
   }
}

查看执行结果

可以发现执行成功了。

scss 复制代码
Running on Jenkins in /var/lib/jenkins/workspace/k8s-cicd-demo
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Tool Install)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
Hello World
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (kubectl)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withKubeConfig
[Pipeline] {
[Pipeline] sh
+ kubectl get nodes
NAME         STATUS   ROLES                  AGE    VERSION
k8s-master   Ready    control-plane,master   2d9h   v1.23.6
k8s-slave1   Ready    <none>                 2d9h   v1.23.6
k8s-slave2   Ready    <none>                 2d9h   v1.23.6
[Pipeline] }
[kubernetes-cli] kubectl configuration cleaned up
[Pipeline] // withKubeConfig
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (maven)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ mvn -v
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /home/maven/apache-maven-3.8.8
Java version: 17.0.10, vendor: Oracle Corporation, runtime: /home/jdk17/jdk-17.0.10
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (docker)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker -v
Docker version 20.10.12, build e91ed57
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

遇到的问题

1, kubectl not found

当前解决这个问题时间有点久忘了,但是很粗暴,就是在jenkins节点配置了和k8s的master一样的内容,将./kube/config 拷贝过来了,然后好像就可以了,或者说都不用处理,也会远程调用 k8s的master内容

后续

基于静态master的方式,很简单,当时花费很长时间去学习动态node节点的方式创建,我个人觉得虽然基于k8s动态创建比较麻烦,但是后期很省事,并且可以一套配置下来后,可以很好的兼容所有jenkins,不用每台进行配置了,性能上也是很好的一种方案。

参考学习

参考:learn.lianglianglee.com/%e4%b8%93%e...

相关推荐
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
2401_854391081 小时前
Spring Boot大学生就业招聘系统的开发与部署
java·spring boot·后端
虽千万人 吾往矣1 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
这孩子叫逆2 小时前
Spring Boot项目的创建与使用
java·spring boot·后端
coderWangbuer3 小时前
基于springboot的高校招生系统(含源码+sql+视频导入教程+文档+PPT)
spring boot·后端·sql
攸攸太上3 小时前
JMeter学习
java·后端·学习·jmeter·微服务
Kenny.志3 小时前
2、Spring Boot 3.x 集成 Feign
java·spring boot·后端
sky丶Mamba4 小时前
Spring Boot中获取application.yml中属性的几种方式
java·spring boot·后端
千里码aicood5 小时前
【2025】springboot教学评价管理系统(源码+文档+调试+答疑)
java·spring boot·后端·教学管理系统
程序员-珍5 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发