Feng’ Blog

Gitlab实现推送代码自动部署
Gitlab实现推送代码自动部署准备环境:Gitlab V11.7.5Centos 7.4PHP 7.0操作步骤:...
扫描右侧二维码阅读全文
20
2019/02

Gitlab实现推送代码自动部署

Gitlab实现推送代码自动部署

resultgit.png

准备环境:

Gitlab V11.7.5

Centos 7.4

PHP 7.0

操作步骤:

一、Centos 中编写执行代码拉取和重启应用脚本文件,名为cbs.sh

简单拉取代码并重启docker容器示例: 自行替换目录

i#!/bin/bash
# 拉取代码的脚本
echo "*************************************"
echo ">>>进入目录/mydata/odoo/cbs"
cd /mydata/odoo/cbs

echo ">>>拉取代码,分支:cbs"
git pull origin cbs

echo ">>>重启docker服务:"
docker restart cbs_web
echo "*************************************"

二、编写php处理gitlab请求的脚本,名为push_git.php

示例:

<?php
$rowData = json_decode(file_get_contents('php://input'), true);
logg("ref:".$rowData['ref']);

//拉取 develop 分支的代码到服务器
if($rowData['ref'] == 'refs/heads/develop'){
    // 触发拉取代码的脚本
    $res = shell_exec('./cbs.sh');
    logg($res);
}elseif($rowData['ref'] == 'refs/heads/oa'){
     $res = shell_exec('./oa.sh');
     logg($res);
}else{
     logg("---");
}

logg('日志:'.$rowData['user_name']." commit to branch:".$rowData['ref']);

function logg($data){
   $text    = '['.date('Y-m-d H:i:s').'] '.$data."\n";
   file_put_contents('./log.log',$text,FILE_APPEND);
}

三、配置 Gitlab -webhooks

在项目中配置 webhooks(Web 钩子) 其实就是在项目中注册一个触发器,当项目中的某个事件发生时,该触发器就会被触发。在 GitLab 中的触发器就是一个 http 请求,即一个 http 链接。

20190220git.png

在Gitlab -webhooks页面添加一个推送事件的触发器即可,类似这样子的 URL:

http://localhost.com/push_git.php

保存之后,测试下该链接是否正确。它会模拟发送一个推送请求的数据,格式和正常的推送的一样。在代码服务器端push_git.php就可以根据这个来调试了。

通过以上三步,现在已经能够实现代码自动部署了

注意的地方:

一、ssh秘钥

一般执行php的默认用户为www,例如nginx,这时需要为www(或其他用户)生成秘钥。

代码服务器端生成秘钥:

使用命令 ssh-keygen ,连续按三次回车即可生成一对无密码保护的秘钥,它们的名称分别是 id_rsaid_rsa.pub

然后将 id_rsa.pub 的内容添加到 GitLab 账号:

在 GitLab 账号的 profile setting > SSH keys 粘贴并保存即可

二、GitLab 账号的权限

检查gitlab账户,是否拥有拉取权限、最好先使用www用户手动执行拉取动作试试

三、代码服务器端执行脚本的用户的权限

确认www这个用户有权限对项目目录进行读写(很重要)

四、其次就是docker权限

将www用户加入到docker组

sudo groupadd docker
sudo gpsswd -a {www} docker
sudo service docker restart
Last modification:February 20th, 2019 at 04:10 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment