基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

2024-06-03 01:44

本文主要是介绍基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 实验环境 

1.1 k8s环境

1)Kubernetes 集群版本是 1.20.6

2)k8s控制节点:

IP:192.168.140.130

主机名:k8s-master 

配置:4C6G

3)k8s工作节点

节点1:

IP:192.168.140.131

主机名:k8s-node1 

配置:4C7.5G

节点2:

IP:192.168.140.132

主机名:k8s-node2

配置:4C11G

1.2  GitLab 环境

地址:http://192.168.140.132:8001/

代码仓库地址: http://192.168.140.132:8001/root/jenkins-sample.git

代码下载链接:https://pan.baidu.com/s/1xbW-zUf23tu0YSV-5c1dew?pwd=lmzf 
提取码:lmzf

GitLab安装过程参考:Yum一键安装GitLab_yum gitlab-CSDN博客

1.3 Harbor环境

IP:192.168.140.132

1.4  Jenkins环境

版本:Jenkins 2.394

对应的jnlp软件下载地址如下:

链接:https://pan.baidu.com/s/1bNYiZCHWT099eOEdhDmJ3Q?pwd=lmzf 
提取码:lmzf

备注:docker  load   -i   jenkins-slave-latest.tar.gz 镜像即为jenkins-slave-latest:v1

2. 安装环境

2.1 安装 nfs 服务

1)三个节点分别安装nfs服务,k8s-master作为服务端

[root@k8s-master ~]#  yum  -y  install nfs-utils 

[root@k8s-master ~]#  systemctl enable  nfs  --now

[root@k8s-node1 ~]#  yum  -y  install nfs-utils 

[root@k8s-node1 ~]#  systemctl enable  nfs  --now

[root@k8s-node2 ~]# yum  -y  install nfs-utils 

[root@k8s-node2 ~]#  systemctl enable  nfs  --now

2)k8s-master上创建共享目录

[root@k8s-master ~]#  mkdir /data/v2 -p
[root@k8s-master ~]#  vim /etc/export

/data/v2 192.168.140.0/24(rw,no_root_squash)

[root@k8s-master ~]#   exportfs -arv
[root@k8s-master ~]#   systemctl restart nfs

2.2 在 kubernetes 中部署 jenkins

1)创建名称空间

[root@k8s-master ~]#   kubectl create namespace jenkins-k8s

2)创建 pv

[root@k8s-master ~]#   kubectl apply -f pv.yaml

# pv.yaml文件
apiVersion: v1
kind: PersistentVolume
metadata:name: jenkins-k8s-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManynfs:server: 192.168.140.130path: /data/v2

3)创建pvc

[root@k8s-master ~]#   kubectl apply -f pvc.yaml

# pvc.yaml文件
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: jenkins-k8s-pvcnamespace: jenkins-k8s
spec:resources:requests:storage: 10GiaccessModes:- ReadWriteMany

4)查看 pvc 是否创建成功

[root@k8s-master ~]#  kubectl get pvc -n jenkins-k8

[root@k8s-master ~]# kubectl get pvc -n jenkins-k8s
NAME              STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jenkins-k8s-pvc   Bound    jenkins-k8s-pv   10Gi       RWX                           8h

5)创建一个 sa 账号

[root@k8s-master ~]#  kubectl create sa jenkins-k8s-sa -n jenkins-k8s

6)把上面的 sa 账号做 rbac 授权

[root@k8s-master ~]#  kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

7)Jenkins文件夹授权

[root@k8s-master ~]# chown -R 1000.1000 /data/v2

8)deployment 部署 jenkins

[root@k8s-master ~]# kubectl apply -f jenkins-deployment.yaml 
# jenkins-deployment.yaml文件 
kind: Deployment
apiVersion: apps/v1
metadata:name: jenkinsnamespace: jenkins-k8s
spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:serviceAccount: jenkins-k8s-sacontainers:- name: jenkinsimage:  jenkins/jenkins:2.394imagePullPolicy: IfNotPresentports:- containerPort: 8080name: webprotocol: TCP- containerPort: 50000name: agentprotocol: TCPresources:limits:cpu: 1000mmemory: 1Girequests:cpu: 500mmemory: 512MilivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12volumeMounts:- name: jenkins-volumesubPath: jenkins-homemountPath: /var/jenkins_homevolumes:- name: jenkins-volumepersistentVolumeClaim:claimName: jenkins-k8s-pvcnodeName: k8s-node1

备注:

a. image:  jenkins/jenkins:2.394 通过在k8s-node1节点直接下载获取

[root@k8s-node1 ~]# docker   pull   jenkins/jenkins:2.394

 b. nodeName: k8s-node1: 本文指定部署在node1j节点

9)查看 jenkins 是否创建成功,如下所示表明创建成功

[root@k8s-master ~]#  kubectl get pods -n jenkins-k8s
NAME                       READY   STATUS    RESTARTS   AGE
jenkins-5558b49ff5-dqhz5   1/1     Running   2          9h

10)把 jenkins 前端加上 service,提供外部网络访问

[root@k8s-master ~]#  kubectl apply -f jenkins-service.yaml
# jenkins-service.yaml文件
apiVersion: v1
kind: Service
metadata:name: jenkins-servicenamespace: jenkins-k8slabels:app: jenkins
spec:selector:app: jenkinstype: NodePortports:- name: webport: 8080targetPort: webnodePort: 30002- name: agentport: 50000targetPort: agent

2.3 配置 Jenkins

1)浏览器访问Jenkins页面:http://192.168.140.132:30002/

2)获取管理员密码

[root@k8s-master ~]#  cat  /data/v2/jenkins-home/secrets/initialAdminPassword

 把上面获取到的密码拷贝到上面管理员密码下的方框里

点击继续,出现如下界面

3)安装推荐的插件

插件安装好之后显示需要创建用户

4)创建管理员用户

点击保存并完成,出现如下界面

点击保存并完成,出现如下界面

2.4 测试Jenkins的CICD

1)在 Jenkins 中安装 kubernetes 和blueocean插件

Manage Jnekins------>插件管理------>可选插件------>搜索 kubernetes------>出现如下
 

选中 kubernetes 之后------>点击下面的直接安装------>安装之后选择重新启动 jenkins--->
http://192.168.40.180:30002/restart-->重启之后登陆 jenkins,插件即可生效
备注:blueocean插件安装流程和安装kubernetes插件一致

2)配置 jenkins 连接到我们存在的 k8s 集群

访问地址 http://192.168.140.130:30002/configureClouds/,新增一个云,在下拉菜单中选择 kubernets 并添加

3)填写kubenetes信息

kubenetes地址:https://192.168.140.130:6443

4)测试 jenkins 和 k8s 是否可以通信

点击连接测试,如果显示 Connection test successful 或者Connected to Kubernetes v1.20.6,说明测试成功, Jenkins 可以和 k8s 进行通信。

 Jenkins地址:http://jenkins-service.jenkins-k8s.svc.cluster.local:8080

配置 k8s 集群的时候 jenkins 地址需要写上面域名的形式,配置之后执行如下:应用------>保存

5)配置pod template

访问地址 http://192.168.140.130:30002/configureClouds/,

 按照如下配置:

6)在上面的 pod template 下添加容器

添加容器------>Container Template------>按如下配置

备注:Docker镜像jenkins-slave-latest:v1为 docker  load   -i   jenkins-slave-latest.tar.gz获取,jenkins-slave-latest.tar.gz需要上传到工作节点。

7)在每一个 pod template 右下脚都有一个高级,点击高级,出现如下

 在 Service Account 处输入 jenkins-k8s-sa,这个 sa 就是我们最开始安装 jenkins 时的 sa

8)给上面的 pod template 添加卷

添加卷------>选择 Host Path Volume

/var/run/docker.sock
/var/run/docker.sock
/root/.kube
/home/jenkins/.kube

上述配置好之后, Apply(应用)------>Save(保存)
 

9)添加docker harbor凭证

首页------>系统管理→Manage Credentials(管理凭据) 

用户名:admin

密码:Harbor12345

ID:dockerharbor

2.5  Jenkins 部署应用发布到 k8s 开发环境、测试环境

1)在 k8s-master 的控制节点创建名称空间:

[root@ks-master ~]# kubectl create ns devlopment
[root@ks-master ~]# kubectl create ns qatest
[root@ks-master ~]# kubectl create ns production

 2) jenkins创建任务

pipeline文件

node('lmzf') {stage('Clone') {echo "1.Clone Stage"git url: "http://192.168.140.132:8001/root/jenkins-sample.git"script {build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()}}stage('Test') {echo "2.Test Stage"}stage('Build') {echo "3.Build Docker Image Stage"sh "docker build -t 192.168.140.132/jenkins-demo/jenkins-demo:${build_tag} ."}stage('Push') {echo "4.Push Docker Image Stage"withCredentials([usernamePassword(credentialsId: 'dockerharbor', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {sh "docker login 192.168.140.132 -u ${dockerHubUser} -p ${dockerHubPassword}"sh "docker push 192.168.140.132/jenkins-demo/jenkins-demo:${build_tag}"}}stage('Deploy to dev') {echo "5. Deploy DEV"sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-dev-harbor.yaml"sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-dev-harbor.yaml"
//        sh "bash running-devlopment.sh"sh "kubectl apply -f k8s-dev-harbor.yaml  --validate=false"}	stage('Promote to qa') {	def userInput = input(id: 'userInput',message: 'Promote to qa?',parameters: [[$class: 'ChoiceParameterDefinition',choices: "YES\nNO",name: 'Env']])echo "This is a deploy step to ${userInput}"if (userInput == "YES") {sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-qa-harbor.yaml"sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-qa-harbor.yaml"
//            sh "bash running-qa.sh"sh "kubectl apply -f k8s-qa-harbor.yaml --validate=false"sh "sleep 6"sh "kubectl get pods -n qatest"} else {//exit}}stage('Promote to pro') {	def userInput = input(id: 'userInput',message: 'Promote to pro?',parameters: [[$class: 'ChoiceParameterDefinition',choices: "YES\nNO",name: 'Env']])echo "This is a deploy step to ${userInput}"if (userInput == "YES") {sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-prod-harbor.yaml"sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-prod-harbor.yaml"
//            sh "bash running-production.sh"sh "cat k8s-prod-harbor.yaml"sh "kubectl apply -f k8s-prod-harbor.yaml --record --validate=false"}}
}

3)立即构建--->点击左下角进度条---->Console Output

这篇关于基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025688

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP