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

相关推荐
Oneslide15 分钟前
ubuntu 手动安装claude
后端
GetcharZp8 小时前
玩转 Linux 机器视觉:手把手带你搞定 Ubuntu 下海康工业相机 C++ SDK
后端
星星在线11 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒12 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x13 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
袋鱼不重14 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户83562907805114 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还14 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy8814 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
CaffeinePro15 小时前
FastAPI响应处理:返回值、状态码、响应头与异常标准化与案例解析
后端