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...

相关推荐
leobertlan5 小时前
2025年终总结
前端·后端·程序员
面向Google编程5 小时前
从零学习Kafka:数据存储
后端·kafka
易安说AI6 小时前
Claude Opus 4.6 凌晨发布,我体验了一整晚,说说真实感受。
后端
易安说AI6 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
易安说AI6 小时前
用 Claude Code 远程分析生产日志,追踪 Claude Max 账户被封原因
后端
颜酱7 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
掘金者阿豪11 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
ServBay11 小时前
一个下午,一台电脑,终结你 90% 的 Symfony 重复劳动
后端·php·symfony
sino爱学习11 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端