如何在 Kubernetes 上配置 Jenkins?

作者 | Sudip Sengupta

译者 | 火火酱,责编 | Carol

封图 | CSDN 下载自视觉中国

在本文中,我们将一起完成在Kubernetes上配置Jenkins的工作。作为一款被广泛使用的开源CI服务器,Jenkins提供了数百个插件,能够为我们项目的构建、部署和自动化提供有力支持。

接下来,我们将:

1.使用minikube创建一个Kubernetes集群(这步不是必须的,如果你已经有Kubernetes集群了的话,可以跳过这一步)。

2.为Jenkins创建命名空间和持久卷。

3.使用Helm安装Jenkins。

4.设置并运行pipeline,对一个简单的web应用程序进行测试。

先决条件

1.Docker。有关安装Docker的详细信息,请参阅下方“Docker安装”页面。

https://docs.docker.com/get-docker/

2.Kubernetes集群。如果没有运行中的Kubernetes集群的话,请参阅章节“使用minikube创建Kubernetes集群”

3.HelmCLI。可以按照下方链接中的步骤安装Helm CLI。

https://helm.sh/docs/intro/install/?ref=hackernoon.com

用minikube创建一个Kubernetes集群(可选)

Minikube是一款在计算机上创建单节点Kubernetes集群的工具。如果没有Kubernetes集群的话,可以按照以下步骤进行创建:

1.  安装minikube :请参照下方“ Install minikube”页面中的步骤进行安装。https://kubernetes.io/docs/tasks/tools/install-minikube/?ref=hackernoon.com

2.  安装kubectl:请参照下方“Install and Set Up kubectl ”页面中的步骤进行安装。

https://kubernetes.io/docs/tasks/tools/install-kubectl/?ref=hackernoon.com

3.  然后就可以输入以下命令,创建minikube集群

minikube startminikube v1.5.2 on Darwin 10.15.2Automatically selected the 'hyperkit' driver (alternates: [virtualbox])Creating hyperkit VM (CPUs=2, Memory=2000MB, Disk=20000MB) ...Preparing Kubernetes v1.16.2 on Docker '18.09.9' ...Pulling images ...Launching Kubernetes ...Waiting for: apiserverDone! kubectl is now configured to use "minikube"

4.  创建完集群后,可以输入以下代码来验证其状态:

minikube status

如果一切顺利的话,应该会看到:

host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

我们还可以通过使用内置的Kubernetes用户界面来了解集群概况:运行以下命令:

minikube dashboard
Verifying dashboard health ...Launching proxy ...Verifying proxy health ...Opening http://127.0.0.1:56993/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

打开的网页中包含了Kubernetes集群的状态信息:

       

我们还可以使用仪表盘(dashboard)与Kubernetes集群进行交互。但是,这就有点超纲了。如果想要了解更多如何使用Kubernetes仪表盘创建或修改Kubernetes资源的信息,可以看看下方“ Web UI (Dashboard)”链接。

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/?ref=hackernoon.com

为Jenkins做好准备

按照以下步骤设置Jenkins:

  • 创建一个命名空间,从而在Kubernetes集群中将Jenkins与其他部署分离开。

  • 创建PersistentVolume以存储Jenkins数据,方便我们在重新启动时保留数据。

按照以下步骤为Jenkins设置好部署环境:

1. 运行以下命令,创建一个名为jenkins-namespace.yaml的文件:

apiVersion: v1
kind: Namespace
metadata:name: jenkins

2. 输入以下命令以规范应用:

kubectl apply -f jenkins-namespace.yaml
namespace/jenkins created

3. 将以下代码粘贴到jenkins-volume.yaml文件中:

apiVersion: v1
kind: PersistentVolume
metadata:name: jenkins-pvnamespace: jenkins
spec:storageClassName: jenkins-pvaccessModes:- ReadWriteOncecapacity:storage: 10GipersistentVolumeReclaimPolicy: RetainhostPath:path: /data/jenkins-volume/

4.输入以下命令以规范应用:

kubectl apply -f jenkins.volume.yaml

需要注意的是,hostPath使用节点/data/jenkins-volume/来模拟附属网络存储。这种方法只适合于开发和测试阶段。在生产阶段,需要提供网络资源(如Google Compute Engine持久盘,或Amazon Elastic Block Store卷)。

安装Jenkins

Jenkins部署通常由一个主节点和一个或多个代理节点(可选)组成。Jenkins是一个依赖于多个组件的复杂应用程序,我们可以通过Helm来简化Jenkins部署。

(Helm:https://helm.sh/?ref=hackernoon.com)

Helm是Kubernetes的一个包管理器,其打包格式被称为chart。在GitHub上能够找到许多社区开发的chart。

(GitHub:https://github.com/helm/charts?ref=hackernoon.com)

1.  创建一个覆盖文件,并将其作为实参传给Helm CLI。将 https://raw.githubusercontent.com/kubernetes/charts/master/stable/jenkins/values.yaml中的内容粘贴到values.yaml文件中。

然后在你喜欢的文本编辑器中打开values.yaml文件,将以下行:

storageClass:

修改为:

storageClass: jenkins-pv

2.  现在,我们可以通过运行helm install命令来安装Jenkins,并传递以下参数:

helm install jenkins -f values.yaml stable/jenkins --namespace jenkins

会得到类似以下输出:

NAME: jenkins
LAST DEPLOYED: Mon Dec 30 17:26:08 2019
NAMESPACE: jenkins
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:export POD_NAME=$(kubectl get pods --namespace jenkins -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=jenkins" -o jsonpath="{.items[0].metadata.name}")echo http://127.0.0.1:8080kubectl --namespace jenkins port-forward $POD_NAME 8080:8080
3. Login with the password from step 1 and the username: admin

3.  根据你环境的不同,Jenkins可能需要一定时间才能完成初始化,输入以下命令来检查Pod状态:

kubectl get pods --namespace=jenkins

Jenkins安装后,状态应像以下输出这样为Running:

❯ kubectl get pods --namespace=jenkins
NAME                      READY   STATUS    RESTARTS   AGE
jenkins-645fbf58d6-6xfvj   1/1     Running   0          2m

4.  需要通过以下命令检索密码,才可以访问Jenkins服务器:

printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
Um1kJLOWQY

注意,你的密码应该是不一样的。

5.  使用以下命令来获取运行Jenkins的Pod名称:

export POD_NAME=$(kubectl get pods --namespace jenkins -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=jenkins" -o jsonpath="{.items[0].metadata.name}")这将创建名为POD_NAME的环境变量,将其值设置为运行Jenkins的Pod名称。

6.  使用kubectl命令设置端口转发:

kubectl --namespace jenkins port-forward $POD_NAME 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

添加Executor

Jenkins将executor定义为“用于在节点上执行由Pipeline或Pipeline定义的工作槽。一个节点可以配置零个或多个Executor,与在该节点上能够执行的Project或Pipeline数量相对应。”

接下来,我们将向Jenkins节点添加executor。

1.  浏览器打开http://localhost:8080,使用用户名admin和之前检索到的密码进行登录。

2.  在左侧导航栏中,选择Jenkins -> Manage Jenkins -> Manage Node

     

3.  选择“Master ”,然后单击“Configure”

       

4.  在 # of executors 输入框中输入“1”,然后单击“Save ”

         

安装并配置Node.js插件

在本教程中,我们将使用Node.js插件来部署并测试一个用Express.js编写的简单web应用程序。

按照以下步骤安装Node.js插件:

1.  左侧导航栏Jenkins -> Manage Manage Jenkins -> Manage Plugins -> Available Plugins,选择NodeJS 插件,然后单击“Install without restart”

 

2.  安装完成后,会出现以下界面:

             

3.  左侧导航栏Jenkins -> Manage Jenkins -> Global Tool Configuration,选择Add NodeJS。输入NodeJS安装名称,然后选择一个NodeJS版本,选好后单击“Save ”。

          

HelloWorld 存储库

为了展示Jenkins 的工作原理,我们创建了一个监听端口3000并输出“Hello World!”的简单Express.js 服务器。然后我们编写了一个单元测试,检查该web 应用程序是否能够按预期工作。同时,我们还更新了package.json 文件,以便Jenkins 可以通过npm test命令执行单元测试。

最后,我们用以下命令创建了一个Jenkinsfile:

pipeline {agent anytools {nodejs "node"}stages {stage('Cloning Git') {steps {git 'https://github.com/andreipope/HelloWorld'}}     stage('Install dependencies') {steps {sh 'npm install'}}stage('Test') {steps {sh 'npm test'}}     }
}

以上构建了一个三阶段CD pipeline:

  • 首先,克隆了HelloWorld Git存储库

  • 然后,通过运行npm install 安装了依赖项

  • 最后,执行了单元测试

接下来,我们将配置Jenkins以运行该脚本。

创建并运行Pipeline

Pipeline为交付软件提供了可重复且一致的流程。借助Jenkins,我们可以用Groovy编程语言将pipeline作为DSL脚本来编写。

按照以下步骤创建和运行pipeline:

1.  选择Jenkins -> New Item,然后输入pipeline名称(HelloWorld),完成后单击“OK”。

             

2.  下一页,选择“Pipeline script from SCM”,并将Repository URL 设置为“https://github.com/andreipope/HelloWorld”。这是一个公共存储库,所以我们不需要配置任何证书凭证。

             

Jenkins会自动检索位于存储库根目录中的Jenkinsfile。

3.  现在,我们可以手动运行pipeline了:

       

4.  等它运行完后,应该会看到控制台输出类似内容:

+ npm test> HelloWorld@1.0.0 test /var/jenkins_home/workspace/HelloWorld
> mochaExpressJS server✓ Prints out Hello World (291ms)1 passing (373ms)
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

恭喜你!你已经成功在Kubernetes配置了Jenkins,并用它测试了一个简单的web应用程序。虽然看起来本文似乎包含了大量信息,但其实这只是Jenkins 和Kubernetes中最为浅显的内容。多尝试就会打开新世界!

推荐阅读
  • 不知道路由器工作原理?没关系,来这看看!看不懂你捶我 | 原力计划

  • 秋名山老司机从上车到翻车的悲痛经历,带你深刻了解什么是 Spark on Hive!| 原力计划

  • 出道50年+!乘风破浪的编程语言们,能二次翻红吗?

  • Service Mesh 如何重定义云原生计算?阿里服务网格技术大揭秘

  • 国士无双:卖掉美国房子,回国创办姚班,他只为培养一流的程序员!

  • 万字长文带你入门 GCN

真香,朕在看了!

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

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

相关文章

MySQL做数据统计SQL语句整理大全(原理+实战)

🎨领域:Java后端开发🔥收录专栏: MySQL原理与实战 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录&a…

如何在一周内上线50个用户增长策略

在闲鱼用户增长业务上的实验 我们最先落地的业务是在用户增长上,闲鱼的用户增长业务有如下描述: 闲鱼的卖家都是普通小卖家,而非专业的B类商家。因此无法统一组织起来参加营销活动带来买家活跃。我们目前DAU已经突破到2000W,如何…

jstat gc各参数含义

参数说明S0C第一个幸存区的大小S1C第二个幸存区的大小S0U第一个幸存区的使用大小S1U第二个幸存区的使用大小EC伊甸园区的大小EU伊甸园区的使用大小OC老年代大小OU老年代使用大小MC方法区大小MU方法区使用大小CCSC压缩类空间大小CCSU压缩类空间使用大小YGC年轻代垃圾回收次数YGC…

MySQL用户如何构建实时数仓

依托数据库生态,AnalyticDB for MySQL可以给用户提供分析场景下的标准解决方案,尤其是在大数据和性能要求较高的情况下AnalyticDB for MySQL的价值可以更好的体现。 MySQL用户为什么要单独构建数据仓库 为什么要单独构建数据仓库,而不是直接…

138 张图带你 MySQL 入门!

作者 | cxuan来源 | Java建设者SQL 基础使用MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)

文章目录一、软件和源准备1. Gitlab下载2. epel源下载二、环境配置2.1. 安装依赖项2.2. 安装epel源2.3. 安装Gitlab三、Gitlab和防火墙配置3.1. 设置external_url3.2. 重新加载配置3.3. 防火墙配置四、测试验证4.1. 浏览器访问Gitlab4.2. 重新设置密码4.3. Gitlab常用命令一、软…

Promise封装Ajax实现POST和GET请求

🎨领域:Java后端开发🔥收录专栏: 前端技术 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录介绍一、相…

轻松构建基于 Serverless 架构的弹性高可用视频处理系统

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种…

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

文章目录一、Gitlab下载1. Gitlab官网下载二、分析思路2.1. 分析2.2. 代码托管平台2.3. 镜像站二、Gitlab 重新加载配置异常2.1. 异常现象2.2. 分析定位三、百度解决问题3.1. 百度类似异常3.2. 参考博文3.3. 解决方案3.4. 执行测试3.5. 结论四、官网issues 014.1. 找官网issues…

祝贺我的同事王坚当选院士!

刚刚, 收到一个激动人心的消息: 原文链接 本文为云栖社区原创内容,未经允许不得转载。

带你从零入门 Serverless | 一文详解 Serverless 架构模式

作者 | Hongqi 阿里云高级技术专家责编 | Carol来源 | Serverless本文整理自《Serverless 技术公开课》什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS&#xf…

端智能揭秘|促使双十一GMV大幅提升,手淘用了什么秘密武器?

作者|莫凌、桑杨、明依 出品|阿里巴巴新零售淘系技术部 导读:信息流作为手淘的一大流量入口,对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上,我们首次将端计算大规模应用在手淘客户端&#xf…

bug:The selected directory is not a valid home for Go SDK

问题描述: 使用IDEA插件配置go开发环境无法选择已经安装配置好的SDK 当选择local中的SDK时,出现如下错误: The selected directory is not a valid home for Go SDK解决方案: 在自己的SDK目录C:\Program Files\Go\src\runtime\…

Dataphin的代码自动化能力如何助力商业决策

前言 随着大数据趋势的迅速增长,数据的重要性与日俱增,企业内看数据、用数据的诉求越来越强烈,其中最常见的就是各种经营报表数据: 老板每日早晨9点准时需要看到企业核心的经营数据,以便进行企业战略及方向决策 业务负…

Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)

文章目录一、下载、安装、配置依赖1. 安装配置需要的依赖2. Gitlab下载3. 安装Gitlab4. 配置external_url5. 重新加载配置文件6. 查看服务状态7. 配置防火墙8. 浏览器验证9. 寻找密码信息10. 查看密码11. 重新登陆12. 修改密码13. 重新登陆14. Gitlab常用命令声明:C…

如何通过Dataphin构建数据中台新增100万用户?

欢迎来到数据中台小讲堂!这一期我们来看看,作为阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体,Dataphin如何帮助传统零售企业实现数字化转型,并在短时间内新增100万用户? 传统营销的痛点…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚,专业不对口,无实习经验,在求职路上的竞争优势几乎为0,然而,开启自救模式后,我顺利成为了头条数据分析师,下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

36氪联合阿里云,共同研制中小企业发展「催化剂」

互联网的“中场战事” 伴随着第一代原生互联网人进入中年,高速发展了20多年的互联网也开始进入了中场阶段。 现阶段的创新创业领域,商业逻辑已日渐清晰,标志性公司陆续出现,整个行业大家在争夺什么、竞争什么都已摆在眼前。 大…

如何在项目运行过程中动态修改邮箱发件人的配置信息

🎨领域:Java后端开发🔥收录专栏: 框架 🐒个人主页:BreezAm 💖Gitee:https://gitee.com/BreezAm ✨个人标签:【后端】【大数据】【前端】【运维】 文章目录业务场景场景分…

Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x (语言和主题配置)

接上一篇:Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x 文章目录1. 简体中文2. 个性化主题1. 简体中文 2. 个性化主题