最近在搬家github的代码,一个同事在新的环境里,操作PUSH的时候出现了BUG,提示:
remote: GitLab: You are not allowed to push code to protected branches on this project.
这样的错误,一般看上就是权限的问题。
分析问题
用账号登录到github后台去看看吧,发现有个小问题,如下图:
可以看到,右边有个提示图标,出现问题:pipeline failed。可能这个东西大家不是太懂,简单介绍下。
Pipeline介绍
什么是Pipeline? Jenkins Pipeline是一组插件,支持在Jenkins上实现和集成,用于连续发送Pipeline。 Pipeline提供了一组可扩展的工具,用于使用PipelineDSL创建代码的简单传输Pipeline。
通常,此"Pipeline代码"会写入Jenkinsfile项目的源代码控制存储库
为什么是Pipeline? Jenkins基本上是一个支持多种自动化模式的自动化引擎。 Pipeline为Jenkins添加了强大的自动化工具,支持从简单的连续集成到完整的连续运输Pipeline用例。 通过建模一系列相关任务,用户可以利用Pipeline的许多功能。
代码: Pipeline实现为代码,通常检入源代码控制,允许团队编辑、审阅和重复传输过程。
耐久性: Pipeline可以在计划和意外重新启动Jenkins管理时同时存在。
Pausable:Pipeline也可以停止并等待手动输入或批准,然后继续运行Pipeline。
多功能: Pipeline支持复杂的现实世界中的持续交付要求,包括并行分支/连接、环路和工作执行能力。
可扩展: Pipeline插件支持DSL自定义扩展和多个选项,以与其他插件集成。
虽然Jenkins一直允许序列任务与基本格式的自由式工作配合使用,但Pipeline使这一概念成为了Jenkins的最佳部分。
根据Jenkins的核心可扩展性,Pipeline也可以由Pipeline共享库用户和插件开发人员进行扩展
Pipeline术语Step
单任务从基础上告诉了Jenkins应该怎么做。 例如,要运行shell命令,make使用以下sh步骤: sh'make'。 如果插件扩展Pipeline DSL,则插件通常意味着实现了新步骤。
无代码
在Pipeline中运行的大多数任务都是在声明一个或多个节点步骤的上下文中完成的。 要将工作限制在Node步骤中,有两种情况:
将项目添加到Jenkins队列中,并调度要运行的块中包含的步骤。 当执行器在节点上空闲时,将执行步骤。
创建一个工作区(特定于特定Pipeline的目录),您可以从检出源代码管理的文件中完成工作。
根据Jenkins的设置,某些工作区在停用一段时间后可能不会自动清除。
阶段
stage是定义整个Pipeline概念上的不同子集的步骤,如构建、测试和部署。 许多插件用于可视化或显示Jenkins Pipeline的状态/进度。
找到原因
我们通过一顿排查,发现不是上面提到的问题,于是我把master设置成了protected, 只有特定user能push,我改成不protect。
上图的错误就消失了。
归纳
经过分析查证发现是自己没有合并代码的权限导致的,所以接下来就是修改权限就可以了。
一般我们作为developer,是没有master权限的,只有master才有合并代码权限。
修改方法,联系管理员,打开gitlab ===> setting ===> 修改成员角色,就ok了。