Kubernetes配置Jenkins Slave

news2024/11/25 22:48:19

Kubernetes配置Jenkins Slave

部署在kubernetes集群内

1、部署jenkins

1.1、命名空间

apiVersion: v1
kind: Namespace
metadata:
  name: jenkinsci
  labels:
    app: jenkinsci

1.2、Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkinsci
  namespace: jenkinsci
  labels:
    app: jenkinsci
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkinsci
  template:
    metadata:
      labels:
        app: jenkinsci
    spec:
      # 增加污点容忍,可以在具有NoSchedule污点节点上部署
      tolerations:
        - key: node-role.kubernetes.io/master
          operator: Exists
          effect: NoSchedule
        - key: node-role.kubernetes.io/control-plane
          operator: Exists
          effect: NoSchedule
      # 选择具有jenkinsci标签的节点部署
      nodeSelector:
        node-role: jenkinsci
      containers:
        - name: jenkinsci
          # 镜像制作详情https://blog.csdn.net/gyfghh/article/details/130377218
          image: registry.cn-hangzhou.aliyuncs.com/ialso/jenkinsci:0.1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
              name: web
            - containerPort: 50000
              name: jnlp
          volumeMounts:
            - name: timezone
              mountPath: /etc/localtime
            - name: docker
              mountPath: /var/run/docker.sock
            - name: jenkinsci-data
              mountPath: /root/.jenkins
      volumes:
        # 时间处理
        - name: timezone
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
        # 使用宿主机docker
        - name: docker
          hostPath:
            path: /var/run/docker.sock
        # jenkins数据存放位置
        - name: jenkinsci-data
          hostPath:
            path: /root/.jenkins

1.3、service

apiVersion: v1
kind: Service
metadata:
  name: jenkinsci
  namespace: jenkinsci
spec:
  selector:
    app: jenkinsci
  ports:
    - name: web
      port: 80
      targetPort: 8080
    - name: jnlp
      port: 50000
      targetPort: 50000
  type: ClusterIP

1.4、配置外部访问

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-jenkinsci
  namespace: jenkinsci
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  # 转发规则
  rules:
    - host: jenkins.ialso.cn
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: jenkinsci
                port:
                  number: 80

1.5、数据文件

文件中已包含所有所需插件

链接:https://pan.baidu.com/s/1feLvKsWGK-wMu7Bi6rl_0w?pwd=atqe, 解压缩放入/root/.jenkins

账户:Jenkinsci 密码:xumeng2233.

1.6、配置jenkins localtion

Dashboard->Manage Jenkins->Configure System

需根据jenkinsci在kubernetes中访问url对jenkins进行配置

# http://{service-name}.{name-space}.svc.cluster.local
http://jenkinsci.jenkinsci.svc.cluster.local

1.7、自定义jenkins

如果不使用提供的数据文件,自定义jenkins需要安装下列插件

  • Credentials
  • Credentials Binding Plugin
  • Git
  • Gitee
  • Pipeline
  • Git Parameter
  • Email Extension Template
  • Build With Parameters
  • Kubernetes
  • Kubernetes CLI

然后可参照文章:https://blog.csdn.net/gyfghh/article/details/130377218, 对所需内容进行配置

2、密钥配置

2.1、Gitlab

Dashboard->Manage Jenkins->Credentials->System->Global credentials->Username with password

在这里插入图片描述

2.2、Harbor

Dashboard->Manage Jenkins->Credentials->System->Global credentials->Username with password

在这里插入图片描述

2.3、kubernetes

Dashboard->Manage Jenkins->Credentials->System->Global credentials-> Secret file

文件选择kubernetes集群中的~/.kube/config

在这里插入图片描述

3、配置Agent

Dashboard->Manage Jenkins->Configure Global Security->Agents

将模式修改为Fixed,端口为50000
在这里插入图片描述

4、配置kubernetes集群

Dashboard->Manage Jenkins->Manage Nodes and Clouds->Configure Clouds

选择上面步骤创建的kubernetes凭证,随后测试连接
在这里插入图片描述

5、镜像准备

接下来需要在jenkins slave里面进行项目打包、编译、镜像构建、集群中部署,因此需要两个中间镜像:docker、kubectl

5.1、idocker

alpine默认源没有docker,需要修改下/etc/apk/repositories

#/media/cdrom/apks
http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/main
http://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/community
#http://mirrors.tuna.tsinghua.edu.cn/alpine/edge/main
#http://mirrors.tuna.tsinghua.edu.cn/alpine/edge/community
#http://mirrors.tuna.tsinghua.edu.cn/alpine/edge/testing

idocker Dockerfile如下

# 如不想从头制作,可使用registry.cn-hangzhou.aliyuncs.com/ialso/idocker:latest
# Build: docker build --no-cache --force-rm -t idocker ./
# Run: docker run -d --name idocker -v /var/run/docker.sock:/var/run/docker.sock idocker
# Into: docker exec -it idocker /bin/sh
FROM alpine:3.17

COPY repositories /etc/apk/repositories

RUN apk update && \
    apk add docker-cli

ENTRYPOINT ["/bin/sh", "-c", "sleep 600"]

5.2、ikubectl

待补

6、配置slave

6.1、项目配置

需在项目中将Jenkinsfile配置为Pipeline script from SCM, 并配置相关信息

在这里插入图片描述

6.2、Jenkinsfile

此文件需放置在项目根目录

// Jenkinsfile
pipeline {
    // 配置代理
    agent {
        // kubernetes代理信息
        kubernetes {
            // 这里要填写Jenkins configureClouds中配置的kubernetes信息
            cloud 'kubernetes'
            label "jenkinsci"
            // 超时时间
            slaveConnectTimeout 1200
            // podTemplate
            yamlFile 'PodTemplate.yaml'
        }
    }
    stages {
        stage('拉取') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xumeng03/yanyang.git']])
                sh 'ls'
            }
        }
        stage('构建、推送') {
            steps {
                container(name: 'docker'){
                    sh """
                        docker images
                    """
                }
            }
        }
        stage('部署') {
            steps {
                sh 'echo deploy'
            }
        }
    }
}

6.3、podTemplate

此文件需放置在yamlFile能对应到的位置,这里是项目根目录

apiVersion: v1
kind: Pod
metadata:
  name: jenkinsci
  namespace: devops
spec:
  containers:
    - name: jnlp
      image: jenkins/jnlp-slave:4.9-1-jdk11
      imagePullPolicy: IfNotPresent
      volumeMounts:
        - name: timezone
          mountPath: /etc/localtime
    - name: docker
      image: registry.cn-hangzhou.aliyuncs.com/ialso/idocker:latest
      imagePullPolicy: IfNotPresent
      command:
        - "cat"
      tty: true
      volumeMounts:
        - name: timezone
          mountPath: /etc/localtime
        - name: docker
          mountPath: /var/run/docker.sock
  volumes:
    - name: timezone
      hostPath:
        path: /usr/share/zoneinfo/Asia/Shanghai
    - name: docker
      hostPath:
        path: /var/run/docker.sock

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-系统架构师-案例分析考前背诵-上篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

〖数据结构〗一棵有点自律的树——搜索二叉树

文章目录 💐专栏导读💐文章导读🌷搜索二叉树概念🌷二叉搜索树的构建🌺查找操作🌺插入操作🌺删除操作🌺遍历操作☘️测试 🏵️拓展——递归实现🍃递归查找&…

MATLAB与物联网:如何应用MATLAB进行物联网数据的处理和分析

第一章:引言 物联网(Internet of Things, IoT)作为当今科技领域的热门话题,正在改变我们的生活方式和工作方式。随着物联网设备的普及和数据的不断增长,如何高效地处理和分析物联网数据成为了一个重要的挑战。MATLAB作…

【C语言之操作符1】

C语言之操作符1 1. 操作符分类2. 算术操作符3. 移位操作符3.1 左移操作符3.2 右移操作符 4. 位操作符5. 赋值操作符 1. 操作符分类 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术…

【哈佛积极心理学笔记】第14讲 过犹不及

第14讲 过犹不及 Recap: Stress is not the problem. The problem is lack of revovery. level of stress -> chronic stress -> chronic anxiety -> depression Recovery on different level: micro level 15 min break, lunch timemezzo level, full night slee…

1.Apollo开发部署-linux

一.官方文档 https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 二.环境准备 1.MySql 5.6.51.单独服务器192.168.2.13 https://downloads.mysql.com/archives/installer/ 2.JDK 1.8.X https://www.oracle.com/java/technologies/downloads/ 三.Apollo部署…

【JVM篇】垃圾回收算法

目录 1、前言 2、标记-清除算法 3、标记-整理算法 4、标记-复制算法 5、总结 1、前言 说起垃圾回收(Garbage Collection)(本文简称GC)。相信同时对C和Java有了解的小伙伴都知道,C在new完对象后,是需要…

【Linux】发展史浅谈

为什么要学Linux? LInux和微软的Windows在定位上都是一样的,即操作系统。而且LInux是一款雄霸服务端的操作系统,是在企业端被高频使用的后台操作系统。 科技发展的基本模式 所有的技术进步,本质都是为了促进更好的工具的发明&a…

【Python ORM】零基础也能轻松掌握的学习路线与参考资料

Python orm(Object-Relational Mapping)是一种模式,它将对象和关系型数据库之间的映射相互转换,使得应用程序可以通过面向对象的方式来操作数据库。Python orm 在开发大型 Web 应用程序中特别有用,使得与数据库的交互变…

【IMX6ULL驱动开发学习】08.IMX6ULL通过GPIO子系统函数点亮LED

通过GPIO子系统函数点亮LED 1、GPIO子系统函数 1.1 确定 led 的GPIO标号,查看内核中的gpiochip 查看 gpiochip ,以正点原子的IMX6ULL阿尔法开发板为例 [root100ask:/sys/class/gpio]# cat /sys/kernel/debug/gpio 查看原理图,发现led接的引…

Linux虚拟网络设备---之使用Veth pair连接linux网桥bridge

本文目录 1、我们可以用以下命令来创建veth pair: veth0----veth12、创建五个命名空间namespaces后,可以用以下命令将veth设备对的一端移入namespaces命名空间,并开启veth2、将veth设备对的另外一端连接到linux网桥,并将所有namespaces命名空…

【Redis应用】UV统计(四)

🚗Redis应用学习第四站~ 🚩本文已收录至专栏:Redis技术学习 一.引入 首先我们要搞懂两个概念: UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个…

【动态规划】斐波那契数列模型

冻龟算法系列之斐波那契数列模型 文章目录 【动态规划】斐波那契数列模型1. 第N个泰波那契数1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 编写代码1.4 空间优化 2. 三步问题2.1 题目解析2.2 算法原理2.2.1 状态表示2…

解决Centos安装时找不到磁盘:未选择任何磁盘(no diks selected),本地标准磁盘为空

文章目录 问题描述问题原因解决办法 问题描述 笔者最近又买了一台新电脑,并打算在上面安装 Linux 来充当一个新的服务器结点。但很不幸的是,每次笔者略微尝试新事物时,都要踩很多坑。笔者在使用 U 盘刻录 CentOS 8 镜像之后,准备在…

公平锁/非公平锁/可重入锁/自旋锁

在JAVA中我们知道有很多加锁的方式,比如常见的 通过synchronized关键字,还有Lock,还有之前说原子CAS操作时有看到过的死循环方式的自旋锁。 借此来说一下锁的分类: 公平锁: 是指多个线程按照申请的顺序来获取锁,每次获取锁时会…

dp算法篇Day1

"多希望有人来陪我,度过末日啊~" 讲讲我为什么突然想更新这篇栏目。 想想自己也算 "系统" 接触计算机这个学科也有差不多一年了,回想起当初下定决心要全身心投入到这个专业或者说行业中来,现在到了这样的地步&#xff0c…

CSS基础学习--10 margin(外边距)

一、定义: CSS margin(外边距)属性定义元素周围的空间。 二、margin margin 清除周围的(外边框)元素区域。margin 没有背景颜色,是完全透明的。 margin 可以单独改变元素的上,下,左,右边距&a…

今天面了个35k字节跳动出来,真是砂纸擦屁股,给我露了一手...

​2023年春招已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之石…

AI 绘画(0):导论

文章目录 导论感谢人员Ai绘画前期准备软件环境硬件条件 Ai绘画介绍Ai绘画简单流程介绍Ai绘画软件介绍参数输入介绍 Ai绘画公约 导论 Ai绘画是最近比较热门的绘画方式,以干掉原画师为口号,引起了激烈的讨论。Ai绘画能否取代人工我们先不谈,但…

一个专科生的 Python 转行之路

自学之路 正式开始学编程是在十月底的样子, 那时候在知乎 flask 话题下看到一个问题 「有多少人按萧井陌大神给出的PythonFlask路线找到工作了?」。就觉得自己也可以啊, 就开始辞职自学 Python,。 刚开始的那一个月确实能够做到每天 10 个小时写代码, 学了大概一个…