Helm部署和体验jenkins

简介: 在kubernetes环境下,jenkins任务被交给各个pod执行,这些pod在需要时被创建,任务结束后被销毁,这样既能合理利用资源,又能给每个任务提供一致的干净的初始化环境

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

运行在Kubernetes上的Jenkins

  • 下图来自rancher官方博客,在kubernetes环境下,jenkins任务被交给各个pod执行,这些pod在需要时被创建,任务结束后被销毁,这样既能合理利用资源,又能给每个任务提供一致的干净的初始化环境(也可以保留pod,如查问题的时候)

在这里插入图片描述

如何在kubernetes快速部署jenkins

环境信息

  • 本次实战的环境信息如下:
  1. kubernetes集群:三台CentOS7.7服务器
  2. kubernetes版本:1.15.3
  3. helm版本:2.16.1
  4. jenkins版本:2.190.3

准备工作

本次实战的namespace

  • 本次实战使用名为helm-jenkins的namespace,执行以下命令创建:
kubectl create namespace helm-jenkins

创建PV

  • 为了后面的jenkins服务顺利启动,需要预先部署好pv:
  • 新建名为 pv-helm-jenkins.yaml 的文件,内容如下,其中 192.168.133.142 是NFS服务器地址, /usr/local/work/test/002 是分配给本次实战使用的NFS文件夹:
apiVersion: v1
kind: PersistentVolume
metadata:
 name: helm-jenkins
 namespace: helm-jenkins
spec:
 capacity:
 storage: 10Gi
 accessModes:
 - ReadWriteOnce
 persistentVolumeReclaimPolicy: Recycle
 nfs:
 path: /usr/local/work/test/002
 server: 192.168.133.142
  • 执行命令 kubectl create -f pv-helm-jenkins.yaml ,创建PV;
  • 查看PV是否已经就绪:
[root@node1 helm-jenkins]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
helm-jenkins 10Gi RWO Recycle Available 5s
 14h

helm安装jenkins

  • 确保helm2.16.1版本安装完毕,并且可以正常工作:
[root@node1 helm-jenkins]# helm version
Client: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
  • 确保以下helm repo准备好(如果没有可以通过helm repo add添加):
[root@node1 helm-jenkins]# helm repo list
NAME URL 
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 执行以下命令,即可创建jenkins的deployment、service等资源:
helm install --namespace helm-jenkins --name my-jenkins stable/jenkins
  • 执行完毕后,控制台输出以下内容:
NOTES:
5. Get your 'admin' user password by running:
 printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
6. Get the Jenkins URL to visit by running these commands in the same shell:
 NOTE: It may take a few minutes for the LoadBalancer IP to be available.
 You can watch the status of by running 'kubectl get svc --namespace helm-jenkins -w my-jenkins'
 export SERVICE_IP=$(kubectl get svc --namespace helm-jenkins my-jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
 echo http://$SERVICE_IP:8080/login

7. Login with the password from step 1 and the username: admin
  • 上述内容的第一条给出重要提示:获取admin账号密码的方法,执行以下命令即可:
printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
  • 如下图红框所示,我这里得到了admin密码为 Eq6WxHvJ2V

在这里插入图片描述

  • 检查服务,发现helm-jenkins这个namespace下有两个服务: my-jenkinsmy-jenkins-agent ,前者就是jenkins网站,后者用来接收执行任务的jenkins实例的注册:
[root@node1 helm-jenkins]# kubectl get svc -n helm-jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-jenkins LoadBalancer 10.233.10.35 <pending> 8080:31763/TCP 31m
my-jenkins-agent ClusterIP 10.233.35.20 <none> 50000/TCP 31m
  • my-jenkins这个服务的类型是LoadBalancer,8080端口被映射到宿主机的31763端口,因此,使用kubernetes集群中一台宿主机的IP,再加上31763端口即可通过浏览器访问;
  • 至此,jenkins安装已完成,接下来要做必要的设置

设置kubernetes插件

  • 为了让jenkins在以下模式工作,还需要设置kubernetes插件
  • 点击下图红框中的"Manage Jenkins",进入设置页面:

在这里插入图片描述

  • 由于很多插件版本较旧,页面上会有升级提示,这里暂时用不到,因此直接点击下图红框中的"Configure System":

在这里插入图片描述

  • 点击下图红框1中的"Test Connection”按钮,您会见到红框2中的错误信息:
    在这里插入图片描述
  • 产生上述错误的原因,是由于jenkins容器没有权限访问kubernetes的api server,为了解决此问题,要先搞清楚容器的身份,我们知道容器在kubernetes环境中都有自己的serviceaccount,执行命令 kubectl get serviceaccount -n helm-jenkins 查看当前namespace下的serviceaccount:
[root@node1 helm-jenkins]# kubectl get serviceaccount -n helm-jenkins
NAME SECRETS AGE
default 1 3h55m
  • 可见jenkins容器的serviceaccount是 default
  • 知道了容器的serviceaccount,上述问题就好解决了,我们用RBAC将访问api server所需权限绑定给default即可,这里为了省事儿就不将权限一一列出了,接下来直接给default最高权限( 生产环境千万别这么做 ,必须按需分配);
  • 新建名为rbac-helm-jenkins-default.yaml的文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: rbac-helm-jenkins-default
 namespace: helm-jenkins
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: default
 namespace: helm-jenkins
  • 执行命令 kubectl create -f rbac-helm-jenkins-default.yaml使得RBAC生效
  • 再次回到之前的页面点击"Test Connection"按钮,如下图,提示"Connection successful":

在这里插入图片描述

  • 接下来设置Pod模板参数,如下图,namepsace要设置为 helm-jenkins ,另外要记下来Labels的值 my-jenkins-jenkins-slave ,后面会用到:

在这里插入图片描述

  • 点击底部的"Save"按钮,使设置生效;
  • 设置完毕,接下来创建任务体验一下kubernetes上的jenkins功能

体验Freestyle project

  • 创建一个Freestyle project,如下图:

在这里插入图片描述

  • 如下图红框,表单中Label Expression的值是前面记下来的 my-jenkins-jenkins-slave

在这里插入图片描述

  • 本次任务的具体内容很简单,执行一段shell,输出"Hello World!",如下图所示:

在这里插入图片描述

  • 点击底部的"Save"按钮保存
  • 点击下图红框中的"Build Now",即可开始构建:

在这里插入图片描述

  • 如果是第一次执行,会触发jenkins任务pod的docker镜像的下载,您需要耐心等候一会儿;
  • 此时去控制台执行命令 kubectl get pods -n helm-jenkins 查看pod,会发现有新的pod出现,如下所示,这是执行jenkins任务的pod:
[root@node1 helm-jenkins]# kubectl get pods -n helm-jenkins
NAME READY STATUS RESTARTS AGE
default-66vcq 0/1 ContainerCreating 0 1s
my-jenkins-74bcdfc566-jbw28 1/1 Running 0 5h5m
  • 返回jenkins页面,可见任务已经执行完毕:

在这里插入图片描述

  • 再去控制台查看pod,发现刚刚创建的pod已经消失了
  • 至此,kubernetes环境部署和体验jenkins的实战就完成了,希望本文带给您一些参考信息。

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
Kubernetes jenkins 持续交付
Artifact Hub在Kubernetes中的应用:部署Jenkins的脚本整理
以上步骤断言清晰明确地描述了如何通过Artifact Hub 使用Helm图表来部署Kubernetes 中得Jenkis 实例,并且提供了相应得Shell 脚本作为执行指南. 这样不但能够帮助用户快速地进行操作, 同时也能够通过自定义参数来满足不同用户需求.
236 5
存储 jenkins 持续交付
984 2
|
9月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1064 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
10月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
520 0
|
jenkins Java Linux
Jenkins环境的部署及任务构建
以上就是Jenkins环境的部署及任务构建的全部内容。希望可以帮助你轻松上手Jenkins,让你的CI/CD之旅更加顺畅!
848 68
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
346 5
|
监控 前端开发 jenkins
Jenkins 在前端项目持续部署中的应用,包括其原理、流程以及具体的实现方法
本文深入探讨了Jenkins在前端项目持续部署中的应用,涵盖其基本原理、流程及具体实现方法。首先介绍了Jenkins的基本概念及其在自动化任务中的作用,随后详细解析了从前端代码提交到生产环境部署的全过程,包括构建、测试、部署等关键步骤。最后,强调了持续部署中的代码质量控制、环境一致性、监控预警及安全管理等注意事项,旨在帮助开发者高效、安全地实施持续部署。
464 5
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
533 2
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
653 4

推荐镜像

更多