Kubernetes部署配置jenkins(CI/CD)实践
安装
jenkins安装方式比较多样化,具体可以参考Jenkins官网,我们这里使用K8s集群容器化部署服务,所以我们在开始之前需要有一套k8s集群环境,接下来看启动服务的相关文件
# pv文件(jenkins-pv.yaml)
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jenkins-pvc
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200Gi
# 主程序文件(jenkins-master.yaml)
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: pro-jenkins
spec:
replicas: 1
template:
metadata:
labels:
run: pro-jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins
imagePullPolicy: IfNotPresent
env:
- name: JAVA_OPTS
value: '-Duser.timezone=Asia/Shanghai'
ports:
- containerPort: 8080
name: web
- containerPort: 50000
name: agent
volumeMounts:
- name: workspace
mountPath: /var/jenkins_home
volumes:
- name: workspace
persistentVolumeClaim:
claimName: jenkins-pvc
dnsConfig:
options:
- name: ndots
value: "1"
---
apiVersion: v1
kind: Service
metadata:
name: pro-jenkins
labels:
run: pro-jenkins
spec:
type: NodePort
selector:
run: pro-jenkins
ports:
- name: web
port: 8080
nodePort: 31080
- name: agent
port: 50000
nodePort: 31050
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-jenkins
spec:
rules:
- host: jenkins.ingress.com
http:
paths:
- path: /
backend:
serviceName: pro-jenkins
servicePort: 8080jenkins-pv.yaml创建一个pvc作为数据持久化所用。jenkins-master.yaml定义使用pvc;nodePort申明端口,部署后通过http://$cluster_ip:nodePort进行服务访问;当集群使用ingress服务时,创建ingress规则可以通过http://jenkins.ingress.com进行访问;
启动服务
# 启动 kubectl create -f jenkins-pv.yaml kubectl create -f jenkins-master.yaml
初始化

# 在之前定义的共享存储目录下获取 cat secrets/initialAdminPassword d777b3a282szks2bfd28a16c8dd61ds

选择"安装推荐的插件"下一步

等待片刻

定义管理员账号信息


初始化完毕
插件安装配置
"Manage Jenkins"->"Manage Plugins"->"Available" 进行插件安装
Pipeline
代替传纯统工作模式,提高脚本复用性,在项目中定义所有项目逻辑,安装即可支持此工作模式,无需配置
Kubernetes
用于识别k8s集群并调用其相关接口进行Job发布
"系统管理"->"系统管理"->"云"->"新增一个云"->"Kubernetes"

名称自定义即可Kubernetes 地址kubectl get svc查看解析,其中default代表的namespace;Kubernetes 服务证书keykubernetes集群的ca证书,通常在/etc/kubernetes/ssl/ca.pemJenkins 地址kubectl get svc查看jenkins的解析,其中default代表的namespace;凭据用于连接配置的Kubernetes集群后接口调用
echo “kubeconfig下certificate-authority-data” | base64 -d > /tmp/ca.crt echo “kubeconfig下client-certificate-data” | base64 -d > /tmp/client.crt echo “kubeconfig下client-key-data” | base64 -d > /tmp/client.key # 生成client p12认证文件并下载到本地,执行下面命令时会让输入密码,需要输入后面使用 openssl pkcs12 -export -out ./cert.pfx -inkey ./client.key -in ./client.crt -certfile ./ca.crt
新增凭据,将生成的cert.pfx上传,并输入刚才的密码

添加完毕后可以点击链接测试,返回"success"则配置成功
Maven Integration Plugin
编译java所用,同时可以提供pipeline内对docker镜像编译、上传等操作,由于此项目主要针对php且docker这块直接调用的api,所以先暂时不介绍插件,配置略
Blue ocean
提供更好看的Web界面,用于任务触发、便于查看任务进度日志等,安装即可无需配置
Ssh
用于连接到需要操作的节点,在传统使用Jenkins时必不可少的一个插件,此项目中没有用到,配置略
Active choices
用于发布服务时的联动及分选,可限制可选参数,降低人员对于项目的误操作
Gitlab
用于在执行任务中获取项目repo
"系统管理"->"系统管理"->"Gitlab"

connection name自定义名称Gitlab host URL需连接的gitlab主地址API-Level这块一定要选择v3,否则会报错Client error: HTTP 401 UnauthorizedCredentials用于连接此gitlab的token

点击"Test connection"进行测试,返回"success"则配置成功
创建项目
创建一个项目为"lienhua"

配置"参数化构建过程",实现关联参数功能
"添加参数"->"Active Choices Parameter"

Name变量名称Groovy Script内容定义了3个环境description注释定义了三个环境Choice Type选择Radio Buttons
"添加参数"->"Active Choices Reactive Parameter"

Groovy Script关联三套环境可选择的操作(开发和测试环境支持更新和回滚,上线操作支持更新、回滚及灰度发布)Referenced parameters定义引用的参数
"添加参数"->"Active Choices Reactive Parameter"

Groovy Script关联三套环境操作时使用的分支(dev/test/master),当操作为回滚时,分支为空即可Referenced parameters定义引用的参数,多个参数时用逗号隔开
定义流水线

定义选择Pipeline script from SCMSCM选择GitRepositories填写存放pipeline脚本的git仓库地址Branchs to build定义获取使用的分支Credentials用于获取此repo的ssh-key,一定确保此key具有pull权限Additional Behaviours拽取下来的代码命名为jenkins脚本路径Jenkinsfile在repo的相对位置
Jenkins逻辑

构建项目
"Build with Parameters" 选择预发布的环境点击"开始构建"即可

可点击"Blue Ocean"进行任务发布进度情况

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
kubelet为cadvisor添加namespace/pod/container标签示例详解
这篇文章主要为大家介绍了kubelet为cadvisor添加namespace/pod/container标签示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09


最新评论