搭建Git+Jenkins服务器:裸仓库与非裸仓库该如何选择配置?
适配自动化部署的Git仓库配置方案
方案选择结论
优先选择方案2:服务器端部署裸仓库作为共享中央库,Jenkins侧单独克隆非裸仓库执行构建,这是业内通用的标准化最佳实践,完全不推荐使用非裸仓库作为共享中央库。
方案1(共享库用非裸仓库)的核心问题
- 非裸仓库自带工作区,多人同时推送时极易出现工作区与分支HEAD版本不一致的冲突,甚至会直接覆盖他人提交,不符合共享中央仓库的协作要求
- 若有人直接在服务器上修改非裸仓库的工作区文件,会产生未提交的变更,后续其他人推送时会直接报错,长期运维成本极高
方案2的具体配置方式
服务器端配置(共享中央库)
服务器端仅需创建标准裸仓库作为共享存储,不需要留存可直接读取的源文件:
- 执行命令创建裸仓库:
git init --bare <项目名>.git - 正常配置仓库的访问权限、分支保护规则即可,不需要额外修改仓库配置
Jenkins侧配置
不需要对Git服务器做特殊改造,Jenkins原生支持从裸仓库拉取代码构建:
- 在Jenkins任务的「源码管理」模块,直接填写上述裸仓库的拉取地址即可
- Jenkins执行构建任务时,会自动将裸仓库克隆为非裸仓库到构建节点的本地工作区,自动检出对应分支的完整源文件,正常执行构建、测试、部署流程即可
特殊场景补充
如果确实需要在Git服务器上常驻一份最新的源文件用于其他操作,可以给裸仓库配置post-receive钩子,每次有新推送提交时自动更新指定目录的源文件,钩子示例:
#!/bin/bash git --work-tree=<服务器上存放源文件的绝对路径> --git-dir=<裸仓库的绝对路径.git> checkout -f
内容的提问来源于stack exchange,提问作者Jason Yang
相关产品推荐
相关产品推荐

