共计 4397 个字符,预计需要花费 11 分钟才能阅读完成。
本篇文章给大家分享的是有关如何基于开源组件使用 CI/CD,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
前言
应对敏捷开发的需求,对 CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用 CI/CD,赋能团队的开发、运维。
核心组件组件名称版本备注 kubernetesv1.15.310.0.0.182:6443jenkins2.176.2 集群内部署 / namespace: devopsgitlab11.8 主机部署 harborv1.7.4docker-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 部署及配置
说明:
以下的 yaml 文件均在 k8s master 节点的 /home/jenkins_deploy 目录下,
部署示例的 depployment.yaml 的注解
nodeName ipaddress , ipaddress 请确认其为一个有效的 ip.
示例中 jenkins 的目录 /var/jenkins_home 是直接挂载到 host_path, 如果你有条件,建议替换为共享存储。
因使用的 jenkins-master 的基础镜像来自公网,需要 k8s maste 节点也要可以访问公网,或者你可以将 jenkins/jenkins:lts-alpine 推送至自己的内网镜像仓库。
部署示例的 ingress.yaml 的注解
需要你也需要办公网(集群外)访问,请将 jenkins.dev.hanker.net, 改为有效的域名地址,或是你也可以通过 NodePort 的形式声明 service,就可以直接通过 ip:port 的形式访问 jenkins 了。
1. 准备部署 yaml
deployment.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
配置 service, services.yaml
---
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
授权 jenkins 对 k8s 的访问 rbac.yaml
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
为了便于办公网(集群外)访问,ingress.yaml
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 镜像;
指定工作目录;
如果你需要下载、导出或是缓存构建的话,指定一个为共享存储的目录就很有意义了。
设置目录挂载
如步骤 2 如说,你可以将宿主机的目录或是网络存储挂载至 jenkins-agent.
以上就是如何基于开源组件使用 CI/CD,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。