作法:推送/合并以将主档案提交/推送至另一个专案

时间:2019-05-22 18:04:23

标签: git gitlab githooks

当用户合并到母版时,将那些文件合并到该用户无权访问的另一个项目母版中。我为非技术用户提供了编辑一些配置文件的权限,然后我将它们通过saltstack推送到生产系统。它在同一gitlab服务器上使用不同的项目进行配置。

我认为我需要在初始项目中设置git hook,并且git hook将运行脚本来完成其余的工作,但是我不确定是否可以使用git-cherrypick命令或部署密钥来完成。

用户正在登录gitlab并在gitlab UI中编辑文件,该界面会自动执行提交/合并请求,然后管理员将完成合并请求/合并。

然后我希望可以将这些文件复制到我的saltstack状态/ files /目录中,在该目录中将运行highstate并将配置推送到生产服务器。我只是想缺少自动化的机制,我在git上还是个新手,想知道在我编写一个糟糕的bash脚本来实现它之前是否有git的机制。

2 个答案:

答案 0 :(得分:0)

而不是复制它们,为什么不将gitlab项目用作saltstack的文件后端? 一旦有人批准了合并请求,则1分钟后,您便可以使用新更改运行高级状态。 基本上,这意味着salt-master与gitlab项目建立了连接,并在其中存储了配置文件(和saltstates)。它与使用/ srv / salt相同,但仅在gitlab上使用。这样,您还可以使用git / gitlab在版本控制方面提供的好处。 如果要进行设置,请查看this documentation

在回购之间镜像特定文件方面,我猜您可以尝试使用gitfs并围绕它构建某种形式的管道。 (也许使用CI / CD) 您还可以每分钟通过rsync克隆存储库和snyc。 为此,一个简单的cron脚本可能会有所帮助。该脚本应在每次执行时拉回repo1,将所有内容同步到repo2并将其推送到远程。

希望我能帮上忙。

答案 1 :(得分:0)

这是CFEngine社区的Shell脚本(CFEngine是配置管理工具),用于将文件从VCS中拉出,然后放在CFEngine服务器将其拾取的位置,并提供给其他CFEngine代理以分发给主机: https://github.com/cfengine/core/tree/master/contrib/masterfiles-stage 在CFEngine术语中,“主文件”是从真实来源分发的文件。

您可以考虑在另一个项目(https://docs.gitlab.com/ee/ci/multi_project_pipelines.html)上触发管道作业,但是用户需要对两个项目的访问权限。

另一个可能的选择是git子模块(https://git-scm.com/book/en/v2/Git-Tools-Submodules