专栏首页实战dockerHelm部署和体验jenkins

Helm部署和体验jenkins

运行在Kubernetes上的Jenkins

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

如何在kubernetes快速部署jenkins

通过Helm可以快速且简单的部署多种应用,关于helm的安装和使用请参考《部署和体验Helm(2.16.1版本) 》

环境信息

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

准备工作

除了提前准备好kubernetes环境,还需要做好以下准备工作:

  1. 准备好helm,您可以参考《部署和体验Helm(2.16.1版本) 》
  2. 准备好NFS服务,这样就算jenkins的pod被销毁重建,也不会丢失数据,NFS服务的搭建您可以参考《Ubuntu16环境安装和使用NFS》; 准备完成后可以开始实战了

本次实战的namespace

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

kubectl create namespace helm-jenkins

创建PV

为了后面的jenkins服务顺利启动,需要预先部署好pv:

  1. 新建名为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
  1. 执行命令kubectl create -f pv-helm-jenkins.yaml,创建PV;
  2. 查看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

  1. 确保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"}
  1. 确保以下helm repo准备好(如果没有可以通过helm repo add添加):
[root@node1 helm-jenkins]# helm repo list
NAME URL 
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  1. 执行以下命令,即可创建jenkins的deployment、service等资源:
helm install --namespace helm-jenkins --name my-jenkins stable/jenkins
  1. 执行完毕后,控制台输出以下内容:
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:

8. 检查服务,发现helm-jenkins这个namespace下有两个服务:my-jenkins和my-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
  1. my-jenkins这个服务的类型是LoadBalancer,8080端口被映射到宿主机的31763端口,因此,使用kubernetes集群中一台宿主机的IP,再加上31763端口即可通过浏览器访问; 至此,jenkins安装已完成,接下来要做必要的设置

设置kubernetes插件

为了让jenkins在以下模式工作,还需要设置kubernetes插件

  1. 点击下图红框中的"Manage Jenkins",进入设置页面:
  1. 由于很多插件版本较旧,页面上会有升级提示,这里暂时用不到,因此直接点击下图红框中的"Configure System":
  1. 点击下图红框1中的"Test Connection”按钮,您会见到红框2中的错误信息:
  1. 产生上述错误的原因,是由于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 4. 知道了容器的serviceaccount,上述问题就好解决了,我们用RBAC将访问api server所需权限绑定给default即可,这里为了省事儿就不将权限一一列出了,接下来直接给default最高权限(生产环境千万别这么做,必须按需分配); 5. 新建名为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
  1. 执行命令kubectl create -f rbac-helm-jenkins-default.yaml使得RBAC生效
  2. 再次回到之前的页面点击"Test Connection"按钮,如下图,提示"Connection successful":
  1. 接下来设置Pod模板参数,如下图,namepsace要设置为helm-jenkins,另外要记下来Labels的值my-jenkins-jenkins-slave,后面会用到:
  1. 点击底部的"Save"按钮,使设置生效;
  2. 设置完毕,接下来创建任务体验一下kubernetes上的jenkins功能

体验Freestyle project

  1. 创建一个Freestyle project,如下图:
  1. 如下图红框,表单中Label Expression的值是前面记下来的my-jenkins-jenkins-slave:
  1. 本次任务的具体内容很简单,执行一段shell,输出"Hello World!",如下图所示:
  1. 点击底部的"Save"按钮保存
  2. 点击下图红框中的"Build Now",即可开始构建:
  1. 如果是第一次执行,会触发jenkins任务pod的docker镜像的下载,您需要耐心等候一会儿;
  2. 此时去控制台执行命令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
  1. 返回jenkins页面,可见任务已经执行完毕:
  1. 再去控制台查看pod,发现刚刚创建的pod已经消失了
  2. 至此,kubernetes环境部署和体验jenkins的实战就完成了,希望本文带给您一些参考信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • kubernetes下jenkins实战maven项目编译构建

    在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下:

    程序员欣宸
  • kubernetes下的jenkins如何设置maven

    在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示:

    程序员欣宸
  • Helm部署的服务如何修改配置

    在Kubernetes上进行容器化部署时,使用helm可以简化操作,以部署Jenkins为例,只需要以下命令即可完成部署:

    程序员欣宸
  • 修改jenkins启动的默认用户

    # 背景 通过yum命令安装的jenkins,通过service jenkins去启动jenkins的话,默认的用户是jenkins,但jenkins这个用户是...

    千往
  • jenkins 入门教程(下)

    接上回继续学习jenkins,这次主要来看一些疑难杂症: 一、yum install安装方式 除了直接java -jar jenkins.war方式,还可以用y...

    菩提树下的杨过
  • jenkins学习1-docker快速搭建jenkins环境

    jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。 环境准备:

    上海-悠悠
  • docker安装jenkins

    -p 5555:8080 -p 50000:50000 进行端口映射 --privileged=true 在CentOS7中的安全模块selinux把权限禁掉了...

    似水的流年
  • 让自动化工作流解放你的双手

    相信很多小伙伴和我目前的现状是一样的,公司的前端部署测试和上线都是通过人工去操作,当我们本地开发完成之后,在本地进行打包,然后将打包后的 dist 文件上传到服...

    石燕平
  • 【Kubernetes系列】第8篇 CI/CD之组件部署

    应对敏捷开发的需求,对CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kub...

    HankerCloud
  • centos下搭建Jenkins持续集成环境(安装jenkins)

    如果不能安装就到官网下载jenkis的rmp包,官网地址(http://pkg.jenkins-ci.org/redhat-stable/)

    拓荒者

扫码关注云+社区

领取腾讯云代金券