如何將現有的外部代碼庫導入到豬齒魚中

本篇將爲你們介紹如何將應用導入到 Choerodon 豬齒魚。Choerodon 平臺上導入應用有兩個入口,第一個入口在應用管理頁籤內,是從 gitlab/github 導入應用,第二個入口在應用市場中,能夠在其它平臺的應用市場導出後再導入。mysql

爲何要從外部代碼管理平臺導入應用

Choerodon 平臺最開始發佈的版本中只有應用市場的導入功能,後來在版本迭代中,愈來愈多的用戶開始搭建並使用了 Choerodon 平臺,其中包含了不少其餘軟件公司。並且這些軟件公司有一個共同點,在瞭解 Choerodon 平臺以前,他們的平常開發,產品的迭代已經使用上了 gitlab,因此他們的代碼倉庫都存在已有的 gitlab 上。linux

因爲 Choerodon 平臺與 gitlab 的高度耦合,Choerodon 平臺的組織、項目、用戶等都和 gitlab 的組、用戶等資源一一對應的。Choerodon 的數據庫中存了大量二者的中間關係表。因此 Choerodon 通常不建議直接將已有的 gitlab 遷移到 Choerodon 的 gitlab,一方面,gitlab 版本不一致,可能致使遷移失敗;另外一方面,中間會缺乏不少關鍵數據,嚴重影響後續的其餘功能。在 Choerodon 社區中也有不少用戶自行寫了腳本去遷移,或者直接遷移數據庫,遷移的過程步驟很繁瑣複雜,都或多或少出現了問題,出於此,Choerodon 纔開發了從 gitlab 或者 github 導入應用到 Choerodon 平臺的功能。git

在介紹應用導入方法以前,先簡單介紹一下應用的代碼倉庫組成。github

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 包,導入成功以後,會生成一個沒有代碼倉庫的應用,同時給該應用生成指定的版本。但不能對該應用進行開發生成新版本,應用部署時只能部署導入應用的指定版本。web

爲何應用市場中能夠導入應用

在本身的平臺中,若是開發者的一個服務依賴於 mysql,可是自身平臺下並無開發部署 mysql 的團隊,若此時剛好另一個平臺開發了 mysql 應用,就能夠在本身的本地下新建一個 mysql 應用,把另一個平臺的 mysql 代碼倉庫拷貝過來,而後生成版本部署供本身使用。sql

這個過程很麻煩很繁瑣,並且在一段時間內,開發者不會對這個應用進行開發,只須要使用,除非有版本大的更新,這大大消耗了人力物力。Choerodon 的部署是基於 helm chart 的,部署應用只須要對應版本的 chart 包 ,若是提供一個上傳下載 chart 包的途徑,就能直接拿到 mysql 的 chart 包,而後上傳到本身的 chartmusume 倉庫中,就能夠在本平臺進行部署了 。基於這個緣由,有了豬齒魚應用市場以及應用的導出導入功能。docker

應用市場導入導出的原理

當其餘 Choerodon 平臺一個應用發佈到應用市場以後,能夠選擇導出應用的一個版本或多個版本的 chart 包(從 chartmusume 倉庫中下載下來)和應用的相關信息 json 文件,以及各應用版本的 docker 鏡像信息,將其打包成一個 zip 文件。數據庫

而後在本 Choerodon 平臺中,將以前導出的 zip 導入,此時會解壓該 zip 包 ,將其中的應用以及應用版本信息存入數據庫中,將其中的 chart 包上傳到本平臺的 chartmusume 中,將應用版本的 docker 鏡像從其它平臺的 harbor 庫拉取下來,並推送到本身的 harbor 倉庫中(若是其它平臺鏡像不是公開的)。json

以後就能夠在本平臺對於該應用的特定版本進行部署了,簡單示例圖以下:windows

應用管理中的導入應用

應用管理裏面導入的應用是指從外部代碼管理平臺(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 豬齒魚做爲開源多雲應用敏捷全鏈路技術平臺,是基於開源技術Kubernetes,Istio,knative,Gitlab,Spring Cloud來實現本地和雲端環境的集成,實現企業多雲/混合雲應用環境的一致性。平臺經過提供精益敏捷、持續交付、容器環境、微服務、DevOps等能力來幫助組織團隊來完成軟件的生命週期管理,從而更快、更頻繁地交付更穩定的軟件。

更加詳細的內容,請參閱Release Notes官網

你們也能夠經過如下社區途徑瞭解豬齒魚的最新動態、產品特性,以及參與社區貢獻:

歡迎加入Choerodon豬齒魚社區,共同爲企業數字化服務打造一個開放的生態平臺。

本篇文章出自 Choerodon豬齒魚社區朱智陽。
相關文章
相關標籤/搜索