博客列表
/

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

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

作者:朱智阳 全部标签: 技术类
2019年06月24号

本篇将为大家介绍如何将应用导入到 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. 各种开发语言或者开发框架的基础代码

  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 仓库中(如果其它平台镜像不是公开的)。

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

应用管理中的导入应用

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

外部应用导入步骤

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

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

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

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

外部应用导入实现逻辑

首先将填写的源仓库地址使用 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 将合并到好代码推送上去,逻辑图大致如下:

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

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

关于 Choerodon 猪齿鱼

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

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

作者:朱智阳

出处:Choerodon

欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。