Gitフックは、リポジトリを整頓するのに役立つツールです。コミットを処理するための自動ルールを設定できます。
皆さんはおそらく、事前コミットについて知っているでしょう- コミットする前にコードをチェックしてください。ただし、コミットする前にすべてをチェックできるわけではありません。一部の制限は、Gitlab全体でグローバルに使用する必要があります。
pre-commitフックとpre-receiveフックについて混乱している人のために、この投稿では、「gitフックとは」でそれらの違いについて説明しています。
Gitlab Enterprise Editionを使用している場合は、投稿に記載されているフックをWEBインターフェース経由で構成できます。
しかし、Gitlab Community(Core)Editionを持っている場合はどうでしょうか?
この記事では、Gitlab Community(Core)Editionサーバーで実行される5つの事前受信フックについて説明します。
- block_confidentials.sh-秘密キーとAWSトークンの送信のブロック
- block_file_extensions.sh-送信アーカイブのブロック(Regex構成可能)
- check-large-files.sh-大きなファイルの送信のブロック(サイズは構成可能)
- reject-not-allowlist-email.sh-許可リストにないメールによるコミットのブロック(メールドメインのリストは設定可能です)
- require-issue.sh-タイトルに問題のないコミットのブロック(問題リストは設定可能です)
ほとんどのフックは、pre-receive-hooksディレクトリのプラットフォームサンプルリポジトリから取得されます(GitHub Enterpriseに適用)。
Githubでサーバーフックのすべてのソースコードを確認できます。
Gitlabへのインストール
- ディレクトリを作成する必要があります
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/
- このディレクトリにフックをコピーします
- フックの起動権限を設定することを忘れないでください(chmod + xフックファイル)
プライベートキーとAWSトークンの送信をブロックする
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