2023年11月26日发(作者:)

GITLAB--webhooks⾃动化部署更新

time 2020-05-15

author Venki

theme 本篇博⽂主要⽬的是:将⾃⼰部署的gitlab代码管理系统,实现本地提交和服务器⾃动更新,希望可以帮助到和我⼀样有需求

的⼩伙伴们。

statement 本篇博⽂在借鉴他⼈⽂章的基础之上进⾏重新修改,虽然其中磕磕绊绊遇到许多问题,但好在⼀⼀都解决了,感谢这篇⽂

有话先说

server {

listen 5698; # 端⼝

server_name ; # IP地址

root /home/app/hooks; # 钩⼦脚本所在⽬录

location / {

index ;

try_files $uri $uri/ /?$query_string;

autoindex on;

}

# 关闭 [/] [/] 的访问⽇志。

# 并且即使它们不存在,也不写⼊错误⽇志。

location = / { access_log off; log_not_found off; }

location = / { access_log off; log_not_found off; }

# [404] 错误交给 [/] 处理,表⽰由 Laravel 渲染美观的错误页⾯。

error_page 404 /;

# URI 符合正则表达式 [.php$] 的请求将进⼊此段配置

location ~ .php$ {

# 配置 FastCGI 服务地址,可以为 IP:端⼝,也可以为 Unix socket

fastcgi_pass 127.0.0.1:9000;

fastcgi_index ;

fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;

include fastcgi_params;

}

# 通俗地说,以上配置将所有 URI .php 结尾的请求,全部交给 PHP-FPM 处理。

# 除符合正则表达式 [/.(?!well-known).*] 之外的 URI,全部拒绝访问

# 也就是说,拒绝公开以 [.] 开头的⽬录,[.well-known] 除外

location ~ /.(?!well-known).* {

deny all;

}

}

我在/home/app/hooks/下⾯写了⼀个脚本,只要通过上述nginx代理可以成功解析,那么第⼀步就完成

echo '测试钩⼦接⼝是否调通';

总之⼀句话:⾸先你要编写⼀个接⼝⽂件,先不要管⾥⾯的代码是什么,只要可以调通就好!

4. gitlab添加钩⼦

每个项⽬都要配⼀个webhooks,因为每个项⽬可能控制的逻辑不⼀样以及分⽀代码不⼀样,所以为了后续可控,就需要每个仓库都要

配置webhooks

配置页⾯如下

5. 编写钩⼦脚本业务代码

(主要是git push 触发后进⾏操作)

error_reporting(E_ALL);

// 根据token获取项⽬信息

function getProjectInfoByToken($token, $project_map)

{

$return = [];

foreach ($project_map as $map) {

if ($map['access_token'] == $token) {

$return = $map;

break;

}

}

return $return;

}

include_once './';

return $project_map = [

'dev' => [

'name' => 'dev', # 别名

'access_token' => 'xxx-dev', # 配置钩⼦时需要的⼀个秘钥,当然也可以不设置

'root' => '/home/app/dev' # 仓库所在路径

],

'test' => [

'name' => 'test',

解决⽅法

2. .git⽆权限

error: cannot open .git/FETCH_HEAD: Permission denied

问题原因

由于脚本是PHP,在执⾏时是通过php-fpm的,⽽git的⽤户是root,所以要查看php-fpm的⽤户是谁。

找到⽂件或者相应的配置⽂件

解决⽅法

# 更改.git⽤户和⽤户组为php-fpm即可

chown -R nginx:nginx .git

# 这⾥要说⼀下:.git是要更新仓库所在的位置,也就是每⼀个仓库都需要执⾏这个操作

3. 没有权限写⼊⽇志

# 以下只是没有权限错误的⼀种表现⽽已

error: unable to create file (Permission denied)"

解决⽅法

chmod -R 777 仓库所在路径

4. git pull ⽆权限

可能会出现下列问题:

Host key verification failed

fatal: Could not read from remote repository

Please make sure you have the correct access rights

and the repository exists

解决⽅法

清空/root/.ssh/known_hosts⽂件内容,然后进⼊到仓库,进⾏git pull 按照提⽰输⼊yes即可,此问题便解决!

出现下⾯这个问题:

"Permission denied, please try again.",

"Permission denied, please try again.",

"Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",

"fatal: Could not read from remote repository.",

"Please make sure you have the correct access rights",

"and the repository exists."

⾄此,配置完成,如有疑惑,请留⾔,我将耐⼼解决!谢谢!