基于Kubernetes/K8S构建Jenkins持续集成平台(下)

简介: Jenkins-Master-Slave架构图回顾

Jenkins-Master-Slave架构图回顾:

2387773-20220308171711369-1268596781.png


安装和配置NFS


NFS简介


NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等


NFS安装


我们把NFS服务器安装在20.0.0.10机器上

安装NFS服务(在所有K8S的节点都需要安装)

yum install -y nfs-utils

创建共享目录


mkdir -p /opt/nfs/jenkins


vi /etc/exports #编写NFS的共享配置


#内容如下:

/opt/nfs/jenkins *(rw,no_root_squash) *代表对所有IP都开放此目录,rw是读写


启动服务

 

systemctl enable nfs 开机启动

systemctl start nfs 启动


查看NFS共享目录

 

showmount -e 20.0.0.10



 

Kubernetes安装Jenkins-Master


创建NFS client provisioner


nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储。

 

上传nfs-client-provisioner构建文件


2387773-20220308210246251-1438399793.png


其中注意修改deployment.yaml,使用之前配置NFS服务器和目录


2387773-20220308210510374-572263821.png


构建nfs-client-provisionerpod资源

 

cd nfs-client

kubectl create -f .


查看pod是否创建成功

kubectl get pods


装 Jenkins-Master

上传Jenkins-Master构建文件


2387773-20220308210246251-1438399793.png


创建kube-ops的namespace

因为我们把Jenkins-Master的pod放到kube-ops下

kubectl create namespace kube-ops


构建Jenkins-Masterpod资源

 

cd jenkins-master

kubectl create -f .


查看pod是否创建成功

kubectl get pods -n kube-ops


查看信息,并访问

查看Pod运行在那个Node上


2387773-20220308210805839-1806776709.png


查看分配的端口


2387773-20220308210837149-2021777713.png


然后去访问:http://20.0.0.70:31087/20.0.0.70k8s-node1IP


2387773-20220308211003663-761079535.png


看到这个页面就很简单了!

找到密钥复制进去登录:


2387773-20220308211038474-14770798.png


进去后就创建一个管理员用户都是老生常谈的操作了就不多说了

然后就实现的界面了!


2387773-20220308211052953-754825729.png

然后继续下面的操作!

 


设置插件下载地址:

cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-e90ef63e-5bf2-4747-a9b3-e8fe13ae21cf/updates 

sed -i 's/http:\/\/updates.jenkins- ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json


Manage Plugins点击Advanced,把Update Site改为

国内插件下载地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 

 

先安装基本的插件:“


  1. Localization:Chinese
  2. Git
  3. Pipeline
  4. Extended Choice Parameter

还有一个jenkins与k8s整合的插件:

  1. kubernetes

 

重启Jenkins


实现JenkinsKubernetes


系统管理->系统配置->云->新建云->Kubernetes


2387773-20220308223649811-1101937960.png

2387773-20220308223725807-1336577585.png

2387773-20220308223754769-1328973855.png


kubernetes 地 址 采 用 了 kube 的 服 务 器 发 现 :https://kubernetes.default.svc.cluster.local 


namespace填kube-ops,然后点击Test Connection,如果出现 Connection test successful 的提示信息证明 Jenkins 已经可以和 Kubernetes 系统正常通信


Jenkins URL 地址:http://jenkins.kube-ops.svc.cluster.local:8080



构建Jenkins-Slave自定义镜像


Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择  运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/jnlp-slave:latest,但是这个镜像里面并没有Maven    环境,为了方便使用,我们需要自定义一个新的镜像:


准备材料:


2387773-20220308224012562-452767536.png


Dockerfile文件内容如下:

 

FROM jenkins/jnlp-slave:latest


MAINTAINER lvbu


# 切换到 root 账户进行操作

USER root


# 安装 maven

COPY apache-maven-3.6.2-bin.tar.gz .


RUN tar -zxf apache-maven-3.6.2-bin.tar.gz && \

   mv apache-maven-3.6.2 /usr/local && \

   rm -f apache-maven-3.6.2-bin.tar.gz && \

   ln -s /usr/local/apache-maven-3.6.2/bin/mvn /usr/bin/mvn && \

   ln -s /usr/local/apache-maven-3.6.2 /usr/local/apache-maven && \

   mkdir -p /usr/local/apache-maven/repo


COPY settings.xml /usr/local/apache-maven/conf/settings.xml


USER jenkins

 

然后构建镜像:然后查看

docker build -t jenkins-slave-maven:latest .


2387773-20220308224230341-889380513.png

下面要做的就是修改指向harbor:K8s三台都要做


2387773-20220308224333871-1124280760.png


然后k8s master登录harbor:

docker login -u admin -p Harbor12345 20.0.0.50:85

docker tag jenkins-slave-maven:latest 20.0.0.50:85/library/jenkins-slave-maven:latest

docker push 20.0.0.50:85/library/jenkins-slave-maven:latest


2387773-20220308224608914-452775931.png

2387773-20220308224619391-2105473162.png


测试Jenkins-Slave是否可以创建


创建一个Jenkins流水线项目


2387773-20220308224702801-523095660.png


添加凭据:


2387773-20220308224743395-265228594.png


编写Pipeline,从GItlab拉取代码(使用http方式)使用流水线片段生成器

def git_address = "http://20.0.0.20:82/root/tensquare_back.git"

def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96"


//创建一个Pod的模板,label为jenkins-slave

podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [

   containerTemplate(

       name: 'jnlp',

       image: "20.0.0.50:85/library/jenkins-slave-maven:latest"

   )

 ]

)

{

   //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod

   node("jenkins-slave"){

       stage('拉取代码'){

           checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])

       }

   }

}


2387773-20220308224903889-533093209.png


然后开始构建:


2387773-20220308225048605-411396646.png


在构建前再开一台jenkins去看节点列表,初始状态是,一个主节点!然后构建的时候刷新会看到从节点上线构建,构建完就会自动下线释放资源

主节点不参与构建

2387773-20220308225336326-1685178326.png

2387773-20220308225344141-394512713.png








相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
17 1
|
4天前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
12天前
|
人工智能 自然语言处理 搜索推荐
云上玩转DeepSeek系列之三:PAI-RAG集成联网搜索,构建企业级智能助手
本文将为您带来“基于 PAI-RAG 构建 DeepSeek 联网搜索+企业级知识库助手服务”解决方案,PAI-RAG 提供全面的生态能力,支持一键部署至企业微信、微信公众号、钉钉群聊机器人等,助力打造多场景的AI助理,全面提升业务效率与用户体验。
|
2月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
2月前
|
人工智能 数据可视化 开发者
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序
FlowiseAI 是一款开源的低代码工具,通过拖拽可视化组件,用户可以快速构建自定义的 LLM 应用程序,支持多模型集成和记忆功能。
152 14
FlowiseAI:34K Star!集成多种模型和100+组件的 LLM 应用低代码开发平台,拖拽组件轻松构建程序
|
2月前
|
人工智能 数据挖掘 API
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
R2R 是一款先进的 AI 检索增强生成平台,支持多模态内容处理、混合搜索和知识图谱构建,适用于复杂数据处理和分析的生产环境。
220 3
R2R:开源的 RAG 集成系统,支持多模态处理、混合搜索、知识图谱构建等增强检索技术
|
3月前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
176 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
3月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
270 19
|
2月前
|
运维 监控 Cloud Native
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
|
3月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
867 11