如何在Ubuntu 20.04-VPS上将Custom Hooks与GitLab CE结合使用?

时间:2020-06-12 20:56:20

标签: linux git vps ubuntu-20.04 gitlab-ce

简历

当我从本地工作区推送到远程VPS上的GitLab中的目标存储库时,我希望GitLab运行脚本并要求同一VPS上的beta存储库进行git checkout并拉取以检查我的更改。

当前配置

Gitlab configurations

假设您的管理区域中已经有一个项目,只需获取它的相对路径

  1. 管理区域>项目

  2. 选择您的项目

  3. 在项目配置文件中获取路径(在这种情况下已隐藏)

  4. 在此位置创建一个名为custom_hooks的新目录。

sudo su
cd /var/opt/gitlab/git-data/repositories/hashed/path/of/project
mkdir custom_hooks
  1. 在新的custom_hooks目录中,创建一个名称与钩子类型匹配的文件。对于post-receive挂钩,文件名应为post-receive,不带扩展名。
cd custom_hooks
nano post-receive
  1. 编写代码以使服务器具有预期的挂钩功能。挂钩可以使用任何语言。确保顶部的“ shebang”正确反映了语言类型。在这种情况下,使用的脚本代码是:
 #!/bin/sh
 unset GIT_INDEX_FILE
 cd /var/repo/beta.git && git checkout master && git up # --[see the note 2 below]
  1. 使该挂钩文件可执行并确保它由Git拥有。
chmod +x post-receive

注释1:

您可以在这里找到有关git hooks的更多信息:GitLab Documentation : Server hooks



VPS configurations

  1. 使用@RichardHansen重新创建新别名

    git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'


注释2:

在研究过程中,我在论坛上找到了有关git pull的有趣答案。 我决定遵循该建议,并命名为git up。 重要的是:

  • 它适用于所有(非古代)Git版本,
  • 它会获取所有上游分支(不仅仅是您当前正在处理的分支),并且;
  • 它清除上游不再存在的旧的origin / *分支。

您可以在此处找到有关“ git pull在什么情况下可能有害? ”的更多信息: Link to answer


  1. 仅为git repos创建目录,然后访问该目录以处理Hooks配置
 # Create a repo for the project in apache area

 mkdir /var/www/beta


 # Create the git repo only folder

 cd /var

 mkdir repo && cd repo


 # Create git repo and init

 mkdir beta.git && cd beta.git

 git init --bare # --bare means that our folder will have no source files, just the version control.


 # Add gitlab remote

 git remote add gitlab


 # Accessing hooks folder to create script

 cd hooks

 cat > pre-receive


 # On the blank line, write this script then 'ctrl + d' to save and press enter to exit

 #!/bin/sh
 unset GIT_INDEX_FILE
 git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f



 # Make the file executable

 chmod +x post-receive


注释3:

'git-dir'是git存储库的路径。使用“工作树”,我们可以定义文件实际传输到的不同路径。

每次完成推送时都会查看“ post-receive”挂钩,并在这种情况下设置将文件传输到/ var / www / beta的路径。



Local Workspace configurations

# Create in your workspace a folder to hold the project

 cd /path/to/workspace

 mkdir project && cd project



# Initialize git and add gitlab remote

  git init

  git remote add gitlab ssh://user@mydomain.com/gitlab/path/of/project



# Create an index.html file and send the initial commit 

 nano index.html

# copy this into the file then 'ctrl + x' then 'y' then 'enter' to save 

<html>
    <head>
        <title>Welcome to Beta domain!</title>
    </head>
    <body>
        <h1>Success!  The beta virtual host is working!</h1>
    </body>
</html> 


# prepare the changes and then send the commit

 git status

 git add index.html

 git commit -m "chore: add index.html :tada: :rocket:"

 git push gitlab master


预期结果

此过程的预期结果是,完成git push gitlab master后,项目的gitlab哈希目录内的钩子将运行一个执行如下操作的脚本:

# Access the beta.git directory

 cd /var/repo/beta.git



# Run command for updating repo

 git checkout master && git up 



# If we access the beta folder in apache area we should see index.html

 cd /var/www/beta
 ls
 --index.html

实际结果

没有结果。

错误消息

没有错误消息。

请求

如何设置这样的过程?

我的流程中有一些我没有考虑的东西吗?

0 个答案:

没有答案