基于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搭建和管理企业级网站应用
相关文章
|
16天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
24天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
45 2
|
11天前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
25天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
49 4
|
30天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
83 7
|
29天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
60 6
|
1月前
|
数据采集 DataWorks 数据管理
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第10天】随着大数据技术的发展,企业对数据处理的需求日益增长。阿里云推出的DataWorks是一款强大的数据集成和管理平台,提供从数据采集、清洗、加工到应用的一站式解决方案。本文通过电商平台案例,详细介绍了DataWorks的核心功能和优势,展示了如何高效处理大规模数据,帮助企业挖掘数据价值。
108 1
|
1月前
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
98 3
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
3月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
下一篇
无影云桌面