Git-Hooks sind ein Tool, mit dem Sie Ihr Repository in Ordnung halten können. Sie können automatische Regeln für die Verarbeitung Ihrer Commits einrichten.
Sie alle kennen sich wahrscheinlich mit Pre-Commit aus - überprüfen Sie Ihren Code vor dem Commit . Es kann jedoch nicht alles vor dem Festschreiben überprüft werden. Einige Einschränkungen möchten global in Gitlab verwendet werden.
Für alle, die verwirrt sind über Pre-Commit- und Pre-Receive-Hooks, beschreibt dieser Beitrag die Unterschiede zwischen ihnen in "Was sind Git-Hooks?"
Wenn Sie über Gitlab Enterprise Edition verfügen, können Sie die im Beitrag beschriebenen Hooks über die WEB-Oberfläche konfigurieren.
Aber was ist, wenn Sie Gitlab Community (Core) Edition haben?
In diesem Artikel werden 5 Pre-Receive-Hooks beschrieben, die auf dem Gitlab Community (Core) Edition-Server ausgeführt werden:
- block_confidentials.sh - Blockieren des Sendens von privaten Schlüsseln und AWS-Token
- block_file_extensions.sh - Blockieren sendender Archive (Regex konfigurierbar)
- check-large-files.sh - Blockieren des Sendens großer Dateien (Größe konfigurierbar)
- ablehnen-not-allowlist-email.sh - Blockieren von Commits mit E-Mail nicht aus der Zulassungsliste (Die Liste der E-Mail-Domänen ist konfigurierbar)
- require-issue.sh - Blockieren von Commits ohne ein Problem im Titel (Die Problemliste ist konfigurierbar)
Die meisten Hooks stammen aus dem Plattform-Beispiel- Repository im Pre-Receive-Hooks- Verzeichnis (gilt für GitHub Enterprise).
Sie können den gesamten Quellcode der Server-Hooks auf Github anzeigen .
Installation auf Gitlab
- Sie müssen ein Verzeichnis erstellen
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
- Kopieren Sie Hooks in dieses Verzeichnis
- Vergessen Sie nicht, die Startrechte für Hooks festzulegen (chmod + x Hook-Datei).
Blockieren des Sendens von privaten Schlüsseln und AWS-Token
block_confidentials.sh regex_list, .
# Define list of REGEX to be searched and blocked
regex_list=(
# block any private key file
'(\-){5}BEGIN\s?(RSA|OPENSSH|DSA|EC|PGP)?\s?PRIVATE KEY\s?(BLOCK)?(\-){5}.*'
# block AWS API Keys
'AKIA[0-9A-Z]{16}'
# block AWS Secret Access Key (TODO: adjust to not find validd Git SHA1s; false positives)
# '([^A-Za-z0-9/+=])?([A-Za-z0-9/+=]{40})([^A-Za-z0-9/+=])?'
# block confidential content
'CONFIDENTIAL'
)
, git push
.
block_file_extensions.sh case *.zip|*.gz|*.tgz
, , .
zip , git push
.
check-large-files.sh maxsize
, , .
1 , git push
.
email allow
reject-not-allowlist-email.sh email-, .
declare -a DOMAIN_ARRAY=("group1.com" "group2.com")
git , .
git config user.email user1@group3.com
, git push
.
issue
require-issue.sh commit_format, .
commit_format="(JIRA|PROJECTKEY|MULE|ECOM|SAP|XLR-[1-9]+Merge)"
, , commit_format git push
.
.
Telegram- Gitlab