如何在 GitLab EE 的基础上开发
前面说到极狐GitLab是基于 GitLab EE 进行开发的,所以所有的功能都是从 GitLab EE 上继承过去的,而极狐GitLab时常会需要开发自己的功能,而我们不希望通过覆盖的方式去新建一个同名文件来使得 jh/
目录下文件得到加载,而是希望通过加载 ce/
或者 ee/
下的文件来加载 jh/
目录下的文件,以保持与上游 GitLab 的功能同步,并且包含有极狐GitLab独有的功能。
方法
该方法我们简单可以理解为在上游通过特定的方式开辟入口,然后在 jh/
中使用该入口。
要做到上述的行为,我们需要做的事情就是到上游 GitLab 上游仓库 的仓库中为极狐GitLab提供一个入口,例如在 _page.html.haml
模板文件中,我们通过在该文件中添加入口代码。
添加入口
在这我们会需要在 HAML 模板中用到一个 Ruby 里定义的一个比较重要的全局函数 render_if_exists
,详细用法如下:
_page.html.haml
= render_if_exists "shared/footer/global_footer"
上游代码对应位置为 _page.html.haml,对应查看
该代码便会通过上下文查找对应的 views/
文件夹来加载我们需要的这个 _global_footer.html.haml
模板文件,上面说到:
在极狐GitLab的仓库代码中,
jh/
目录下的文件的优先级顺序为jh/
>ee/
>ce/
。在这三个目录同时拥有某个文件时,所有jh/
目录下的文件都会优于其他目录下的文件加载。
-
当极狐GitLab的应用运行时,通过优先加载
jh/
目录下的_global_footer.html.haml
这个模板文件来渲染应用,从而达到功能定制的效果。 -
当上游应用独立运行时,上游应用并没有
jh/
这个目录,那么上游应用将会优先加载ee/
目录下的_global_footer.html.haml
文件,假如ee/
下找不到该文件,则会去加载ce/
下的该同名文件,如果ce/
目录下也没有当前文件,则该方法不会有任何副作用。
使用入口
通过在对应的 jh/
目录下添加 jh/app/views/shared/footer/_global_footer.html.haml
文件,然后添加需要渲染的内容。
该示例代码可以在 _global_footer.html.haml 查看到。