git(gitlab)子模块功能在团队协同开发和生产环境中的应用(git,gitlab,TortoiseGit,CI/CD,Jenkins,docker-compose,分支合并,开发环境,测试环境)

git(gitlab)子模块功能在团队协同开发和生产环境中的应用

 

目录

git(gitlab)子模块功能在团队协同开发和生产环境中的应用

 

一、前言

二、先决条件

三、创建gitlab项目(项目管理员操作)

四、关联子模块(项目管理员操作)

五、开发环境提交代码(团队开发人员操作)

六、生产或测试环境合并代码(项目管理员操作)


 

一、前言

gitlab不仅能够提供便捷的CI/CD流程控制的方式,也能为开发团队提供便捷的版本库控制方式。

在多人协同开发时,如果一个大型的开发项目仅使用一个gitlab项目会务必会引起不必要的更新等待,甚至导致整个团队几十号人停工等待漫长更新是正常的事,git的子模块功能能够有效解决这一问题,在一个大项目里面嵌入多个git子模块,化整为零、各个为政,使得开发工作效率更加的高效便捷。

另外,无论代码是否可编译、是否可调试或生产,开发人员每天一次或者多次提交代码至仓库以备版本回滚所需是必要的,也是代码安全备份的一种方式,但必须有别于开发和生产环境,否则一旦触发CI/CD流程那么后果将不堪设想,当然本人也不建议自动触发CI/CD流程。

本文写作目标即为解决前述两种问题。

 

二、先决条件

1、阅读者有一定的git、gitlab操作经验

2、已经安装gitlab(私有或公有云服务器)

3、已经安装git(windows,所有团队成员)

4、已经安装git可视化工具TortoiseGit(windows,所有团队成员),当然您也可在命令行直接使用 git 命令。

git工具可参考下载(git、TortoiseGit、TortoiseGit中文语言包及安装说明):

https://download.csdn.net/download/GuestCode/12713817

 

三、创建gitlab项目(项目管理员操作)

其实 git 子模块也是一个 git 项目,一样具有独立的 pull 和 push 等功能。本文中,我们建立三个 gitlab 项目:TestProject、TestModuleA、TestModuleB,这三个项目仅是命名上的区别而已,其中项目 TestModuleA、TestModuleB 将作为附属在项目 TestProject上 的子模块,TestProject 成为主项目,子模块 TestModuleA、TestModuleB 在 TestProject 项目中并未有真实的物理空间,它们仅是映射关联的关系。

注:有关 gitlab 创建项目的具体操作方法不在本文讨论范围。

1、依次在 gitlab 创建项目 TestModuleA 及自述文件 readme.md,并在 master 分支下创建 dev 分支

2、依次在 gitlab 创建项目 TestModuleB 及自述文件 readme.md,并在 master 分支下创建 dev 分支

3、依次在 gitlab 创建项目 TestProject 及自述文件 readme.md,并在 master 分支下创建 dev 分支

至此,我们演示的三个 gitlab 项目信息如下:

 

四、关联子模块(项目管理员操作)

注:启动 windows 命令行工具,cd 至您需要的测试目录,依次执行以下命令

1、克隆主项目

克隆主项目:

git clone http://192.168.223.100:8929/lusir/testproject.git  

这时当前目录下生成主项目目录 testproject,cd 至主项目目录 testproject:

cd testproject

拉取dev分支:

git pull origin dev 

选择dev分支:

git checkout -b dev origin/dev

 

2、为主项目增加子模块A

在主项目目录 testproject 下执行命令:

git submodule add http://192.168.223.100:8929/lusir/testmodulea.git TestModuleA

这时主项目目录 testproject 下生成子模块目录 TestModuleA,cd 至子模块目录 TestModuleA:

cd TestModuleA

拉取子模块 TestModuleA 的 dev 分支:

git pull origin dev 

选择子模块 TestModuleA 的 dev 分支:

git checkout -b dev origin/dev

返回主项目目录:

cd ..

 

3、为主项目增加子模块B

在主项目目录 testproject 下执行命令:

git submodule add http://192.168.223.100:8929/lusir/testmoduleb.git TestModuleB

这时主项目目录 testproject 下生成子模块目录 TestModuleB,cd 至子模块目录 TestModuleB:

cd TestModuleB

拉取子模块 TestModuleB 的 dev 分支:

git pull origin dev 

选择子模块 TestModuleB 的 dev 分支:

git checkout -b dev origin/dev

返回主项目目录:

cd ..

至此,您的主项目目录结构如下:

testproject
│
├─.gitmodules
├─README.md
│
├─TestModuleA
│ └─README.md
│
└─TestModuleB
  └─README.md

 

4、提交和上传主项目和子模块至远程 gitlab 仓库

在主项目目录 testproject 下执行命令,提交代码至本地仓库:

git commit -am "test commit submodule"

上传代码至远程 gitlab 仓库的 dev 分支:

git push origin dev

至此,我们移步至 gitlab,看到 gitlab上的主项目 TestProject 的 dev 分支信息如下:

注:

1、子模块 TestModuleA 和 TestModuleB 的图标并非是真实的目录图标,它们仅是项目 TestModuleA 和 TestModuleB 的映射。

2、.gitmodules 文件是子模块信息的配置文件。

 

五、开发环境提交代码(团队开发人员操作)

注:团队成员可以使用 TororiseGit 来克隆项目代码,TororiseGit 提供了便捷的右键菜单操作,本文以中文版 TororiseGit 为例,具体操作说明不在本文讨论范围。

1、克隆主项目代码

在本地测试目录下点击右键,选择“git克隆”菜单,克隆主项目,URL 可以从 gitlab 主项目 TestProject 上获取:

克隆主项目代码后,进入主项目目录 testproject,这时尚未拉取子模块代码:

 

2、拉取子模块代码:

在主项目目录 testproject 下,点击鼠标右键选择“git同步”菜单,远端分支请选择 dev,点击“拉取”按钮:

至此,主项目目录下增加了两个子模块的文件夹 TestModuleA 和 TestModuleB:

进入子模块文件夹 TestModuleA 中,目录是空的,点击右键选择“git同步”菜单(团队成员可以根据自己需要,进入子模块文件夹拉取相应的子模块代码),远端分支选择 dev ,然后点击“更新子模块”按钮:

至此,子模块 TestModuleA 代码已经拉取,您可以打开Readme.md看看里面是不是“This is TestModuleA”,子模块 TestModuleA 目录信息如下:

 

3、提交子模块代码:

在子模块T estModuleA 文件夹下新建文件a.txt,内容为 aaaa,模拟开发人员新增代码文件:

点击鼠标右键选择“git提交子模块”菜单,要是“提交至”的信息框里没有分支信息,请勾选“新建分支”并输入 dev ,勾选要提交的文件,点击“提交并推送”按钮(如果“提交并推送”按钮,可以点下图相同位置右边的黑色三角形按钮选择):

如果弹出推送设置窗口,请在“远端”信息框处输入 dev 分支,然后点击“确定”:

移步至gitlab的主项目 testproject 的 dev 分支下,点击 TestModuleA 目录,gitlab自动跳转到TestModuleA项目下:

点击目录 TestModuA 之后自动跳至 项目 TestModuA 项目的下(注意 dev 分支):

点击并编辑a.txt文件,看到如下信息,正是前面开发人员提交的代码 aaaa :

至此,开发团队成员分工开发并提交代码的步骤说明完毕。

 

六、生产或测试环境合并代码(项目管理员操作)

 

1、在 gitlab 主项目 TestProject 信息页面的右边栏,点击“合并请求”:

 

2、点击“新建合并请求”:

3、选择合并源分支为 dev ,目标分支(合并到)为 master,然后点击“Compare branches and continue”:

4、直接点击“Submit 合并请求”:

5、不要勾选“删除源分支”,保留以便继续开发时用,点击“合并”:

6、经过等待之后,合并完成:

7、查看主项目 TestProject 的 master 分支(我们从 dev 分支合并到 master 分支),可以看到子模块 TestModuleA 和 TestModuleB 合并到 master 分支来了:

至此,您可以用 master 分支触发CI/CD流水线了。

注:本人不建议自动触发CI/CD流水线,无论是至生产环境还是测试环境。代码正式提交合并之后,应该由人工再做一次确认之后再手工触发CI/CD流水线。

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现GitLabCI/CD功能,首先需要在GitLab上创建一个项目,并在项目添加一个名为.gitlab-ci.yml的配置文件。然后,你可以使用Java编写一个客户端来连接到GitLab服务器,并触发CI/CD流程。 以下是一个简单的Java GitLab客户端示例代码: ```java import org.gitlab4j.api.GitLabApi; import org.gitlab4j.api.models.Pipeline; public class GitLabClient { private static final String GITLAB_URL = "https://your-gitlab-url.com"; private static final String ACCESS_TOKEN = "your-access-token"; private static final String PROJECT_ID = "your-project-id"; public static void main(String[] args) throws Exception { // Create a GitLabApi instance using your GitLab URL and access token GitLabApi gitLabApi = new GitLabApi(GITLAB_URL, ACCESS_TOKEN); // Trigger a new pipeline for the specified project Pipeline pipeline = gitLabApi.getPipelineApi().createPipeline(PROJECT_ID, "master"); System.out.printf("Pipeline %d has been triggered for project %d\n", pipeline.getId(), pipeline.getProjectId()); } } ``` 在这个例,我们使用gitlab4j-api库来连接到GitLab服务器,并通过调用getPipelineApi().createPipeline()方法触发一个新的CI/CD流程。你需要将GITLAB_URL,ACCESS_TOKEN和PROJECT_ID替换为你自己的GitLab URL,访问令牌和项目ID。 请注意,为了使用GitLab API,你需要在GitLab服务器上生成一个访问令牌,并将其用作ACCESS_TOKEN。此外,你还需要在项目的设置启用CI/CD功能,并在项目根目录创建.gitlab-ci.yml文件以定义CI/CD流程。 希望这个示例可以帮助你开始实现GitLabCI/CD功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值