搭建jenkins集群,水平扩展增加负载能力。随着Job数量增多,单实例Jenkins会出现构建队列过长的情况。为了能够容纳更多的团队同时使用,考虑使用kubernetes插件

这种方式在kubernetes动态创建pod来作为jenkins从节点(jenkins agent),因此Job是在从节点执行的,主节点只做任务分发,承担控制器的角色。本文将记录如何将这个插件落地。

kubernetes环境部署jenkins控制器

参考:https://www.jenkins.io/doc/book/installing/kubernetes/#install-jenkins-with-yaml-files

创建一个PVC,使用你喜欢的StorageClass。我这里使用的是NFS Storage Class。如何创建NFS Storage Class,参考这个开源项目:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git

如下所示,使用之前创建的PVC,部署一个jenkins实例,并在http://${K8S_MASTER_NODE_IP}:30084端口,访问jenkins UI界面。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec: 
      hostAliases:
      - ip: "192.168.10.8"
        hostnames:
        - "gitlab.example.com"
      containers:
      - name: jenkins
        image: registry.example.com/cicd/jenkins:v1
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-home
        persistentVolumeClaim:
          claimName: jenkins-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 30084
  selector:
    app: jenkins

配置jenkins 从节点的创建模板

不出意外的话,肯定要自定义jenkins agent的创建模板。

jenkins会自动在Pod中创建两个容器,agent容器和jnlp容器(用于和jenkins主节点通信)。

1. 打开系统管理-> 节点管理 -> Configure Clouds

在这里插入图片描述

2. 选择Add a new Cloud

平局

3. 配置jenkins地址及jenkins agent pod 的k8s标签。

在这里插入图片描述

4. 配置自定义镜像及agent标签等信息

这一步就需要慢慢根据pod template生成的yaml调整了,构建需要什么,往镜像里打什么

在这里插入图片描述
一些凭据(docker私库登录密码),maven缓存,都可以创建PVC挂载到这个容器里。

比如maven缓存:
在这里插入图片描述
容器进行docker镜像构建,需要挂载:

在这里插入图片描述
其他的凭据,npm缓存挂载都类似。

测试

创建一个流水线Job, 将下面内容粘贴进去。

pipeline {
   agent {
    node {
      label 'jenkins-agent'
    }
  }


    stages {
        stage('Test') {
            steps {
             container('jdk') {  // 对应pod template中配置的容器名称,表示在此容器里执行命令
                // 打进jdk镜像里的工具都可以在这里测试
				sh 'docker ps'
				sh 'mvn -v' 
				sh 'git version'
             }
     }
}

执行Job, 可以发现一个Pod已经被创建出来执行构建任务
在这里插入图片描述
同时在控制台日志里也可以看到Pod Template的YAML定义

在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐