阅读 7

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

本篇将为大家介绍如何将应用导入到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等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

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

关注下面的标签,发现更多相似文章
评论