zoukankan      html  css  js  c++  java
  • 基于webhook方案的Git自动部署方案

    之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需。平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能,偶尔个别自己玩玩的项目提交了代码之后再SSH到服务器上去 git pull 一次,刚好一起做成了自动部署,方法记录起来备忘。

    实现步骤

    在服务器上

    以Nginx环境为例,Apache请看OverTrue的教程

    生成公钥

    公钥有两个:1. git用户公钥,2. 部署公钥:

    git用户公钥

    1
    2
    3
    ssh-keygen -t rsa -C "[email protected]"

    #生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径

    部署公钥

    1
    sudo -Hu www ssh-keygen -t rsa 

    准备钩子文件

    创建和修改目录权限

    1
    2
    mkdir /home/wwwroot/website.com/hook
    chown -R www:www /home/wwwroot/website.com/hook

    写入钩子文件

    1
    sudo -Hu www touch /home/wwwroot/website.com/hook/index.php

    钩子文件代码内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php

    error_reporting(1);

    $target = '/home/wwwroot/website.com'; // 生产环境web目录
    $token = '您在coding填写的hook令牌';
    $wwwUser = 'www';

    $json = json_decode(file_get_contents('php://input'), true);

    if (empty($json['token']) || $json['token'] !== $token) {
    exit('error request');
    }

    $cmd = "sudo -Hu $wwwUser cd $target && git pull";

    shell_exec($cmd);
    ?>

    确保你的 大专栏  基于webhook方案的Git自动部署方案hook文件可以访问:http://example.com/hook/index.php , 钩子准备完成。

    修改git配置和保存git用户名密码

    1
    2
    3
    sudo -Hu www git config --global credential.helper store #永久保存
    sudo -Hu www git config --global user.name "Bantes"
    sudo -Hu www git config --global user.email "[email protected]" #邮箱请与conding上一致

    在Coding仓库

    添加用户公钥

    复制/root/.ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可(https://coding.net/user/account/setting/keys)

    添加部署公钥

    复制/home/www/.ssh/id_rsa.pub的内容并添加到部署公钥:

    选择 项目 > 设置 > 部署公钥 > 新建 ,将公钥内容全部粘贴到下面框并确认

    添加hook

    选择 项目 > 设置 > WebHook > 新建hook 粘贴你的 hook/index.php 所在的网址。比如:http://example.com/hook/index.php, 令牌可选,但是建议写上。

    coding出了个 webhookv2 功能强大了不少,对有更多细节要求的程序帮助不少但也复杂了,选择返回旧版新建个webhook使用即可。

    稍过几秒刷新页面查看hook状态,或者点击测试,显示为绿色勾就OK了。

    项目初始化

    我们需要先在服务器上clone一次,以后都可以实现自动部署了:

    1
    sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/  --depth=1

    这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。

    注意,这里初始化clone必须要用www用户

    往Coding.net提交一次代码测试

    在本地clone的仓库执行:

    1
    git commit -am "test hook" --allow-emptygit push

    OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。

    初始化Laravel框架

    下载Composer

    在项目目录下执行:

    1
    2
    sudo -Hu www curl -sS https://getcomposer.org/installer | php
    sudo -Hu www php composer.phar install

    记得在本地提交的时候在.gitignore中加上composer.phar

    参考文档

    1. 用 Git 钩子进行简单自动部署
    2. 利用WebHook实现PHP自动部署Git代码
    3. 使用git做服务器端代码的部署
    4. SSH密钥生成与部署
  • 相关阅读:
    mysqlEasyHelper(待完善)
    入门day2
    入门day1
    c# 多态的理解
    c# 简单任务控制
    c# 陌生的关键字
    从0来搭建超灵活的MVP商用框架<三>-------网络层加入RxJava、事件总线封装、Dagger2集成
    从0来搭建超灵活的MVP商用框架<二>-------APP基础配置、Okhttp+Retrofit封装
    从0来搭建超灵活的MVP商用框架<一>-------从MVC至MVP的转变、通用网络切换框架
    IOC注入框架设计<三>-------Android Studio插件开发来自动生成ButterKnife相关代码
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12268230.html
Copyright © 2011-2022 走看看