1、背景
研发gitlab CI/CD时,需要编辑一个整个代码仓库统一的CI/CD流程,用于流程与权限的控制。众所周知,Gitlab的CI/CD流程是通过.gitlab-ci.yml文件配置的。通常,如果用户拉出自己的开发分支,那么该yaml文件也会被用户修改,也就是说用户可以完全不用当前的CI/CD流程而重新自定义自己的流程,越权部署代码,存在极大的安全风险。
2、适用场景
需要利用Gitlab的CI/CD功能,保护.gitlab-ci.yml不被普通用户修改;保护其他CI/CD调用到的相关文件不被用户修改。或推广到保护代码仓库中任意文件。
3、方法论
Gitlab目前并没有直接提供锁定或者保护文件相关的功能,经过充分思考与研究后,采用通过配置服务端钩子(Hook onServer),来检查特定文件是否被修改,如有发生,就拒绝接受用户推到远端的代码以保护文件。
4、开发与实践
- 代码仓库位置
可能位置1:/home/git/repositories//.git
可能位置2:/var/opt/gitlab/git-data/repositories//.git
注意: 代码仓库名称与路径可能被哈希处理了,例如当前测试的gitlab机器上就是这种情况,需要进入@hashed目录,
sh-4.2$ pwd
/var/opt/gitlab/git-data/repositories
sh-4.2$ ls
+gitaly @hashed
sh-4.2$ cd \@hashed/
sh-4.2$ tree
`-- d4
`-- 73
|-- d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git
| |-- branches
| |-- config
| |-- custom_hooks
| | `-- pre-receive
| |-- description
| |-- HEAD
| |-- hooks
| | |-- applypatch-msg.sample
| |

最低0.47元/天 解锁文章
1080

被折叠的 条评论
为什么被折叠?



