千家信息网

如何基于开源组件使用CI/CD

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关如何基于开源组件使用CI/CD,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言应对敏捷开发的需求,对CI(持
千家信息网最后更新 2026年11月02日如何基于开源组件使用CI/CD

本篇文章给大家分享的是有关如何基于开源组件使用CI/CD,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言

应对敏捷开发的需求,对CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,赋能团队的开发、运维。

核心组件

组件名称版本备注
kubernetesv1.15.310.0.0.182:6443
jenkins2.176.2集群内部署/ namespace: devops
gitlab11.8主机部署
harborv1.7.4docker-compose部署

基本流程

  1. 在GitLab创建对应的项目。

  2. 开发者将代码提交到GitLab。

  3. Jenkins创建对应的任务(Job),集成该项目的Git地址和Kubernetes集群。

  4. 如有配置钩子,推送(Push)代码会自动触发Jenkins构建,如没有配置钩子,需要手动构建。

  5. Jenkins控制Kubernetes(使用的是Kubernetes插件)创建Jenkins Slave。

  6. Jenkins Slave根据流水线(Pipeline)定义的步骤执行构建。

    1. 检出代码、打包、编译。

    2. 通过Dockerfile生成镜像。

    3. 将镜像提送(Push)到私有Harbor。

    4. Jenkins再次控制Kubernetes进行最新的镜像部署。

注:

  • 上面所述为一般步骤,中间还可能会涉及自动化测试等步骤,可自行根据业务场景添加。

  • 上面流水线步骤一般由应用代码库的根目录下Jenkinsfile决定,Jenkins会自动读取该文件;另外如果需要对具体的应用流水线实施强管控,可以独立管理jenkinsfile模板,然后根据jenkins API接口即时生成流水线。

  • 默认使用的Dockerfile放置在代码仓库的根目录下。

组件部署

  1. kubernetes 第3篇 Kubernetes集群安装部署

  2. gitlab 无忌过招:手把手教你搭建自己的GitLab库

  3. harbor 安装配置指南

  4. 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: v1kind: Namespacemetadata:  name: devops# Deployment apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: jenkins  namespace: devopsspec:  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: v1kind: Servicemetadata:  name: jenkins-service  namespace: devopsspec:  ports:  - name: http    protocol: TCP    port: 8080    targetPort: 8080  - port: 50000    targetPort: 50000    name: agent  selector:    app: jenkins
  • 授权jenkins对k8s的访问 rbac.yaml

apiVersion: v1kind: ServiceAccountmetadata:  labels:    k8s-app: jenkins  name: jenkins-admin  namespace: devops---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRolemetadata:  name: jenkins-rbac  namespace: devopsrules:  - apiGroups: ["","extensions","app"]    resources: ["pods","pods/exec","deployments","replicasets"]    verbs: ["get","list","watch","create","update","patch","delete"]---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:  name: jenkins-admin  namespace: devops  labels:    k8s-app: jenkinssubjects:  - kind: ServiceAccount    name: jenkins-admin    namespace: devopsroleRef:  kind: ClusterRole  name: jenkins-rbac  apiGroup: rbac.authorization.k8s.io
  • 为了便于办公网(集群外)访问,ingress.yaml

apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: jenkins-ingress  namespace: devopsspec:  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 jenkinsNAME      READY   UP-TO-DATE   AVAILABLE   AGEjenkins   1/1     1            1           51d[root@node0 jenkins_deploy]#

4. 访问jenkins 安装插件、设置

注: 步骤1 声明的域名 jenkins.dev.hanker.net 已经解析至ingress,故可直接访问; 如果你也想通过自定义域名访问jenkins,麻请解析至正确的ingress服务节点,即可。

  1. 确认你也已经安装了kubernetes/ kubernetes cli 插件

操作指引: 【Manage Jenkins】 -> 【Manage Plugins】

你应该可以通过类似的指令获取jenkins-master的密码

$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword

  1. 配置Kubernetes 插件

操作指引: 【Manage Jenkins】->【Configure System】

图中标注:

  1. 请修改为你所在环境对应的k8s master

  2. 声明jenkins-agent 的命令空间,也可以根据需要调整;

  3. jenkins-master的访问地址,本示例使用的是 service-name的形式访问。

  4. 测试与k8s分享群的连接情况。如果你获取到『
    Connection test successful』,恭喜你可以继续。

  5. 配置Kubernetes Pod Template

图中标注:

  1. 设置基础的jenkins-agent镜像;

  2. 指定工作目录;

    • 如果你需要下载、导出或是缓存构建的话,指定一个为共享存储的目录就很有意义了。

  3. 设置目录挂载

    • 如步骤2如说,你可以将宿主机的目录或是网络存储挂载至jenkins-agent.

以上就是如何基于开源组件使用CI/CD,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

配置 组件 步骤 目录 镜像 代码 集群 插件 流水 流水线 示例 地址 形式 节点 存储 应用 开发 有效 仓库 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 百单网互联网科技有限公司怎么样 广东猪兼强互联网科技有限公司 科技和互联网公司 鸠鸠互联网科技 互联网医疗科技 亿策互联网科技 腾讯科技 互联网女皇 国外互联网科技网站 成都仁贤领冠互联网科技有限公司 现代科技和互联网有关系吗 杭州壁岐互联网科技有限公司 河南住房之家互联网科技 互联网科技如何创业 2021互联网科技公司排名 图游互联网科技 郑州欣桑互联网科技有限公司 艺电能源互联网科技有限公司招聘 互联网的科技体现在哪里 重庆科技产业互联网有哪些 百单网互联网科技有限公司怎么样 美国互联网科技巨头监管 互联网科技logo设计 时间互联网络科技 剑昆互联网络科技有限公司临桂 特约风豹互联网科技为什么扣费 沐思想互联网科技有限公司 信承诺互联网科技有限公司 互联网科技手抄报图片 前海云享互联网科技
0