book
  • 关于
  • golang
    • 代码片段
  • LANMP
    • 安装
    • Linux
      • 源码编译
      • Linux基本操作命令
      • Linux网络相关命令
      • Crontab 计划任务
    • Nginx
      • 安装
      • 负载均衡
      • 负载均衡分配方式
      • 高可用
    • MySQL
      • 安装
      • 高可用
    • PHP
      • PHP内核
      • 代码段
      • Laravel
    • Swoole
      • easyswoole
        • 安装
    • 设计模式
  • 操作系统和网络
    • 计算机网络
      • IP协议
      • TCP协议
      • UDP协议
      • HTTP协议
      • HTTPS协议
      • HTTP2协议
      • HTTP1 HTTP2的区别
      • Websocket
      • 域名解析
      • Http压测工具 wrk
  • 工具
    • 版本控制
      • git
    • gitbook
      • 配置和插件
      • 插件
      • gitlab + gitbook
    • jenkins
      • 安装
      • 自动部署
    • Elasticsearch
    • go-mysql-elasticsearch
  • Python
    • Python基础
      • list 和 tuple
      • dict 和 set
    • Python爬虫
      • 爬取elasticsearch英文文档
    • 第三方包
      • Scoop
  • 运维
    • 运维
      • Logrotate
      • 服务器记录操作日志
    • 安全
    • Shell
    • VMWare
  • Java
    • Java基础
  • 前端
    • npmjs
由 GitBook 提供支持
在本页
  • 内部网络搭建gitbook
  • 环境
  • 在域名的目录下 创建一个 index.php
  • 强制拉取
  1. 工具
  2. gitbook

gitlab + gitbook

内部网络搭建gitbook

由于jenkins主机我没有权限登录,所以这次就使用webhook来完成

环境

有一个gitlab可访问的域名, 内网都是虚拟域名,配置方法可以查看 (计算机网络/域名解析)

在域名的目录下 创建一个 index.php

<?php

/**
 * Created by PhpStorm.
 * User: xiaojin
 * Date: 2018/8/9
 * Time: 14:23
 */
function writeLog($content)
{
	file_put_contents("gitlab-webhook_log.txt", $content, FILE_APPEND);
}
//gitlab webhook 自动部署脚本
//项目存放物理路径,第一次clone时,必须保证该目录为空
$savePath = "/var/www/book/xybook";
$gitPath = "http://xiaojin@gitlab.com/xiaojin/xybook.git";//代码仓库
$email = "your email";//用户仓库邮箱
$name = "your name";//仓库用户名,一般和邮箱一致即可
$token = 'ye2hQ!z9NU^aAcxce5D3*LytvZpexldd'; // webhook 里设置的Secret Token
$vaild_ip = ['200.200.115.29', '192.168.0.23']; //允许访问的IP, gitlab的地址, 内网地址和外网地址
$client_ip = $_SERVER['SERVER_ADDR'];
$client_token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
if ($_SERVER['REQUEST_METHOD'] !== 'POST'){ // webhook 发送的是post请求
	writeLog('No allow method');
    die('No allow method');
}
if ($client_token != $token){
	writeLog('invalid token');
    die('invalid token');
}
if (!in_array($client_ip, $vaild_ip)){
    writeLog('No permission');
    writeLog($client_ip.'在'.time().'时发送了POST请求');
    die('No permission');
}
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
	writeLog('request null');
    die('send fail');
}
//解析Git服务器通知过来的JSON信息
$content = json_decode($requestBody, true);
//若是主分支且提交数大于0
if ($content['ref'] == 'refs/heads/master' && $content['total_commits_count'] > 0) {

    $res_log .= PHP_EOL . "pull start --------" . PHP_EOL;
    $res_log .= shell_exec("cd {$savePath} && git pull {$gitPath} && git fetch --all && git reset --hard origin/master && git pull");//拉取代码
    $res_log .= '-------------------------' . PHP_EOL;
    $res_log .= $content['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:';
    $res_log .= "pull end --------" . PHP_EOL;
    shell_exec("cd {$savePath} && gitbook install && gitbook build");
    writeLog($res_log);
}
  • shell_exec()

  1. 首先查看启动PHP进程的用户, ps -ef |grep php centos下默认是nobody, nobody 默认没有任何权限

添加一个用户组

groupadd www
useradd -g www -s /bin/bash www

加完以后 cat /etc/passwd 就可以看到了

  1. 修改PHP启动用户, 在 PHP安装目录下/path/to/php/etc/php-fpm.d/www.conf (这里有所不同,每个人安装的方式都不一样,配置也不有可能不同)

编辑里面的 user = www; group = www; 重启 php-fpm

  1. 添加刚才的用户到 sudoers里面

vim /etc/sudoers


www   ALL=(ALL)       ALL //新添
%www        ALL=(ALL)       NOPASSWD: ALL  //设置 www 组下面的用户使用sudo不需要输入密码

强制拉取

git fetch --all
git reset --hard origin/master
git pull
上一页插件下一页jenkins

最后更新于2年前