本篇文章给大家分享的是有关如何基于开源组件使用CI/CD,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
前言
应对敏捷开发的需求,对CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,赋能团队的开发、运维。
核心组件
组件名称 | 版本 | 备注 |
---|
kubernetes | v1.15.3 | 10.0.0.182:6443 |
jenkins | 2.176.2 | 集群内部署/ namespace: devops |
gitlab | 11.8 | 主机部署 |
harbor | v1.7.4 | docker-compose部署 |
基本流程
在GitLab创建对应的项目。
开发者将代码提交到GitLab。
Jenkins创建对应的任务(Job),集成该项目的Git地址和Kubernetes集群。
如有配置钩子,推送(Push)代码会自动触发Jenkins构建,如没有配置钩子,需要手动构建。
Jenkins控制Kubernetes(使用的是Kubernetes插件)创建Jenkins Slave。
Jenkins Slave根据流水线(Pipeline)定义的步骤执行构建。
检出代码、打包、编译。
通过Dockerfile生成镜像。
将镜像提送(Push)到私有Harbor。
Jenkins再次控制Kubernetes进行最新的镜像部署。
注:
上面所述为一般步骤,中间还可能会涉及自动化测试等步骤,可自行根据业务场景添加。
上面流水线步骤一般由应用代码库的根目录下Jenkinsfile决定,Jenkins会自动读取该文件;另外如果需要对具体的应用流水线实施强管控,可以独立管理jenkinsfile模板,然后根据jenkins API接口即时生成流水线。
默认使用的Dockerfile放置在代码仓库的根目录下。
组件部署
kubernetes 第3篇 Kubernetes集群安装部署
gitlab 无忌过招:手把手教你搭建自己的GitLab库
harbor 安装配置指南
jenkins
注: 本文主要说明下jenkins的部署及配置,其他组件如果你部署有问题,欢迎留言。
Jenkins 部署及配置
说明:
1. 准备部署yaml
apiVersion: v1
kind: Namespace
metadata:
name: devops
# Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: devops
spec:
replicas: 1
revisionHistoryLimit: 3
template:
metadata:
labels:
app: jenkins
spec:
nodeName: 1.1.1.1
serviceAccountName: jenkins-admin
containers:
- image: jenkins/jenkins:lts-alpine
imagePullPolicy: IfNotPresent
name: jenkins
volumeMounts:
- name: jenkins-volume
mountPath: /var/jenkins_home
- name: jenkins-localtime
mountPath: /etc/localtime
env:
- name: JAVA_OPTS
value: '-Xms256m -Xmx1024m -Duser.timezone=Asia/Shanghai'
- name: TRY_UPGRADE_IF_NO_MARKER
value: 'true'
ports:
- name: http
containerPort: 8080
- name: agent
containerPort: 50000
resources:
requests:
cpu: 1000m
memory: 1Gi
limits:
cpu: 1200m
memory: 2Gi
volumes:
- name: jenkins-localtime
hostPath:
path: /etc/localtime
- name: jenkins-volume
hostPath:
path: /home/jenkins/jenkins_home
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
namespace: devops
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
- port: 50000
targetPort: 50000
name: agent
selector:
app: jenkins
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: jenkins
name: jenkins-admin
namespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: jenkins-rbac
namespace: devops
rules:
- apiGroups: ["","extensions","app"]
resources: ["pods","pods/exec","deployments","replicasets"]
verbs: ["get","list","watch","create","update","patch","delete"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: jenkins-admin
namespace: devops
labels:
k8s-app: jenkins
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: devops
roleRef:
kind: ClusterRole
name: jenkins-rbac
apiGroup: rbac.authorization.k8s.io
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins-ingress
namespace: devops
spec:
rules:
- host: jenkins.dev.hanker.net
http:
paths:
- backend:
serviceName: jenkins-service
servicePort: 8080
path: /
2. 应用yaml,部署jenkins
$ pwd
$ /home/jenkins_deploy
$ kubectl apply -f *.yaml
3. 确认jenkins 服务状态
[root@node0 jenkins_deploy]# kubectl -n devops get deployment jenkins
NAME READY UP-TO-DATE AVAILABLE AGE
jenkins 1/1 1 1 51d
[root@node0 jenkins_deploy]#
4. 访问jenkins 安装插件、设置
注: 步骤1 声明的域名 jenkins.dev.hanker.net
已经解析至ingress,故可直接访问; 如果你也想通过自定义域名访问jenkins,麻请解析至正确的ingress服务节点,即可。
确认你也已经安装了kubernetes/ kubernetes cli 插件
操作指引: 【Manage Jenkins】 -> 【Manage Plugins】
你应该可以通过类似的指令获取jenkins-master的密码
$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword
配置Kubernetes 插件
操作指引: 【Manage Jenkins】->【Configure System】
图中标注:
请修改为你所在环境对应的k8s master
声明jenkins-agent 的命令空间,也可以根据需要调整;
jenkins-master的访问地址,本示例使用的是 service-name的形式访问。
测试与k8s分享群的连接情况。如果你获取到『
Connection test successful』,恭喜你可以继续。
配置Kubernetes Pod Template
图中标注:
设置基础的jenkins-agent镜像;
指定工作目录;
设置目录挂载
以上就是如何基于开源组件使用CI/CD,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注天达云行业资讯频道。