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

相关推荐
Clarence Liu11 小时前
Golang slice 深度原理与面试指南
开发语言·后端·golang
德育处主任11 小时前
在亚马逊云上解决RDS、MariaDB 与 Aurora MySQL复制延迟实战指南
后端·mysql
码界奇点11 小时前
基于Golang与Vue3的全栈博客系统设计与实现
开发语言·后端·golang·车载系统·毕业设计·源代码管理
掘金考拉11 小时前
从原理到实战:JWT认证深度剖析与架构思考(三)——双Token架构的权衡
后端
howcode11 小时前
年度总结——Git提交量戳破了我的副业窘境
前端·后端·程序员
素雪风华11 小时前
只使用Docker+Maven实现全自动化流程部署服务;Docker创建ffmpeg环境;
java·运维·后端·docker·容器·自动化·maven
白宇横流学长12 小时前
基于SpringBoot实现的大创管理系统
java·spring boot·后端
武子康12 小时前
大数据-187 Logstash Filter 插件实战:grok 解析控制台与 Nginx 日志(7.3.0 配置可复用)
大数据·后端·logstash
不爱学英文的码字机器12 小时前
【征文计划】Rokid AR眼镜在工业维修领域的应用实践:智能装配指导系统开发全流程
后端·ar·restful
胡玉洋12 小时前
Spring Boot 项目配置文件密码加密解决方案 —— Jasypt 实战指南
java·spring boot·后端·安全·加密·配置文件·jasypt