如何将现有的外部代码库导入到猪齿鱼中

本篇将为大家介绍如何将应用导入到 Choerodon 猪齿鱼。Choerodon 平台上导入应用有两个入口,第一个入口在应用管理页签内,是从 gitlab/github 导入应用,第二个入口在应用市场中,可以在其它平台的应用市场导出后再导入。

为什么要从外部代码管理平台导入应用

Choerodon 平台最开始发布的版本中只有应用市场的导入功能,后来在版本迭代中,越来越多的用户开始搭建并使用了 Choerodon 平台,其中包含了很多其他软件公司。而且这些软件公司有一个共同点,在了解 Choerodon 平台之前,他们的日常开发,产品的迭代已经使用上了 gitlab,所以他们的代码仓库都存在已有的 gitlab 上。

由于 Choerodon 平台与 gitlab 的高度耦合,Choerodon 平台的组织、项目、用户等都和 gitlab 的组、用户等资源一一对应的。Choerodon 的数据库中存了大量两者的中间关系表。所以 Choerodon 一般不建议直接将已有的 gitlab 迁移到 Choerodon 的 gitlab,一方面,gitlab 版本不一致,可能导致迁移失败;另一方面,中间会缺少很多关键数据,严重影响后续的其他功能。在 Choerodon 社区中也有很多用户自行写了脚本去迁移,或者直接迁移数据库,迁移的过程步骤很繁琐复杂,都或多或少出现了问题,出于此,Choerodon 才开发了从 gitlab 或者 github 导入应用到 Choerodon 平台的功能。

在介绍应用导入方法之前,先简单介绍一下应用的代码仓库组成。

Choerodon 代码仓库的主要组成

如何将现有的外部代码库导入到猪齿鱼中_第1张图片

  1. 各种开发语言或者开发框架的基础代码
  2. Chart 文件夹:Choerodon 持续交付中的应用部署用的是 K8S(开源的容器集群管理系统),helm 是 K8S 一个软件包管理工具,里面存放了大量的 chart 包,每个 chart 包可以定义各种应用部署所需要的 K8S 对象文件,Chart 文件夹就是用来存放打包成 chart 包的文件。
  3. DockerFile:用来打包应用到镜像中,容器化应用,在各种流行的系统中部署,例如 linux,windows 等。
  4. Gitlab-ci.yaml:gitlab-ci 文件是 gitlab runner 所执行的脚本文件,里面可以定义各种脚本,比如在 Choerodon 中各种应用的打包,以及镜像的生成与推送,chart 包的打包与推送都是放在 gitlab-ci 文件中实现。

应用市场中的应用导入

应用市场里面的应用导入,是指从其他 Choerodon 平台的应用市场中导出应用之后,再在自己的 Choerodon 平台中导入。导入导出的内容是一个 tgz 包,里面包含了应用的一个或多个版本对应的 chart 包,导入成功之后,会生成一个没有代码仓库的应用,同时给该应用生成指定的版本。但不能对该应用进行开发生成新版本,应用部署时只能部署导入应用的指定版本。

为什么应用市场中可以导入应用

在自己的平台中,如果开发者的一个服务依赖于 mysql,但是自身平台下并没有开发部署 mysql 的团队,若此时恰好另外一个平台开发了 mysql 应用,就可以在自己的本地下新建一个 mysql 应用,把另外一个平台的 mysql 代码仓库拷贝过来,然后生成版本部署供自己使用。

这个过程很麻烦很繁琐,而且在一段时间内,开发者不会对这个应用进行开发,只需要使用,除非有版本大的更新,这大大消耗了人力物力。Choerodon 的部署是基于 helm chart 的,部署应用只需要对应版本的 chart 包 ,如果提供一个上传下载 chart 包的途径,就能直接拿到 mysql 的 chart 包,然后上传到自己的 chartmusume 仓库中,就可以在本平台进行部署了 。基于这个原因,有了猪齿鱼应用市场以及应用的导出导入功能。

应用市场导入导出的原理

当其他 Choerodon 平台一个应用发布到应用市场之后,可以选择导出应用的一个版本或多个版本的 chart 包(从 chartmusume 仓库中下载下来)和应用的相关信息 json 文件,以及各应用版本的 docker 镜像信息,将其打包成一个 zip 文件。

然后在本 Choerodon 平台中,将之前导出的 zip 导入,此时会解压该 zip 包 ,将其中的应用以及应用版本信息存入数据库中,将其中的 chart 包上传到本平台的 chartmusume 中,将应用版本的 docker 镜像从其它平台的 harbor 库拉取下来,并推送到自己的 harbor 仓库中(如果其它平台镜像不是公开的)。

之后就可以在本平台对于该应用的特定版本进行部署了,简单示例图如下:

如何将现有的外部代码库导入到猪齿鱼中_第2张图片

应用管理中的导入应用

应用管理里面导入的应用是指从外部代码管理平台(gitlab/github)导入已有的应用到 Choerodon 平台,根据导入时选择的模板类型生成对应的 dockerfile,chart 文件夹,gitlab-ci.yaml 文件。该应用有对应的代码仓库,可以在已有基础上进行开发,并能通过 gitlab 的持续集成生成各种版本,用作后续的部署。

外部应用导入步骤

第一步:应用导入需要填写来源应用的仓库地址,如果之前的代码仓库来源于 github 的仓库,或者 gitlab 的公开仓库,那么不需要填写授权 token,如果是 gitlab 的私有仓库(大部分)则需要填写具有 clone 仓库权限的用户 token。

如何将现有的外部代码库导入到猪齿鱼中_第3张图片

第二步:填写好名称、编码,选择指定的模板(会根据指定的模板找到指定类型的 dockerfile,charts,gitlab-ci.yaml 文件嵌入到已有的代码仓库中)

如何将现有的外部代码库导入到猪齿鱼中_第4张图片

第三步:选择特定项目成员或所有项目成员拥有该应用的权限,用于权限隔离

如何将现有的外部代码库导入到猪齿鱼中_第5张图片

第四步:进行 harbor 仓库和 chart 仓库设置(如无特殊需求,使用默认即可),然后点击导入即可。

如何将现有的外部代码库导入到猪齿鱼中_第6张图片

外部应用导入实现逻辑

首先将填写的源仓库地址使用 jgit,(jgit 提供了一套类似 Git 命令的 Java API,可以方便地在程序中进行 git 操作)克隆到本地缓存中,填写完仓库地址和 token 之后会校验填写的 token 是否有权限克隆,没有权限则会提示无权限。

然后根据填写的编码去 gitlab 对应的组下面创建一个空的 gitlab project(包含 webhook,以及 ci 需要的 token),再根据所选的应用模板类型去将 Choerodon 模板库克隆模板到本地缓存,并找到模板中的 dockerFile 文件,chart 文件夹,gitlab-ci.yaml 文件。

将找到的模板中的文件赋值到源仓库本地缓存的各个分支中(此过程会校验是否存在对应内容,有则不复制)。之后使用 jgit 操作每个分支,git add , git commit,,更换源仓库的远程 remote(远程 remote 地址为之前在 Choerodon 关联的 gitlab 创建的空 gitlab project 仓库地址)。

最后使用 git push 将合并到好代码推送上去,逻辑图大致如下:

如何将现有的外部代码库导入到猪齿鱼中_第7张图片

应用导入成功之后,会将原来代码仓库所有的分支,以及分支所有的 commit 记录导入到新的 Choerodon 平台关联的 gitlab 中,并会在数据库中增加对应的记录,实现应用的无缝迁移。

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

关于猪齿鱼

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

更加详细的内容,请参阅Release Notes官网

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

欢迎加入Choerodon猪齿鱼社区,共同为企业数字化服务打造一个开放的生态平台。

本篇文章出自 Choerodon猪齿鱼社区朱智阳。

你可能感兴趣的:(代码库,gitlab,paas平台,choerodon)