Skip to main content

9 篇博文 含有标签「持续集成

View All Tags

· 3 分钟阅读

live-preview

十四五规划纲要中指出,要加快数字化发展、建设数字中国,以数字化转型整体驱动生产方式、生活方式和治理方式变革。新形势下,数字化建设被提到了前所未有的高度,是实现创新驱动发展的重要抓手。然而,数字化建设过程中,企业常面临业务变化快、协作流程繁、能力沉淀难等诸多问题,只有提前整体布局规划,以科学方法论和专业管理工具对数字化战略进行落地,才能更好地帮助企业实现数字化转型。

猪齿鱼效能管理平台,由上海汉得信息技术股份有限公司(以下简称上海汉得)自主研发推出,通过提供体系化方法论和协作、测试、DevOps及容器工具,帮助企业拉通需求、设计、开发、部署、测试和运营流程,一站式提高管理效率和质量,助力团队效能更快更强更稳定,帮助企业推动数智化转型升级。

本周四,由上海汉得和上海熙上网络科技有限公司共同推出的“企业数字化建设路径与效能提升实践分享”线上直播,将邀请猪齿鱼资深业务架构师程沛女士分享企业数字化建设整体框架设计、方法论、效能提升利器与应用实践,为企业数字化建设提供思考方向。欢迎扫码报名。

直播介绍

直播时间: 2021年12月16日(周四) 19:30-21:00

直播地址: 腾讯会议 ID:583-107-754 或直接点击:https://meeting.tencent.com/dw/QhDhkbnicp0E

主讲人: 程沛 猪齿鱼资深业务架构师

建议参会人员: 各公司技术总监、研发主管、项目总监、实施顾问、信息中心负责人等

您将收获:

  • 企业数字化建设的方法论和五大武器
  • 数字化效能提升的要诀

posters

数字化大潮正席卷全球,我们诚邀您和您的团队参加本次线上直播,共同探讨企业数字化建设与效能提升话题!

· 6 分钟阅读

背景

Serverless Kubernetes 让您无需管理和维护集群与服务器,即可快速创建 Kuberentes 容器应用,并且根据应用实际使用的 CPU 和内存资源量进行按需付费。使用 Serverless Kubernetes,您可以专注于设计和构建应用程序,而不是管理运行应用程序的基础设施。充分结合了虚拟化资源带来的安全性、弹性和 Kubernetes 生态。

由此定位,这种集群是很适合用来跑 CI 流程场景的。CI 触发时创建对应资源,CI 结束后销毁对应的资源。目前 Serverless Kubernetes 或多或少有一些不友好的体验,比如:

  • 不能自定义 CoreDNS/Kube-DNS 配置。
  • 不能使用 docker-in-docker 方式构建镜像。

需求资源

  • NAS 存储
  • Serverless Kubernetes 集群

部署

注册 Runner

获取 registration token

在项目的 settings/ci_cd 页面,或者管理员的 /admin/runners 页面都可以找到 tokentoken 是 Runner 注册的凭证。如果是从项目获取的 token,那么这个 Runner 属于此项目,可以通过配置允许其他项目也可以使用。如果是从管理员页面获取的 token ,那么这个 Runner,所有项目可见,都可以使用,即共享 Runner。

下面以共享的 Runner 为例:

需要获取图中模糊处理的两个参数:

  • URL: https://gitlab.example.choerodon.io
  • Registration token: XXXXXXXXXXXXXXXXXXX

注册 Runner

  • 运行 Runner,进入容器

    docker run -it --rm --entrypoint=bash dockerhub.azk8s.cn/gitlab/gitlab-runner:alpine-v11.8.0
  • 进行注册

    gitlab-runner register
  • 注册成功后查看生成的token

    cat /etc/gitlab-runner/config.toml

执行完上述操作记录 [[runners]] 域下的 token

  • token: **********************

部署 Runner

  • 创建缓存挂载PV/PVC配置文件:cache.yaml (若不需要缓存挂载,请跳过此步骤) PS: 若需挂载多个目录,请按实际情况创建PV、PVC

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: runner-cache-pv
    spec:
    accessModes:
    - ReadWriteMany
    capacity:
    storage: 100Gi
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    nfs:
    path: /cache
    server: abcde.cn-shanghai.nas.example.choerodon.io
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: runner-cache-pvc
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 100Gi
    volumeName: runner-cache-pv
  • 在触发 CI 流程时,Runner 会在 Kubenertes 集群中创建对应的 Pod 执行任务,故需要集群权限,复制 kubeconfig 文件中的信息,将对应值粘贴到对应字段创建 Secret,这里不再累述。最后 Runner 引用到这个 Secret 用以认证,编写文件serverless-runner-kubeconfig.yaml

    apiVersion: v1
    kind: Secret
    metadata:
    name: serverless-runner-kubeconfig
    type: kubernetes.io/tls
    data:
    ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUq......
    tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR......
    tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQp......
  • 编写 Runner 配置文件:serverless-runner-config.yaml

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: serverless-runner-config
    data:
    config.toml: |
    # 可同时并发执行任务的数量
    concurrent = 10
    check_interval = 0
    [[runners]]
    name = "runner"
    url = "https://gitlab.example.choerodon.io"
    # [[runners]] 域下的 token
    token = "**********************"
    executor = "kubernetes"
    # 日志大小限制
    output_limit = 51200
    # 常用固定环境变量
    environment = ["CHOERODON_URL=http://api.example.choerodon.io",
    "SONAR_URL=http://sonarqube.example.choerodon.io"]
    [runners.kubernetes]
    # kubeconfig 文件中的 apiserver 访问地址
    host = "https://abcde.serverless-1.kubernetes.cn-shanghai.example.choerodon.io:6443"
    # 对应上面创建的 Secret
    cert_file = "/etc/gitlab-runner/tls.crt"
    key_file = "/etc/gitlab-runner/tls.crt"
    ca_file = "/etc/gitlab-runner/ca.crt"
    namespace = "default"
    pull_policy = "always"
    # 由于 Serverless Kubernetes 使用有规格约束,故在 Pod 资源申请与限制应按相应规格进行设置,本例为 4c8g
    cpu_limit = "3750m"
    cpu_request = "3750m"
    memory_limit = "7680Mi"
    memory_request = "7680Mi"
    helper_cpu_limit = "250m"
    helper_cpu_request = "250m"
    helper_memory_limit = "512Mi"
    helper_memory_request = "512Mi"
    helper_image = "dockerhub.azk8s.cn/gitlab/gitlab-runner-helper:x86_64-4745a6f3"
    [runners.kubernetes.pod_annotations]
    # 未购买 snat 可挂载 eip 使得 CI Job 可以访问公网资源,例如阿里云使用以下 annotation
    # "k8s.aliyun.com/eci-with-eip" = "true"
    [runners.kubernetes.volumes]
    # 挂载缓存目录(可选)
    [[runners.kubernetes.volumes.pvc]]
    name = "runner-cache-pvc"
    mount_path = "/cache"
    readonly = false
    # [[runners.kubernetes.volumes.pvc]]
    # name = "runner-maven-pvc"
    # mount_path = "/root/.m2"
    # readonly = false
  • 编写 Runner manifest 文件:serverless-runner.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: serverless-runner
    spec:
    selector:
    matchLabels:
    app: gitlab-runner
    template:
    metadata:
    labels:
    app: gitlab-runner
    spec:
    containers:
    - image: dockerhub.azk8s.cn/gitlab/gitlab-runner:alpine-v11.8.0
    imagePullPolicy: IfNotPresent
    name: runner-gitlab
    volumeMounts:
    - mountPath: /etc/gitlab-runner
    name: config
    volumes:
    - name: config
    projected:
    defaultMode: 420
    sources:
    - secret:
    items:
    - key: ca.crt
    path: ca.crt
    - key: tls.crt
    path: tls.crt
    - key: tls.key
    path: tls.key
    name: serverless-runner-kubeconfig
    - configMap:
    items:
    - key: config.toml
    path: config.toml
    name: serverless-runner-config
  • 应用配置

    • 创建PV/PVC (可选)
      kubectl apply -f cache.yaml
    • 应用 Runner
      kubectl apply -f serverless-runner-kubeconfig.yaml -f serverless-runner-config.yaml -f serverless-runner.yaml

不能自定义CoreDNS/Kube-DNS配置

自定义CoreDNS/Kube-DNS配置是为了让集群内部应用不通过公网访问同一VPC下的其他应用直接通过内网即可,比如Gitlab,Harbor等。

例如阿里云官方提供的解决方案是使用privateZone,其他云厂商也有类似的云产品。

不能使用 docker-in-docker 方式构建镜像

使用kaniko进行镜像构建,这里我们将官方镜像中的可执行文件复制到自己的CI镜像中即可使用,Dockerfile如下。

FROM gcr.azk8s.cn/kaniko-project/executor:v0.18.0 AS kaniko
FROM registry.cn-shanghai.aliyuncs.com/c7n/cibase:0.9.1
COPY --from=kaniko /kaniko/executor /usr/bin/kaniko

这是有build好可直接使用的镜像:

registry.cn-shanghai.aliyuncs.com/c7n/cibase:0.10.0
  • 待友好解决的问题:执行kaniko后会出现Deleting filesystem...操作,导致执行完kaniko后不能再执行其他命令,在CI中可以再分出一个stage来规避这个问题。

· 13 分钟阅读

作者 | Rebecca Pruess

编译 | 毛智伟

随着 DevOps 理念的普及与扩散,大家经常会看到持续集成(Continuous Integration)与持续交付(Continuous Delivery)这样的字眼,而怎样使用与选择这些方法成了大多数 IT 团队必须面对的问题。在讨论更加深入地讨论问题之前,首先需要清楚这两者之间的主要区别是什么,以及用什么方法可以更好改善工作流程,从而在更短的时间内为目标用户提供更高质量的软件。

devops

持续集成(CI)和持续交付(CD)都体现了如今快节奏市场中的文化和发展原则,旨在缩短开发周期、提高软件交付效率以及实现全流程的自动化。同时,两者都有着共同的目标:让软件开发更少地依赖于手动执行的任务,在此基础上使得软件的发布更加频繁、更加安全可靠。由于有着相同的目标,因此持续集成和持续交付并非相互排斥的。只是它们的应用范围有所不同。

那下面就来看下 CI 与 CD 之间的联系与区别。

什么是持续集成

如上所述,CI 和 CD 是相互关联的。持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。由此可见,CI 专注于定期地让开发人员构建小批量的代码。而对于更新或新增的代码,它们会被上传至统一的代码库,执行自动构建与自动化测试的步骤。 频繁地向主干提交代码,意味着可以针对整个软件执行所有的自动化测试,并且在应用或接口的某个部分出现问题时,及时收到告警信息。

由于合并问题能被及时发现,因此也能被及时解决。此外,由于测试过程采用的是自动化测试,因此最终的主干分支一直处于可发布的状态。而这对传统的瀑布式的开发流程来说就很棘手。遵循 CI 中定义的原则,有助于进一步提高代码的可测试性和可部署性。通过将代码保持在可部署状态,就能避免在项目后期才进行单独的测试和 Bug 的修复,由此使得开发人员避开了“集成地狱”。而这也是 Choerodon 猪齿鱼开发流水线模块的主要目的。

ci

什么是持续交付

持续集成包含了构建与自动化测试的阶段,而持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的“类生产环境”之中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。此外,持续交付同样遵循一个小型的构建周期,可以将一小批代码推送到多个环境:开发,测试或生产。

在此过程中,它结合了持续集成和持续部署的实践(即:让主干始终处于可部署状态)。而在 Choerodon 猪齿鱼平台中,当提交的代码完成以上步骤后,可以在“部署流水线-流水线管理”中创建对应的 CD 流水线将持续集成后产生的应用版本自动部署到对应的环境中去。此外,对于部署到正式环境的代码,可以在流水线中间添加一个人工卡点任务,只有通过人工审核后,才能执行后续的自动部署任务。

ci

理论上来说,CD 使得 IT 团队可以每天发布与更新应用程序,但大多数 IT 团队选择每月或每两个月发布更完整的更新。

持续集成与持续交付的区别

CI 和 CD 之间的区别在于使用的范围和主要的受益者。

(1)持续集成

持续集成对于加快编码和构建阶段的软件交付过程至关重要。因此,它的目标对象主要是开发人员,特别是那些处在复杂组织架构中的开发人员。通过自动构建和测试的流程,将对软件做的所有更改都集成到统一的代码库中,而无需进行手动任务。此外,由于 CI 是一个持续的过程,因此开发人员可以即时得到问题的反馈。他们可以实时获取到相关错误的信息,以便快速地定位与解决问题。显然这个过程可以大大地提高开发人员以及整个 IT 团队的工作效率。

(2)持续交付

持续交付涵盖了软件交付生命周期的绝大部分,能为目标用户和客户带来重大利益。CD 中包含了自动构建,打包,部署与测试的流程,以此来减少手动任务并加快软件交付速度。小批量的代码成功完成整个流程的每个阶段后,目标用户或客户便能在类生产环境中进行验收。因此目标用户可以在几天或几周内就收到修复后的功能与新增的功能,而无需等待数月后才更新。

CD 的部署频率也加快了整个流程中的反馈循环。最新版本真的解决了预期的问题吗?是否满足了用户的需求?在此用户就可以快速地验收并作出判断,而 IT 团队也可以在问题影响到开发周期之前就解决反馈的问题。持续的反馈循环使得用户与 IT 团队更紧密地合作,以确保能准确的理解与满足他们的需求。整个交付过程进度可视化,方便团队人员与客户了解项目的进度。

在当前快节奏的市场中,这无疑是一个重大的优势。当您将软件更快地推向市场时,您将获得更大的竞争优势。

CI 或 CD 适合您的业务场景吗

持续集成可确保代码库中始终保持最新的代码,同时可以快速集成来自多个开发人员的代码,并确保这些代码可在多个环境中协同工作。它通常有助于减少错误并通过自动化流程来减少手动任务。CI 可以实现代码的自动构建与测试,减少开发中的 Bug。因此,CI 适用于那些过度依赖手动任务和复杂构建过程的企业。

持续交付适用于需要缩短开发周期,更快地为目标用户提供软件的企业。CD 降低了部署新软件或升级已有软件的难度,且实现了全流程的自动化,因此您的团队无需手动执行复杂繁琐的任务,从而加快反馈速度,来确保您增加的功能真正地满足用户的需求。

总而言之,CI 和 CD 是相互补充的。CI 的统一代码库和自动化测试的方法可用于支持 CD 中更大规模的自动化和更频繁的部署。因此将 CI 和 CD 结合到您开发与交付的流程中,会使您的 IT 团队更加敏捷,更加快速地开发。

目前,大多数 CI / CD 的工具采用的方法都大同小异。 而一般的 DevOps 工具通常都会支持 CI 和 CD 方法,相应地还会提供相关的自动化测试框架。Choerodon 猪齿鱼平台中的 DevOps 模块便是结合了 CI 与 CD 的方法,并在此基础上实现了测试与部署的自动化。用户需要根据自己的实质需求来创建 CD 流水线,以此来实现不同环境不同版本类型的自动化部署;当然,您还可以在其中设置人工卡点任务,使得 CD 流水线随时处于人工的监控之下。

此外,也有不少人认为 CI 是 CD 的前提与基础,没有 CI 就不能实现 CD。这种说法也是比较流行的,其思路如下图。因此,不管是哪种说法,CI 与 CD 都是 DevOps 工具中不可或缺的理念与方法。

Devops Flow

原文地址: https://dzone.com/articles/continuous-integration-vs-continuous-delivery

更多 Choerodon 猪齿鱼持续交付相关文章 ▼

关于猪齿鱼

Choerodon 猪齿鱼是一个全场景效能平台,基于 Kubernetes 的容器编排和管理能力,整合 DevOps 工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理的平台,同时提供 IoT、支付、数据、智能洞察、企业应用市场等业务组件,致力帮助企业聚焦于业务,加速数字化转型。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

· 4 分钟阅读

什么是猪齿鱼

Choerodon 猪齿鱼 是一个全场景效能平台,是基于 Kubernetes,Istio,knative,Gitlab,Spring Cloud 来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台通过提供精益敏捷、持续交付、容器环境、微服务、DevOps 等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

公开课有什么?

本次使用培训公开课直播将讲解 Choerodon 猪齿鱼的几大核心功能的使用,详情如下:

5 月 27 日

Choerodon 猪齿鱼敏捷管理

  1. 敏捷理论的概要介绍
  2. 需求的收集及记录
  3. 迭代的规划
  4. 迭代的执行
  5. 数据查看及分析

Choerodon 猪齿鱼大规模敏捷

  1. 项目群管理的使用场景
  2. 什么是敏捷发布火车
  3. PI 的规划以及目标
  4. 项目群与各团队之间的项目协作

5 月 28 日

Choerodon 猪齿鱼持续交付

  1. Choerodon 猪齿鱼 DevOps 方法讲解
  2. Choerodon 猪齿鱼 DevOps 架构讲解
  3. Choerodon 猪齿鱼 DevOps 功能演示

5 月 29 日

Choerodon 猪齿鱼测试管理

  1. 测试用例维护
  2. 测试计划
  3. 执行测试
  4. 测试报表分析
  5. 自动化测试

三天三节课,各大模块**研发工程师和产品经理**亲自讲解。

直播平台

IT 大咖说(搜索 Choerodon 猪齿鱼收藏直播间)

关于猪齿鱼

Choerodon 猪齿鱼是一个全场景效能平台,基于 Kubernetes 的容器编排和管理能力,整合 DevOps 工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理的平台,同时提供 IoT、支付、数据、智能洞察、企业应用市场等业务组件,致力帮助企业聚焦于业务,加速数字化转型。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

· 15 分钟阅读

Choerodon Agent是支撑Choerodon平台持续交付部署流水线的一个核心组件,负责将平台生成的部署文件应用到应用部署环境对应的Kubernetes集群之中。并实施返回各个应用实例以及应用实例下所有资源的最新状态信息,同时通过监听各个环境对应的部署文件Git库,执行CD操作。而且支持混合云以及多云作为平台的部署环境,通过返回回来的容器信息和反馈回来各个实例下的容器,还可以实时获取容器日志,以及容器exec执行远程命令。

Choerodon持续交付可以支持任意数量的集群加入平台,作为应用的部署环境,只要将平台中生成的Agent安装脚本在任意Kubernetes集群中执行,就可以将该集群加入平台,然后在平台上创建环境时可以选择该集群,可以一键创建环境。在同一个集群中可以创建多个环境,各个环境之间通过Kubernetes的命令空间隔离。

平台初始化部署集群只需要将平台生成的Agent安装脚本在Kubernetes环境中执行。Agent在集群中安装之后便可以在该集群中创建环境。作为项目应用的部署环境。

创建集群之后,平台会提供一份激活指令,将指令粘贴至Kubernetes集群中执行,成功后集群就连接成功了。在平台的界面上集群显示的状态也为运行中。下图所示脚本就是Agent的激活指令。

helm install --repo=http://chart.choerodon.com.cn/choerodon/c7ncd/ \
--namespace=choerodon \
--name=choerodon-cluster-agent-test \
--version=2018.12.10-112732-master \
--set config.connect=ws://devops.com.cn/agent/ \
--set config.token=dccf4539-43e7-4970-a2d4-271267850d67 \
--set config.clusterId=21 \
--set config.choerodonId=434ha8v7sz90 \
--set rbac.create=true \
choerodon-cluster-agent

集群连接成功之后,可以在环境流水线管理界面,选择相应的集群一键创建环境。创建环境时,平台会给Agent发送一条指令,让Agent创建相应命令空间,并拉去初始化环境对应的Git库,开始准备同步。

环境创建成功之后相关持续交付的部署操作即可选择该环境作为目标环境,进行应用部署,网络、域名、证书的创建。所有操作都将发送至Agent由Agent执行,所对应资源对象状态的变更也有Agent传输回来,进行实时展示。

实现分析

基于以上的这些功能目标,而且考虑到Choerodon Agent作为一个连通持续交付平台和Kubernetes集群的代理客户端,需要具备实时性、稳定性和高性能,所以决定用go语言实现,充分利用go轻量高效的特性。使用go作为开发语言,可以便捷的使用client-go,helm client等现成工具库开发CD相关操作。由于需要实时监听,实时反馈,等特性,Agent与DevOps之间的交互采用WebSocket长连接。并且使用客户端的方式,不提供对外暴露访问接口,充分保证安全性而且不需要集群提供对外暴露访问接口。

用户在平台中创建环境时同时会创建一个与环境对应的Git仓库用来存放部署配置文件,之后所有在环境中部署相关操作,都会转化为Git库中部署配置文件的操作,用户在平台界面操作部署或者直接推送部署文件至Git库都会触发Git库配置的Webhook,之后继续交付微服务拉取最新提交,解析并生成tag,然后通知环境客户端去执行环境对应Git库中最新的变更。环境客户端收到持续交付服务通知后,执行最新一次的tag,执行完毕后生成执行tag,当环境的最新提交Commit sha,与持续交付服务解释tag的sha,与环境客户端执行的tag sha一致时,表示最新的操作或者提交都已经应用到环境。

  1. 用户可以通过直接向Git库提交和在界面上进行相关部署操作,在GitOps中,界面上进行的部署操作都会先直接修改环境对应的部署文件Git库。例如一个应用实例版本更新部署操作对应在部署文件中的提交如上图。

  2. 部署文件Git库产生提交后,git库中的webhook随机触发,将变更发送至DevOps服务

  3. DevOps服务拉取库中最新提交,与上一个tag版本进行比较,根据比较结果分别生成创建、更新、删除记录,重新生成tag。

  4. 通知对应环境Agent拉取DevOps服务最新解析tag。

  5. Agent从部署库中拉取最新DevOps解析tag。

  6. 并根据部署库文件,与环境中真实部署的对象列表进行比较,然后在环境执行创建、更新、删除操作。执行完成后将执行结果发回至DevOps服务。

具体设计

Choerodon Agent通过WebSocket Client与外部的猪齿鱼部署服务进行连接、执行命令等交互。内部通过Helm客户端与Kubernetes集群。

内部的tiller server执行Chart安装删除等操作,并且通过Kube Client直接对Kubernetes各种资源对象进行操作,监听各资源对象的状态变更。

通过长连接及时通知部署服务。Choerodon Agent和部署服务之间的交互采用Command/Response模式,启动时立即向部署服务建立连接,接收Command执行并返回结果Repsonse。作为WebSocket Client将Command通过Channel不断的发送至执行器,执行器Worker是一个可伸缩配置的工作线程/协程池,执行后将结果通过Channel给Websocket Client写回。具体实现可主要分为如下几个主要功能块。

建立连接初始化信息

Agent启动时立即与DevOps服务建立WebSocket长连接,通过Websocket Client立即与DevOps服务建立WebSocket长连接,连接成功之后,DevOps服务集群的初始化信息从WebSocket发送至Agent、Agent根据初始化信息,启动Controller监听对应的命名空间,对集群下的每个GitOps环境库启动Git库同步程序。初始配置信息包含对各个环境Git库的SSH配置,如下所示。

 Host c7n-agile-prod
HostName code.choerodon.com.cn
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
IdentityFile /rsa-c7n-agile-prod
LogLevel error
Host c7n-tm-prod
HostName code.choerodon.com.cn
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
IdentityFile /rsa-c7n-tm-prod
LogLevel error

Command/Response模式

Agent不断从长连接中读取命令,也不停的从Channel中读取返回结果写至长连接中,命令解析出来之后通过Channel发送至Worker,然后在Worker中通过K8S Client或者Helm Client执行相应命令。执行成功之后将结果再通过Channel发回至 Agent Websocket Client,Client将结果通过长连接发送回DevOps。

实时状态反馈

通过Controller机制监听实例下的各个Kubernetes资源对象、只要有对象创建、更新或者删除、Controller中就会监听到,在Controller监听到对应的资源对象之后,判断,并实时反馈传输回DevOps服务。

func NewpodController(podInformer v1_informer.PodInformer, responseChan chan<- *model.Packet, namespaces *manager.Namespaces) *controller {
c := &controller{
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "pod"),
workerLoopPeriod: time.Second,
lister: podInformer.Lister(),
responseChan: responseChan,
namespaces: namespaces,
}

podInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: c.enqueuepod,
UpdateFunc: func(old, new interface{}) {
newpod := new.(*v1.Pod)
oldpod := old.(*v1.Pod)
if newpod.ResourceVersion == oldpod.ResourceVersion { return
}
c.enqueuepod(new)
},

DeleteFunc: c.enqueuepod,
})
c.podsSynced = podInformer.Informer().HasSynced
return c

}

Helm Operator

将Chart应用实例通过K8S自定义对象描述出来,执行创建或者修改实例时候,先创建相应实例对应的文件或者修改应用实例在Git库中对应的文件,Controller中监听到这些文件的变化之后在通过文件执行相应的Install或者Upgrade操作。保证环境中实例的状态与描述文件的状态一致。

---
apiVersion: choerodon.io/v1alpha1
kind: C7NHelmRelease
metadata:
name: choerodon-front-devops-5c483
spec:
chartName: choerodon-front-devops
chartVersion: 0.11.0
repoUrl: http://chart.choerodon.com.cn/choerodon/c7ncd/
values: |-
env:
open:
PRO_HEADER_TITLE_NAME: Choerodon1

GitOps

在GitOps中针对每个环境,在Agent初始化之后,将各个环境Git库SSH配置创建出来、并将Git库通过SSH拉至本机,检测是否有权限创建和删除tag,定时拉取最新的提交、同时在收到DevOps服务执行指令后,将最新的提交版本中的所有K8S资源文件执行至环境对应的命令空间之中。

状态同步与修复

由于Agent和DevOps服务之间连接交互采用长连接,可能出现由于网络或者其他原因导致消息丢失,从而产生预期与实际的状态不一致。所以增加了状态同步和修复的机制。保证一致性。当网络连接断开重新连接之后,各个Controller重新同步各类Kubernetes资源,使DevOps服务中各类资源对象的状态与实际情况保持一致,避免环境中的各实例资源状态与平台中展示的不一致.同时Devops服务会定时将一些超过一段时间还处于中间状态的对象发送至DevOps服务查询状态。如果中间Agent发给DevOps的部分消息丢失或者处理失败,造成一些不一致的状态,会通过这个状态修复功能将该对象的状态修复正常,以保证两边的资源状态一致性。

Log和Exec长连接

Agent从长连接中收到Log或者Exec请求指令后,建立一个Pipe,通过K8S Client Log或者Exec相关Api建立与Api Server的长连接,同时通过WebSocket Client 向DevOps请求建立一个长连接,通过这个Pipe中转打通两个长连接。从而实现Log和Exec长连接的中转代理。

总结

Choerodon Agent 自发布以来,经历了一系列优化与改进,不管是易用性还是稳定性都在不断提升,例如应用Chart模板中的资源对象将不用再预先插入平台所需要的标签,每个环境一个Agent客户端改成了一个集群一个客户端。增加了定期同步各资源状态的逻辑,有效地消除了平台中与集群的K8S资源状态的不一致,GitOps流程也越来越稳定。同时也感谢社区的朋友们反馈的一些Bug和建议,一起为产品完善而努力。

关于猪齿鱼

Choerodon 猪齿鱼是一个全场景效能平台,基于 Kubernetes 的容器编排和管理能力,整合 DevOps 工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理的平台,同时提供 IoT、支付、数据、智能洞察、企业应用市场等业务组件,致力帮助企业聚焦于业务,加速数字化转型。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

· 3 分钟阅读

Choerodon猪齿鱼社区的架构师分别介绍了Choerodon猪齿鱼最新版本的各项核心功能,以及后续功能开发计划。比如在DevOps方面,会在已有部署、开发、构建相关的可视化图表基础上,增加新的报表,帮助用户直观了解开发情况。同时会增强分支管理与敏捷管理的任务可追溯性,更好地将开发过程融入项目管理。

双方在交流中,主要探讨了Choerodon使用过程中遇到的一些问题以及开发技巧。票易通团队从不同的角度提出了一些改进意见和需求,Choerodon猪齿鱼将从中汲取这些反馈,归纳出一些可以增加的功能和优化方向。

比如在部署实施方面,将权限进一步细化到单个应用、单个环境级别,使项目下的每个环境和应用可以单独授权给不同的成员;微服务方面,增加工具来进行K8S容器的监控和管理;基础组件应用方面,优化基础组件调度问题等。

本次两个团队的技术交流是Choerodon猪齿鱼社区首个团队面对面交流活动,Choerodon猪齿鱼社区致力于促进Choerodon猪齿鱼平台的创新与应用,提供分享与交流的平台,来帮助开发人员更好地了解和应用Choerodon猪齿鱼,使企业能够更快地构建出色的产品,最终实现敏捷化的应用交付和自动化的运营管理。

关于信息

欢迎通过我们的GitHub猪齿鱼社区进行反馈与贡献,帮助Choerodon猪齿鱼不断成长,我们将持续迭代优化,敬请期待。

· 4 分钟阅读

2018年DevOps国际峰会暨DevOps金融峰会深圳站将于11月2日-3日在深圳举办,Choerodon猪齿鱼社区高级架构师蒋尚勤将作为企业专场的嘉宾,带来《基于Choerodon猪齿鱼构建企业IT研发体系》的分享。

演讲主题

《基于Choerodon猪齿鱼构建企业IT研发体系》

嘉宾

蒋尚勤

华润置地信息管理部技术总监 & Choerodon猪齿鱼社区高级架构师

具有丰富的复合型的从业经验,在中大型企业研发领域深耕10年,包括技术研发、商务套件实施以及技术团队管理,对传统企业内部IT的特征有深刻理解,对Agile/DevOps在传统企业实施落地有丰富的经验,成功主导了多个中大型企业技术路线的转型重塑,以及研发体系的构建。目前致力于生态在企业的推行和应用,作为Choerodon猪齿鱼社区核心成员和高级架构师,参与猪齿鱼社区的建设和产品设计,并积极推进猪齿鱼平台在企业数字化服务中的实践应用。

主题简介

从华润置地实践经验入手,基于Choerodon猪齿鱼构建华润置地IT研发体系,分享在实际业务场景中 Agile/DevOps 理念的落地和实践,介绍如何使用Choerodon构建高效和标准化的DevOps交付流水线,以及猪齿鱼如何融入生态。

内容提要
  • 发现猪齿鱼,善用工具之力
  • 借力猪齿鱼,打造DevOps交付流水线,构建精益IT研发体系
  • 拥抱猪齿鱼,融入大生态

关于信息

欢迎通过我们的GitHub猪齿鱼社区进行反馈与贡献,帮助Choerodon猪齿鱼不断成长,我们将持续迭代优化,敬请期待。

· 6 分钟阅读

随着企业业务创新和应用复杂度的升高,传统的“瀑布式开发模型”面临着需求变更、过度开发、适应性不强等诸多问题,亟待改善。不仅如此,企业内部程序复杂,业务发展快,开发效率也逐渐变得愈发重要。

本次直播将介绍Choerodon猪齿鱼如何助力华润置地实现中台化转型,基于真实案例和实践经验,讲解Choerodon猪齿鱼如何帮助企业利用微服务和容器技术构建中台架构体系,打造以Choerodon猪齿鱼为核心的敏捷研发体系,聚焦业务,快速迭代,持续交付。

华润置地架构转型背景

华润置地有限公司是财富500强企业华润集团旗下的地产业务旗舰,是中国内地最具实力的综合型地产发展商之一,主营业务包括房地产开发、商业地产开发及运营、物业服务等。

华润置地一直重视企业的信息化建设,从最早期的采用ERP套件,到后面自主研发的一系列“烟囱式”应用,应用之间相互独立,系统功能重合,架构各异,伸缩扩展能力有限,服务器及人力资源浪费严重,产品交付周期长,运维工作繁重。

引入Choerodon猪齿鱼后,统一开发框架和平台,新的系统尽量采用微服务方式开发,基于敏捷迭代研发的思想,一般几周便可快速上线系统,部署周期从数周减少到几分钟,应用交付的效率提高了数十倍,容器平台由专门团队运维,项目组只需要专注于业务需求和交付,极大的降低了日常的运维成本,产品在设计、开发、运维等各个阶段均有改善。

Choerodon猪齿鱼是什么

Choerodon猪齿鱼 是一个全场景效能平台,基于Kubernetes的容器编排和管理能力,整合DevOps工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理,并提供IoT、支付、数据、智能洞察、企业应用市场等业务组件,来帮助企业聚焦于业务,加速数字化转型。

此次直播分享有什么?

本次直播主要介绍华润置地中台转型背景及落地过程。

主要内容包括:
  • 华润置地中台转型背景和架构体系介绍
  • Choerodon在华润置地的部署架构及业务架构
  • 转型过程
    • 单体应用架构向微服务应用架构转变
    • 传统部署架构向容器部署架构转变--DevOps落地实践
    • 瀑布式研发向敏捷迭代式研发方式转变
  • 实践经验总结
直播时间
10月15日(周一)下午 14:00
直播地址

欢迎各位提前报名

关于信息

欢迎通过我们的GitHub猪齿鱼社区进行反馈与贡献,帮助Choerodon猪齿鱼不断成长,我们将持续迭代优化,敬请期待。

· 5 分钟阅读

什么是猪齿鱼

Choerodon猪齿鱼 是一个全场景效能平台,基于Kubernetes的容器编排和管理能力,整合DevOps工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理,并提供IoT、支付、数据、智能洞察、企业应用市场等业务组件,来帮助企业聚焦于业务,加速数字化转型。

直播培训有什么?

本次直播培训将讲解和分享Choerodon猪齿鱼的核心功能和应用实践。

8月14日

Choerodon 猪齿鱼敏捷管理

  1. 敏捷相关概念
  2. 敏捷流程
  3. 敏捷会议
  4. 如何结合猪齿鱼平台进行敏捷管理

Choerodon 猪齿鱼持续交付

  1. 项目的创建
  2. 项目角色的分配
  3. 应用管理
  4. 开发流水线
  5. 应用版本
  6. 部署流水线
  7. 应用发布
  8. 应用市场
  9. 应用导入导出及相关资源扫回逻辑

8月15日

Choerodon猪齿鱼后端微服务开发

  1. Choerodon微服务框架介绍
  2. Choerodon环境搭建
  3. 如何根据模板创建应用
  4. 文件结构讲解
  5. CI/CD
  6. starters介绍
  7. 初始化数据库
  8. 实体类映射
  9. 接口编写
  10. 权限配置
  11. 服务注册
  12. 路由配置
  13. 开发模式介绍

8月16日

Choerodon猪齿鱼测试管理与知识管理

测试管理

  1. 测试用例
  2. 测试循环
  3. 测试执行
  4. 执行结果与缺陷关联
  5. 报表的使用
  6. 状态自定义

知识管理

  1. 空间的创建和其他操作
  2. 文档的创建和编辑
  3. 文档交互

Choerodon猪齿鱼前端开发

  1. 开发环境搭建
  2. 开发新模块
  3. 开发新页面

直播平台

IT大咖说(搜索Choerodon猪齿鱼收藏直播间)

关于猪齿鱼

Choerodon 猪齿鱼是一个全场景效能平台,基于 Kubernetes 的容器编排和管理能力,整合 DevOps 工具链、微服务和移动应用框架,来帮助企业实现敏捷化的应用交付和自动化的运营管理的平台,同时提供 IoT、支付、数据、智能洞察、企业应用市场等业务组件,致力帮助企业聚焦于业务,加速数字化转型。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献: