在jenkins中配置k8s动态节点

  • jenkins动态资源好处在于,用到时直接启动所需pod工作完下班完事
  • 方便快捷,分工明确,备份打包到新的环境也便捷
  • jenkins在k8s上配置动态节点,需要用到1个或多个,
    • jnlp容器,这个容器用于连接jenkins
    • 其他容器,用于直接流水线其他相应动作
  • 简单易懂,直接上手

安装插件请添加图片描述

添加凭据提供者配置

请添加图片描述

配置凭证

生成 cert.pfx 证书

cat /root/.kube/config
# 找到certificate-authority-data: 把这个内容复制出来......LS0tLS.....1PUZJQ0FURS0t.....LS0tCg==
echo ....... | base64 -d  > ca.crt


# 找到client-certificate-data: 把这个内容复制出来......................
echo ....... | base64 -d  > client.crt


# 找到client-key-data: 把这个内容复制出来......................
echo ....... | base64 -d  > client.key


# 然后生成pfx文件
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
Enter Export Password: 123456                        # 记住这个密码,要配置到jenkins里去的
Verifying - Enter Export Password: 123456

配置jenkins凭证

请添加图片描述
请添加图片描述
请添加图片描述

  • 大概就是这样子,因为我已经创建过了所以请忽略红色字体

请添加图片描述

配置Clouds

  • 可以理解为连接k8s做出相应动作
  • 我的jenkins是2.4.x版本,直接进入系统管理就找到了
    请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述

配置pod模板

  • 这里配置pod模板,我常用的有两种,
    • 第一种是在jenkins-web端配置
    • 第二种是在流水线脚本中配置
  • 个人比较喜欢在代码中配置,迁移和管理都比较方便
  • 先说说第一种

在jenkins管理页面配置pod模板(pod Template)

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

  • 然后其他都默认就好

  • 使用pipeline测试

pipeline { 
  agent { 
    kubernetes {
      inheritFrom 'Test-maven'
    }
  }   
   			 
  stages {
    stage('Test-maven....') {
      steps {       
        container('maven'){
          sh 'mvn -v'
        }
      }
    }   
  }
}

初识jenkins共享库

  • 共享库(Shared Library)
  • 开发人员可以将常用的构建逻辑封装为可复用的代码库,并在多个Jenkinsfile中引用。
  • Jenkins Shared Library 通常都是通过Git或其他版本控制进行管理
  • 简单易懂,开始实验测试,冲~~~

配置Library运行环境

请添加图片描述

请添加图片描述

请添加图片描述

  • 配置完保存即可
  • 然后就可以测试使用啦~~~

Test jenkins shared library

  • 结合jenkins共享库封装jenkins动态节点的资源清单

  • 用到什么容器就拉起对应pod构建自己想要的流程

  • git的目录结果大概这样

├── jenkinsfile
│   ├── Test-jenkinslib.jenkinsfile
│   └── Test-xxxxxxx1.jenkinsfile
│   └── Test-xxxxxxx2.jenkinsfile
├── src                                  # 共享库存放目录
│   ├── org
│   │   ├── devops
│   │   │   └── xxxx1.groovy
│   │   │   └── xxxx2.groovy
│   │   │   └── KubeTools.groovy
├── vars                                 # 变量,后面用到再解释
│   ├── README.md
└── README.md

将pod模板配置成共享库

  • 这里简单使用kubectl容器测试

  • 这里再次声明~~~

    不管你启动多少个容器,你要使用jenkins动态节点,那么必须是要有jnlp这个容器的

    如果你不指定启动,那么我们jenkins会帮你起来,你只需要保证我们可以正常拉取到这个镜像就可以了

    如果拉取不到只能自己想办法去拉取:jenkins/inbound-agent:4.13-1-jdk8镜像了

src/org/devops/KubeTools.groovy

package org.devops
  
import groovy.json.JsonSlurper  
  
class KubeTools {  
    def getPodYaml() {  
        return '''
apiVersion: v1
kind: Pod
metadata:
  app: Test-Rocketmq
spec:
  imagePullSecrets:
  - name: ctr-secret
  containers:
  - name: kubectl
    image: 'godocker.com/devops/kubectl:v1'
    imagePullPolicy: IfNotPresent
'''
    }  
}

引用共享库的pod模板

@Library('jenkinslib') _  就是刚刚在jenkins的系统配置-->Library里配置的

jenkinsfile/Test-kubectl-PodTemplate.jenkinsfile

@Library('jenkinslib') _  

def kubeTools = new org.devops.KubeTools()

pipeline {  
    agent none  
  
    stages {  
        stage('Deploy to Kubernetes') {  
            agent {  
                kubernetes {  
                    label 'my-k8s-agent'  
                    yaml kubeTools.getPodYaml()
                }  
            }  
            steps {
                echo "Hello Slave Pod on Kubernetes!"
                sh "ls /usr/local/bin/kubectl && ls /root/.kube/config"
                sh "whereis kubectl"
                sh "kubectl get pod -n devops"
                sh "sleep 300"
            }  
        }  
    }  
}

在jenkins中构建流水线项目

请添加图片描述
请添加图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐