CICD Day6、基于kubernetes动态创建代理

  Jenkins支持基于kubernetes动态创建代理,使代理程序能够运行在Pod中,这种方法可以根据构建任务的变化动态的增减代理,充分利用kubernetes的特性,为分布式构建提供灵活的运行环境
  • 如下图所示
    image
    当项目触发构建时,Jenkins会调用kubernetes api创建一个专用的pod作为从节点,在该pod执行一系列构建任务。一旦完成构建流程,该pod就会自动销毁,实现资源的高效利用。具体使用步骤如下:

1、kubernetes插件配置

基于kubernetes动态创建代理功能由kubernetes插件提供,使用之前需要在Jenkins插件管理中安装它
安装完成后,添加kubernetes云:Manage Jenkins》Nodes and Clouds》Clouds》Add a new cloud》kubernetes,配置如下

  • kubernetes地址:指定kubernetes API地址和端口(通常是Master节点IP地址和6443端口),并使用https协议
  • 凭据:选择访问kubernetes APi的凭据。单机Add按钮添加凭据,选择Jenkins,填写以下字段
    • Kind:指定类型,这里选择 Secret file
    • File:选择文件。这里上传kubectl使用的kubeconfig认证文件。为了提高安全性,该kubeconfig认证文件仅需授予管理pod资源的权限
    • Description:凭据描述。这里输入Jenkins-agent-kubeconfig

单击Add按钮添加凭据,然后选择该凭据。可以单击右下方连接测试按钮验证访问kubernetes API是否成功
image

  • Jenkins地址:指定Jenkins访问地址,这里输入http://172.16.99.82:8080/。
    最后点击save保存配置

2、 创建Pipeline类型项目

Pipeline项目类型是由Pipeline插件提供,在使用之前,需要在插件管理中安装它
创建一个名为web-pipeline-demo的项目,并选择Pipeline项目类型,单击ok按钮进行创建并进入项目配置页面,在Pipeline部分定义script脚本,如下图所示
image

  • Pipeline 脚本内容如下
pipeline {
    agent {
        kubernetes {
            yaml '''
              apiVersion: v1
              kind: Pod
              metadata:
                labels:
                  app: jenkins-slave
              spec:
                containers:
                - name: jnlp
                  image: uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21
                  args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']

            '''
        }
    }
    stages {
        stage('Build') {
            steps {
                echo  'Build...'
            }
        }
        stage('Test') {
            steps {
                echo  'Test...'
            }
        }
        stage('Deploy') {
            steps {
                echo  'Deploy...'
            }
        }
    }
}

在上述脚本中,agent部分使用了kubernetes指令,表示基于kubernetes动态创建代理,其中yaml块用于定义pod资源配置,包含一个使用uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21镜像创建的容器,并通过参数和引用变量(JENKINS_SECRET和JENKINS_NAME)将连接Jenkins所需的认证秘钥和代理名称传递给代理程序。但这两个环境变量在Pod中并未被定义,实际上,Jenkins在将Pod配置发送到kubernetes API之前,会自动将以下环境变量添加到容器中

  • JENKINS_URL:Jenkins访问地址
  • JENKINS_SECRET:连接Jenkins的认证秘钥
  • JENKINS_NAME:代理名称
    接着,定义三个阶段,每个阶段中有一个步骤,输出一个字符串

3、验证与测试

执行一次构建以验证Jenkins Pipeline和基于kubernetes动态创建代理功能
项目触发构建后,Jenkins会调用kubernetes API创建一个代理Pod,如下所示
image

image

image

  • Pod名称由项目名称和构建编号等信息组成。一旦构建流程完成,该Pod就会自动销毁。同时,在项目中可以实时查看每个阶段的执行结果和耗时。阶段视图(该功能需要安装Pipeline: Stage View插件)如下图所示

image

posted @   Hello_worlds  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示