在gitlab上使用server_hooks

文章目录

    • 1. 前置条件
    • 2. Git Hook
      • 2.1 Git Hook 分为两部分:本地和远程
        • 2.1.1 本地 Git Hook,由提交和合并等操作触发:
        • 2.1.2 远程 Git Hook,运行在网络操作上,例如接收推送的提交:
    • 3. 操作步骤
      • 3.1 对所有的仓库配置server hooks
        • 3.1.1 全局配置
        • 3.1.2 编写脚本
        • 3.1.3 测试
      • 3.2 对单个仓库配置server hooks
        • 3.1.1 全局配置
        • 3.1.2 编写脚本
        • 3.1.3 测试

1. 前置条件

  • 版本: 基础版
  • 环境: 自管理
  • 参考链接:
    • gitlab git hooks

2. Git Hook

与许多其他版本控制系统一样,Git 有一种方法可以在发生某些重要操作时,触发自定义脚本,即 Git Hook(Git 钩子)。
在这里插入图片描述
当我们初始化一个项目之后,.git 目录下有一个 hooks 目录,可以看到上图左侧有很多执行任务,比如 pre-commit,代表在运行这些命令之后或之前,会进行一些校验和检测来执行相应任务。

2.1 Git Hook 分为两部分:本地和远程

在这里插入图片描述

2.1.1 本地 Git Hook,由提交和合并等操作触发:
  • 比如代码发生变更,进行 git add,把 message 进行 commit changes;
  • 当 git commit 时,就会执行一个钩子叫 pre-commit(准备提交钩子)。
2.1.2 远程 Git Hook,运行在网络操作上,例如接收推送的提交:
  • 在 commit 之后,要推送到远端,此时有一个叫 pre-push 钩子,把信息推送 git 仓库;
  • 在远程阶段,极狐GitLab 相当于一个远程仓库。如图有很多仓库,分别承担不同功能,比如 pre-receive ,主要在服务器端接收通过本地推上来代码,然后 update 相关代码,post-receive 说明代码接受成功,同时有一个服务器钩子执行。

在这里,我们主要关注本地 hook,比如说 pre-message 和 pre-push,因此我们会借助这些工具来实现规范化代码内容。

3. 操作步骤

3.1 对所有的仓库配置server hooks

3.1.1 全局配置

参考地址:git hooks all repo

gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
gitlab-ctl reconfigure

在这里插入图片描述

3.1.2 编写脚本

创建目录custom_hooks

mkdir -p /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/

编写脚本

该脚本的作用是规范gitlab提交的信息
cat /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive.sh

#!/bin/bash
while read oldrev newrev refname; do# 从标准输入读取每个引用的旧版本、新版本和引用名称commits=$(git rev-list --pretty=oneline $oldrev..$newrev)# 遍历每个提交信息while read commit; do# 提取提交信息的前缀prefix=$(echo "$commit" | awk '{print $2}' | awk -F ":" '{print $1}')# 检查前缀是否符合要求if [[ $prefix != "feat" && $prefix != "fix" && $prefix != "hotfix" ]]; thenecho "Error: Invalid commit prefix in one or more commits:"echo "$commit"echo "Only commits with prefixes 'feat', 'fix', or 'hotfix' are allowed."exit 1fidone <<< "$commits"
done

给脚本权限

chown -R git.root /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d
chmod +x git.root /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive.sh
3.1.3 测试

测试提交
在这里插入图片描述
回退commit
在这里插入图片描述
再次提交
在这里插入图片描述

3.2 对单个仓库配置server hooks

3.1.1 全局配置

参考地址:git hooks single repo

gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
gitlab-ctl reconfigure

在这里插入图片描述

对于配置单个仓库的server hooks也是需要开启全局的配置,否则会导致脚本在某个repo的相对路径下不会生效

3.1.2 编写脚本

创建目录custom_hooks

# 进入到仓库在gitlab中的存储路径下
cd /var/opt/gitlab/git-data/repositories/
# 根据在gitlab的`管理界面 - 项目`中查看项目的相对路径(是一个hash路径)
cd @hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git
# 创建custom_hooks目录
mkdir -p custom_hooks/pre-receive.d
chown -R git.root custom_hooks

编写脚本

该脚本的作用是禁用对该仓库做任何的push操作

cat pre-receive.sh

#!/bin/bashwhile read oldrev newrev refname; dobranch=$(git rev-parse --symbolic --abbrev-ref $refname)# 检查是否有提交,如果有则拒绝if [ "$oldrev" != "0000000000000000000000000000000000000000" ]; thenecho "Pushing to $branch is not allowed. All pushes are prohibited."exit 1fi
done

给脚本权限

# 进入到仓库在gitlab中的存储路径下
cd /var/opt/gitlab/git-data/repositories/
# 根据在gitlab的`管理界面 - 项目`中查看项目的相对路径(是一个hash路径)
cd @hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git
chown -R git.root custom_hooks/
chmod +x git.root custom_hooks/pre-receive.d/pre-receive.sh

在这里插入图片描述

3.1.3 测试

测试提交
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA全栈开发 day14_集合(Collection\List接口、数据结构、泛型)

一、数组 数组是一个容器&#xff0c;可以存入相同类型的多个数据元素。 数组局限性&#xff1a; ​ 长度固定&#xff1a;&#xff08;添加–扩容&#xff0c; 删除-缩容&#xff09; ​ 类型是一致的 对象数组 &#xff1a; int[] arr new int[5]; … Student[] arr …

WPF 简单绘制矩形

Canvas 画矩形&#xff1a; view和viewModel 绑定一起才显示移动轨迹&#xff08;可以定义一个string 看是否绑定属性的路径是正确的&#xff09; 前台&#xff08;绑定事件和显示移动的线&#xff09;&#xff1a; <Canvas Name"canvas" Background"#01FF…

Learn the architecture - Understanding Armv9-A trace

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 — 适合小白入门【目录】ARMv8/ARMv9架构高级进阶-[目录]👈👈👈 — 高级进阶、小白勿买【加群】ARM/TEE…

json序列化时Long类型转换为String类型

将java对象序列化为json对象返回数据给前端时&#xff0c;js处理Long类型数据时会丢失精度&#xff0c;为了解决这种问题&#xff0c;往往给前端返回的Long类型数据要序列化为String类型&#xff0c;前面文章介绍过在springboot中的配置方式 json对象中对Long类型和String类型相…

四、虚拟机网络配置

目录 1、VMware网卡配置模式 1.1 桥接模式 ​​​​​​​1.2 NAT模式 ​​​​​​​1.3 仅主机模式 ​​​​​​​2、编辑虚拟机的网络编辑器 ​​​​​​​3、编辑Window的虚拟网卡 ​​​​​​​4、修改IP地址为静态 4.1 查看网卡名字 4.2 编辑修改网卡IP地址的…

Vue中的组件和插件

一、组件 组件是Vue中最核心的概念之一&#xff0c;它可以把一个页面拆分成多个独立的、可复用的部分。组件通常包含了自己的模板、样式和逻辑&#xff0c;用于封装一个特定的功能或界面。Vue的组件有单文件组件和普通组件两种类型&#xff0c;可以通过Vue.component或Vue.ext…

【Android MediaCodec 将音频转换为 pcm 格式】

调用方法 var url "https://xxxx.mp3"DownloadAndConvertTask(context.cacheDir.path).execute(url)代码实现 class DownloadAndConvertTask constructor(cacheDirPath: String): AsyncTask<String?, Void?, Void?>() {//缓存路径var cacheDir File(cache…

【多线程】-- 07 线程礼让与线程强制执行

多线程 5 线程状态 5.3 线程礼让 Thread.yield()礼让线程&#xff0c;让当前正在执行的线程暂停&#xff0c;但不阻塞将线程从运行状态转为就绪状态让CPU重新调度&#xff0c;礼让不一定成功&#xff01;由CPU调度决定。 package com.duo.state;//测试礼让线程 public clas…

【2023CANN训练营第二季】——Ascend C算子调用及实验演示

自定义算子调用方式 完成自定义算子的开发部署后&#xff0c;可以通过单算子调用的方式来验证单算子的功能。单算子调用有API执行和模型执行两种方式&#xff1a; 单算子API执行&#xff1a;基于C语言的API执行算子&#xff0c;无需提供单算子描述文件进行离线模型的转换&…

leetCode 131.分割回文串 + 动态规划 + 回溯算法 + 优化 + 图解 + 笔记

我的往期文章&#xff1a; leetCode 647.回文子串 动态规划 优化空间 / 中心扩展法 双指针-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/133883091?spm1001.2014.3001.5501leetCode 131.分割回文串 回溯算法 图解 笔记-CSDN博客https://blog.csdn.n…

使用Docker本地部署chatgpt

GitHub上有一个开源的工程ChatGPT-Next-Web&#xff0c;这个工程已经封装好了UI以及和OpenAI的API之间的交互&#xff0c;你要做的事情就是把他部署到本地&#xff0c;并配置好你的OpenAI的sk&#xff0c;然后就可以使用了。那么接下来的文章里&#xff0c;我会手把手教你如何C…

Vue3 究竟好在哪里?

Vue3 相较于 Vue2 在很多方面都有所改进和优化&#xff0c;以下是一些主要的优点&#xff1a; 性能提升&#xff1a;Vue3 使用了新的编译器&#xff08;Vite&#xff09;&#xff0c;使得打包速度更快&#xff0c;运行速度也有所提升。同时&#xff0c;Vue3 对响应式系统进行了…

关于如何写好单元测试的思考

“二八定律”&#xff0c;由19世纪末20世纪初意大利经济学家巴莱多提出。他认为&#xff0c;在任何一组东西中&#xff0c;最重要的只占其中一小部分&#xff0c;约20%&#xff0c;其余80%尽管是多数&#xff0c;却是次要的。 What&#xff1f; 释义 单元测试&#xff08;uni…

C语言第四十弹---两个整数二进制位不同的个数

C语言求两个整数二进制位不同的个数 遍历法&#xff0c;使用循环获取每一位二进制位数&#xff0c;并让二进制位与1比较&#xff0c;如果相同则忽略&#xff0c;不同则个数增加。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int a 0;int b 0;in…

4.求解无向图的各连通分支

求解无向图的各连通分支 输入&#xff1a; 第一行为图的节点数n&#xff08;节点编号0至n-1&#xff0c;0<n<10&#xff09; 从第二行开始列出图的边&#xff0c;-1表示输入结束 输出&#xff1a; 输出每个连通分支的广度优先搜索序列&#xff08;从连通分支的最小编号…

下拉列表select动态添加option和获取选中的option的值和value

分别用两种方法动态添加option&#xff1a; 方法一&#xff1a;JS方法添加 1、创建select标签 var select documnet.createElement(‘select’); 2、给select添加id select.setAttribute(‘id’,‘selectid’); 3、给select添加onchange事件 select.setAttribute(‘onc…

【云原生系列】Kubernetes知识点

目录 概念 基础架构 单master节点 多master节点 组件 Master节点核心组件 其他组件 请求发送流程 插件 核心资源 调度资源 Pod 创建pod组件间调用流程 pod生命周期&#xff1a; 初始化容器 镜像拉取策略 重启策略 钩子函数 探针 探针的实现方式 DownwardAP…

如何解决Windows中“Address already in use: bind“错误

当在Windows系统中开发网络应用程序时&#xff0c;经常会遇到 "Address already in use: bind" 的错误。这个错误通常表示正在尝试绑定的端口已经被其他程序占用了。本篇技术博客将介绍如何在Windows系统中解决这个问题&#xff0c;并提供实用的解决方案。 在网络应用…

Axios.post 请求报错: 403 Forbidden missing csrf token 和 invalid csrf token

Axios.post 请求报错&#xff1a;403 Forbidden missing csrf token 和 invalid csrf token 问题及解决 这个问题是在一个 post 请求的跨域接口上出现的 很奇怪的问题&#xff0c;可以直接看一解决方案就行了 一、解决方案 问题&#xff1a;使用 Axios.post 请求报错&#xff…

数据收集与处理(爬虫技术)

文章目录 1 前言2 网络爬虫2.1 构造自己的Scrapy爬虫2.1.1 items.py2.1.2 spiders子目录2.1.3 pipelines.py 2.2 构造可接受参数的Scrapy爬虫2.3 运行Scrapy爬虫2.3.1 在命令行运行2.3.2 在程序中调用 2.4 运行Scrapy的一些要点 3 大规模非结构化数据的存储与分析4 全部代码 1 …