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." ⾄此,配置完成,如有疑惑,请留⾔,我将耐⼼解决!谢谢!


发布评论