基于jenkins+k8s实现devops

news2024/10/6 8:27:56

1、背景

由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程,亲测无坑

2、部署

1、创建ns
kubectl create namespace devops

2、kubectl apply -f jenkins.yml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: devops
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
rules:
  - apiGroups: ["extensions", "apps"]
    resources: ["deployments", "ingresses"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
  - apiGroups: [""]
    resources: ["pods/log", "events"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins
  namespace: devops
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: devops
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: devops
spec:
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins
      initContainers:
        - name: fix-permissions
          image: busybox:1.35.0
          command: ["sh", "-c", "chown -R 1000:1000 /var/jenkins_home"]
          securityContext:
            privileged: true
          volumeMounts:
            - name: jenkinshome
              mountPath: /var/jenkins_home
      containers:
        - name: jenkins
          image: jenkins/jenkins:2.414.1-lts-jdk11
          imagePullPolicy: IfNotPresent
          env:
            - name: JAVA_OPTS
              value: -Dhudson.model.DownloadService.noSignatureCheck=true
          ports:
            - containerPort: 8080
              name: web
              protocol: TCP
            - containerPort: 50000
              name: agent
              protocol: TCP
          readinessProbe:
            httpGet:
              path: /login
              port: 8080
            initialDelaySeconds: 60
            timeoutSeconds: 5
            failureThreshold: 12
          volumeMounts:
            - name: jenkinshome
              mountPath: /var/jenkins_home
            - name: localtime
              mountPath: /etc/localtime  
      volumes:
        - name: jenkinshome
          hostPath:
            path: /opt/jenkins/jenkins_data
        - name: localtime
          hostPath:
            path: /etc/localtime
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: devops
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  ports:
    - name: web
      port: 8080
      targetPort: web
    - name: agent
      port: 50000
      targetPort: agent
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins
  namespace: devops
spec:
  ingressClassName: nginx
  rules:
    - host: jenkins.k8s.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: jenkins
                port:
                  name: web


注意:镜像建议使用最新版本,因为jenkin平台默认提供了最新的插件,且无法选择版本,所以如果jenkins版本过低会导致插件不兼容问题

3、本地电脑配置host解析后,就可以用域名访问

4、查看pod日志获取初始化密码,也可以查看/opt/jenkins/jenkins_data/secrets/initialAdminPassword

5、安装必要插件
中文插件: Localization: Chinese
pipeline插件:Pipeline
k8s插件: Kubernetes
代码库管理插件:Git

6、配置k8s连接信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

填写 以下内容 ,然后点击测试。
k8s地址 :https://kubernetes.default.svc.cluster.local
命名空间:devops
jenkins地址:http://jenkins.devops.svc.cluster.local:8080

由于之前部署的时候已经给jenkins用户访问k8s 的devops命名空间的权限,所以这里不需要配置kubeconfig认证也可直接访问

3、编写一条pipeline

这里用一个java项目的ci过程作为案例

def createVersion() {
    // 定义一个版本号作为当次构建的版本,输出结果 20191210175842_69
    return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}

pipeline{
    agent{
        kubernetes{
          defaultContainer 'maven'
          yaml '''
apiVersion: v1
kind: Pod
spec:
  containers:
    - name: maven
      image: maven:3.8.1-jdk-8
      command: ["sleep"]
      args: ["99d"]
    - name: docker
      image: docker
      command: ["sleep"]
      args: ["99d"]
      volumeMounts:
        - mountPath: /var/run/docker.sock
          name: docker-socket
  volumes:
    - name: docker-socket
      hostPath:
        path: /var/run/docker.sock
'''
        }
    }
    environment {
        tag = createVersion()
    }
    stages{
        stage("pull code"){
          steps{
            script{
              git 'https://gitee.com/uuei/java-devops-demo.git'
            }
          }
        }
        stage("mvn"){
          steps{
            script{
              sh 'mvn clean package'
            }
            container('docker') {
              script {
              sh 'docker build -t java-demo:${tag} .'
            }
        }
          }
        }
    }
}

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

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

相关文章

用于图像分类的预训练模型(PyTorch实现)

用于图像分类的预训练模型(PyTorch实现) 在本文中,我们将介绍一些使用 TorchVision 模块中存在的预训练网络的实践示例——用于图像分类的预训练模型。 1. 基于预训练模型进行图像分类 预训练模型是在 ImageNet 等大型基准数据集上训练的神…

力扣刷题-链表-移除链表元素

203.移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:head [], val 1 输出:[] 示例 3: 输…

arduino u8g2 表情字库制作

U8G2 下载原代码 : GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2 1.制作图片 使用FLASH 或任何可以画图的软件制作动态图片PNG格式 大小最好先设定好如40x80 ,最好不要太大 128X64,60X60 将制作好的图片放入 下载好的 u8g2-master…

【每日一题】1539. 第 k 个缺失的正整数

1539. 第 k 个缺失的正整数 - 力扣(LeetCode) 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1: 输入:arr [2,3,4,7,11], k 5 输出:9 解释:缺失…

国科大体系结构习题 | 第二章 计算机系统结构基础

第二章 习题汇总 Q1. 在3台不同指令系统的计算机上运行同一程序P时,A机需要执行 1.0 1 0 8 1.010^8 1.0108条指令,B机需要执行 2.0 1 0 8 2.0 10^8 2.0108条指令,C机需要执行 4.0 1 0 8 4.010^8 4.0108条指令,但实际执行时间…

Linux 操作技巧

目录 一、shell-命令解释器 二、Linux中的特殊符号 三、命令历史--history 一、shell-命令解释器 shell——壳,命令解释器,负责解析用户输入的命令 ——内置命令(shell内置) ——外置命令,在文件系统的某个目录下&…

Redis Insight 版本 2.32 翻译中文

使用教程 链接:https://pan.baidu.com/s/11pWBZ3uQSRZbuMS8POkLCw?pwd2ke5 一、下载renderer.js 1.打开安装好的软件 2、在这里添加我们指定的文件夹,这个文件夹是你随便创建的,你可以指定任何目录 3.选择renderer.js右键保存覆盖 4.在r…

Flask数据库之SQLAlchemy--介绍--链接数据库

目录 SQLAlchemy介绍 SQLAlchemy连接数据库 SQLAlchemy介绍 数据库是一个网站的基础!!! 比如MySQL、MongoDB、SQLite、PostgreSQL等,这里我们以MySQL为例进行讲解。 SQLAlchemy是一个ORM框架 对象关系映射(英语&…

chrome浏览器 调试鼠标悬停后出现的元素样式

鼠标悬停后出现的样式,我们遇见的有两种情况,一种是用css设置的hover时的样式,第二种就像el-tooltip组件,鼠标悬停时出现提示文字的样式。 一、css设置的hover时的样式 1、按【F12】键(或右键点击【检查】&#xff09…

星闪空口技术初探

星闪技术设计目标 在星闪技术的应用场景中,最低的时延要求达到了20us量级,比如智能座舱的主动降噪。最高的可靠性要求达到了99.9999%,比如智能制造的传感器与执行器的消息收发。除了低时延和高可靠之外,高精度同步、多并发和信息…

Linux工具——gdb

目录 一,gdb简介 二,gdb的指令 1.查看gdb是否有下载 2.需要明确的知识点 3.调试指令 1.打开调试代码 2.以某行为起点显示代码 3.打断点,查看断点,删除断点,禁用断点,启用断点 4.逐过程,逐…

灵活运用OSI模型提升排错能力

1.OSI模型有什么实际价值? 2.二层和三层网络的区别和应用; 3.如何通过OSI模型提升组网排错能力? -- OSI - 开放式系统互联 - OSI参考模型 - 一个互联标准 -- 软件硬件 - 定义标准 数据通信的标准 -- 厂商 思科 华为 华三…

【Spring】Spring Security学习笔记

基本概念 概念定义认证判断一个用户身份是否合法的过程(登录过程)会话为了避免用户的每次操作都进行认证, 将用户的信息保存在会话中. 常见的会话有基于session的模式和基于token的模式授权校验用户是否有权限访问某个资源 认证是为了验证用户的身份; 授权是为了验证用户是否有…

生长刺激表达基因2蛋白(ST2)介绍

生长刺激表达基因2蛋白(Growth stimulation expressed gene 2,ST2),也称为T1,IL1RL1或Fit1,编码基因定位于染色体2q12位点上,约40kb。属于白细胞介素-1(interleukin-1,IL…

2023华为杯数学建模研赛E题全解析

2023华为杯数学建模研赛E题解析,完整版已出!!! 包含所有模型、代码、结果,39页技术文档,详细内容如下! 免费版链接已放在下面,需要的同学可以直接自取~ 【云顶数模】2023研究生数学建模免费链接: https://pan.baid…

Python爬虫教程:解析网页中的元素

前言: 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在我们理解了网页中标签是如何嵌套,以及网页的构成之后, 我们就是可以开始学习使用python中的第三方库BeautifulSoup筛…

194、SpringBoot -- 下载和安装 Erlang 、 RabbitMQ

本节要点: 一些命令: 小黑窗输入: rabbitmq-plugins enable rabbitmq_management 启动控制台插件 rabbitmq-server 启动rabbitMQ服务器 管理员启动小黑窗: rabbitmq-service install 添加rabbitMQ为本地服务 启动浏览器访问“h…

Goby 漏洞发布|Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434)

漏洞名称:Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434) English Name: Revive Adserver adxmlrpc.php Remote Code Execution Vulnerability (CVE-2019-5434) CVSS core: 9.0 影响资产数&a…

Go sync.Cond 原理

文章目录 前言newCondWaitSignalBroadcast和 channel 比较的优势 前言 sync.Cond 基本很少使用,应为大部分都能使用 channel 代替sync.Cond 通常是基于 sync.Mutex 扩展的主要就四个方法 newCond(l locker) 创建CondWait() 阻塞等待Signal() 唤醒其中一个Broadcast…

AI 编码助手 Codewhisperer 安装步骤和使用初体验

文章作者:为了自己加油 最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手 Amazon Code Whisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。Amazon Code Whisperer与 GitHub Copilot 类似,…