git鉤子限制特定人才可以修改特定文件

說下我場景需求
一姥卢、因為項目是使用gitlab-ci來發(fā)布到生產(chǎn)池磁,所以會存在相關(guān)開發(fā)人員可能會去修改gitlab-ci配置文件再登,為了保證這個文件只有指定人修改
所以我們在git鉤子限制腿椎。
二优烧、項目中生產(chǎn)配置文件不允許開發(fā)人員隨便修改佃蚜,只有指定人員才可以修改庸娱。

一.首先我們要找到我們我們項目代碼存放gitlab位置

1.查看項目id

登錄gitlab后臺找到對應項目id截圖如下:


image.png

我的項目id是25

2.項目id轉(zhuǎn)字符串

因為gitlab存放我們的項目路徑不是直接根據(jù)項目保存的,需要對項目id轉(zhuǎn)義命令如下

 echo -n 25 | sha256sum

命令中的25是我自己項目id谐算,這個填寫你們實際項目id
回車后顯示一串字符串

[root@suoyoubao ~]# echo -n 25 | sha256sum
b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569  -

3.找到gitlab中項目存放的位置

然后我們再把這串字符串查到我們項目存放所在位置命令如下:

find / -name b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git

結(jié)果如下:

[root@suoyoubao ~]# find / -name b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git
/var/opt/gitlab/git-data/repositories/@hashed/b7/a5/b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git

4.找到需要編寫腳本的位置

先cd到我們剛才查出來的文件路徑熟尉,項目根目錄有個custom_hooks文件夾如果沒有自己創(chuàng)建,cd到custom_hooks里面新建命名為pre-receive文件

[root@suoyoubao /]# cd /var/opt/gitlab/git-data/repositories/@hashed/b7/a5/b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git
[root@suoyoubao b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git]# ls
branches  config  custom_hooks  description  HEAD  hooks  info  language-stats.cache  objects  packed-refs  refs
[root@suoyoubao b7a56873cd771f2c446d369b649430b65a756ba278ff97ec81bb6f55b2e73569.git]# cd custom_hooks/
[root@suoyoubao custom_hooks]# ls
pre-receive
[root@suoyoubao custom_hooks]# 

5.根據(jù)自己的需求修改下面腳本來限制只有指定的人可以修改指定文件

我這邊是只允許root和syb用戶才能修改
指定文件為:.gitlab-ci.yml洲脂,application-pro.yml 斤儿,bootstrap-pro.yml 三個文件
這里自己可以自己定義
附上腳本:

#!/usr/bin/env bash
#Fork hook from https://github.com/github/platform-samples/tree/master/pre-receive-hooks
#
# Pre-receive hook that will block any new commits that contain files ending
# with .gz, .zip or .tgz
#
# More details on pre-receive hooks and how to apply them can be found on
# https://help.github.com/enterprise/admin/guides/developer-workflow/managing-pre-receive-hooks-on-the-github-enterprise-appliance/
#
zero_commit="0000000000000000000000000000000000000000"
# Do not traverse over commits that are already in the repository
# (e.g. in a different branch)
# This prevents funny errors if pre-receive hooks got enabled after some
# commits got already in and then somebody tries to create a new branch
# If this is unwanted behavior, just set the variable to empty
echo $GL_USERNAME


# 定義允許哪些用戶可以對指定文件修改
AGREE_USER=("root" "syb")
# 指定文件
MANAGE_FILES=(".gitlab-ci.yml" "application-pro.yml" "bootstrap-pro.yml")

# 是否過濾指定文件
IS_FILTER= 0

# 判斷當前提交的用戶是否在授權(quán)用戶列表中
EXIT_USER=0

excludeExisting="--not --all"

while read oldrev newrev refname; do
# echo "payload"
echo $refname $oldrev $newrev
# branch or tag get deleted
if [ "$newrev" = "$zero_commit" ]; then
continue
fi
# Check for new branch or tag
if [ "$oldrev" = "$zero_commit" ]; then
    span=`git rev-list $newrev $excludeExisting`
else
    span=`git rev-list $oldrev..$newrev $excludeExisting`
fi
for COMMIT in $span; do
 for FILE  in `git log -1 --name-only --pretty=format:'' $COMMIT`; do
  for(( i=0;i<${#MANAGE_FILES[@]};i++)) do
    if [[ "$FILE" == *${MANAGE_FILES[i]}  ]];then
     IS_FILTER=1
    fi
  done
 done
done
done

for(( i=0;i<${#AGREE_USER[@]};i++)) do
 if [[ ${AGREE_USER[i]} == $GL_USERNAME ]];then
  EXIT_USER=1
 fi
done
if [ $IS_FILTER == 1 ] && [ $EXIT_USER != 1 ]; then
# if [ $IS_YML == 1 ]; then
#if [ $EXIT_USER == 1 ]; then
 exit 1
fi
exit 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恐锦,隨后出現(xiàn)的幾起案子往果,更是在濱河造成了極大的恐慌,老刑警劉巖一铅,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陕贮,死亡現(xiàn)場離奇詭異,居然都是意外死亡潘飘,警方通過查閱死者的電腦和手機肮之,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卜录,“玉大人戈擒,你說我怎么就攤上這事〖瓒荆” “怎么了筐高?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丑瞧。 經(jīng)常有香客問我柑土,道長,這世上最難降的妖魔是什么绊汹? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任冰单,我火速辦了婚禮,結(jié)果婚禮上灸促,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好浴栽,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布荒叼。 她就那樣靜靜地躺著,像睡著了一般典鸡。 火紅的嫁衣襯著肌膚如雪被廓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天萝玷,我揣著相機與錄音嫁乘,去河邊找鬼。 笑死球碉,一個胖子當著我的面吹牛蜓斧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睁冬,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼挎春,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豆拨?” 一聲冷哼從身側(cè)響起直奋,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎施禾,沒想到半個月后脚线,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡弥搞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年邮绿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓巧。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡斯碌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肛度,到底是詐尸還是另有隱情傻唾,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布承耿,位于F島的核電站冠骄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏加袋。R本人自食惡果不足惜凛辣,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望职烧。 院中可真熱鬧扁誓,春花似錦防泵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寿谴,卻和暖如春锁右,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讶泰。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工咏瑟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痪署。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓码泞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惠桃。 傳聞我的和親對象是個殘疾皇子浦夷,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容