Jenkins agent

以下内容针对的是jenkins pipeline中的agent
Jenkins 工作模式是master/slave模式,slave端可以是多平台多环境的
windows,linux,k8s集群pod都可以
Jenkins 工作的时候一定要指定agent
本地node 作为agent
本地node节点常见的是windows,linux/开发板之类的
调用的时候需要知道本地node 的名字或者label
以下范例(仅供参考,node请自行配置可以参考Jenkins 配置本地slave 节点 )
name:demo_linux
label: demo_node
程序在运行的时候就会调度到这个demo_node这个标签对应的node节点上面
如果这个label下面有多个node,那么job会根据node的繁忙程度来自由调度

pipeline {
    agent {label 'demo_node'}

    stages {
         stage('prepare') {
            steps {
                echo 'Preparing..'
            }
        }
    }
}

如果不用label,直接用node name 也可以调度,写法一摸一样的,就是将label对应的值配置成node name

pipeline {
    agent {label 'demo_linux'}

    stages {
         stage('prepare') {
            steps {
                echo 'Preparing..'
            }
        }
    }
}

k8s集群的pod作为agent
Jenkins 通过插件和k8s集群关联,可以通过声明pod的模板,在k8s集群中创建pod
以此pod作为jenkins 的slave
当前的CI集群配置的策略是 job运行的时候会启动一个pod,等job运行结束会销毁这个pod
同一个pod中 共享网络和WORKSPACE
WORKSPACE是jenkins slave的工作空间
配置参考

/*
以下内容是给这个job配置一个pod作为slave
*/

pipeline {
    agent {
        kubernetes {
            /*
            label 是给这个pod设置一个名字标签,这里配置的是随机数
            防止和已有的pod标签冲突
            */
            label "${UUID.randomUUID().toString()}"
            /*
            以下内容是pod 模板
            metadata 里面是这个pod的基础配置数据
            labels 就是pod的标签
            class 就是这个pod是一个声明试的客户端
            namespace 是这个pod在k8s集群中哪个命名空间下运行的,非常重要
            nodeSelector node选择器,k8s在调度pod的时候会根据这个节点选择器
            来选择物理机器调度,这个是k8s集群配置的标签,用来区分CI节点和非CI节点
            name 是设置docker 名字,设个名字是有规则的,不是随便命名的
            建议小写不带特殊字符:prepare,build,build-ubuntu,test-123
            image 是docker 对应的镜像,需要自行提供,或者使用已有的镜像
            volumes 是给这个pod创建外部的挂在资源,
            常用在缓存目录挂载,文件挂载,认证挂载等
            volumeMounts 是将pod的挂载资源挂载到对应的docker内部,
            docker才可以访问这个资源
            其他参数都是常规配置
            */
            yaml """
                metadata:
                  labels:
                    some-label: some-label-value
                    class: KubernetesDeclarativeAgentTest
                  namespace: scm
                spec:
                  nodeSelector:
                    jenkins-ci: "true"
                  containers:
                    - name: prepare
                      image: hub.hobot.cc/builder/cicd-common-tool:v10
                      command:
                      - cat
                      tty: true
                    - name: gallery
                      image: hub.hobot.cc/ci/gallery-cli:0.1.9
                      command:
                      - cat
                      tty: true
                      volumeMounts: 
                        - name: gallery-upload-secret 
                          mountPath: /var/run/gallery
                  volumes:
                    - name: gallery-upload-secret
                      secret:
                        defaultMode: 420
                        secretName: gallery-upload-secret
            """
        }
    }
    stages{
        stage('prepare') {
            steps {
                /*
                container 关键字,用来指定在对应的docker内执行对应的命令
                */
                container('prepare') {
                    echo 'Preparing..'
                    sh 'touch file'
                }
            }
        }
        stage('gallery') {
            steps {
                /*
                上面prepare container  创建了一个文件
                在这个gallery 的container 中可以读取到这个文件
                jenkins WORKSPACE这个变量目录 在pod内部是都能访问的
                */
                container('gallery') {
                    echo 'uploading..'
                    sh 'cat file'
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值