zoukankan      html  css  js  c++  java
  • coding.net------WEBHOOK自动部署实战

    使用WebHook自动部署项目
    今天在laravist.com看到了这个 Webhook 自动部署Git项目 这个教学视频,以前自己也想做这样做一个利用Git WebHook的自动化部署,但总是不成功,今天看到视频就想着再次尝试一下,虽然有视频参考但还是遇到了一些坑,在这里我写下自己的部署过程.
    注:
    1.我是在de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >coding.netde>做的操作,其他类似git库应该可以参考使用.
    2.我的Web环境运行用户是de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >wwwde>,所以部分操作会切换到de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >wwwde>用户下.
    3.需要把de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >shell_exec()de>或者de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >exec()de>两个函数从de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >php.inide>的de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >disable_functionde>中取消.
    4.Web环境的运行用户需要Web部署目录的读写权限.
    过程.
    1.在de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >coding.netde>新建一个库
    2.在服务器上生成一个用来部署的Git Key:de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >sudo -Hu www ssh-keygen -t rsade>
    3.添加部署key到项目的部署公钥中.
    4.在服务端执行克隆操作:de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12.6px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >sudo -Hu www git clone git@git.coding.net:XXXXXX/XXXXXXde>
    5.添加一个可访问的部署文件deploy.php

    de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: inherit; padding: 0.5em; color: rgb(248, 248, 242); border-radius: 0px; display: block; background: rgb(35, 36, 31);"  ><?php
        error_reporting(1);
        $target = '/www/web/imwhere/weixin/weiphp'; // 生产环境web目录
        $token = '**************';//自定义token
        $json = json_decode(file_get_contents('php://input'), true);
        if (empty($json['token']) || $json['token'] !== $token) {
           exit('error request');
        }
        $cmd = "cd $target && git pull";
        exec($cmd);
    de>

    6.添加deploy.php的链接到WebHook中.
    7.本地push更新到coding.net服务端自动部署.

    推荐参考:
    1.使用Git部署网站:http://www.imwhere.cn/index.php/archives/3/
    2.利用WebHook实现PHP自动部署Git代码:http://m.aoh.cc/149.html
    3.Webhook 自动部署Git项目:https://laravist.com/series/something-that-a-little-helpful/episodes/3
    4.关于LINUX子目录需要父目录X权限的问题:http://www.imwhere.cn/index.php/archives/39/
    5.coding.net WebHook 参数:https://open.coding.net/webhook.html

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    1. 生成公钥

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

    git用户公钥

     
    1
    2
    3
    ssh-keygen -t rsa -C "admin@xsooo.com"
    # 然后一直回车就行
    # 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径

    部署公钥

    sudo -Hu www ssh-keygen -t rsa # 请选择 “no passphrase”,一直回车下去

    2. 准备钩子文件

    创建和修改目录权限:

     
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     
    error_reporting(1);
     
    $target = '/home/wwwroot/website.com'; // 生产环境web目录
     
    $token = '您在coding填写的hook令牌';
    $wwwUser = 'www';
    $wwwGroup = 'www';
     
    $json = json_decode(file_get_contents('php://input'), true);
     
    if (empty($json['token']) || $json['token'] !== $token) {
        exit('error request');
    }
     
    $repo = $json['repository']['name'];
     
    // $cmds = array(
    //     "cd $target && git pull",
    //     "chown -R {$wwwUser}:{$wwwGroup} $target/",
    // );
     
    // foreach ($cmds as $cmd) {
    //     shell_exec($cmd);
    // }
     
    // 感谢@墨迹凡指正,可以直接用www用户拉取代码而不用每次拉取后再修改用户组
     
    // $cmd = "sudo -Hu www cd $target && git pull"; 有问题
     $cmd = "cd $target && git pull"; 改为这个
     
    shell_exec($cmd);

    确保你的hook文件可以访问:http://example.com/hook/index.php,钩子准备完成。

    3.修改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 "admin@xsooo.com" # 邮箱请与conding上一致

    在Coding网站

    1.添加用户公钥

    复制de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13.5px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >/root/.ssh/id_rsa.pubde>内容到个人设置页的SSH公钥里添加即可(https://coding.net/user/account/setting/keys)

    2.添加部署公钥

    复制de style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13.5px; padding: 2px 4px; color: rgb(199, 37, 78); border-radius: 4px; " >/home/www/.ssh/id_rsa.pubde>的内容并添加到部署公钥:

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

    3.添加hook

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

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

    初始化

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

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

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

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

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

    在本地clone的仓库执行:

     
    1
    2
    git commit -am "test hook" --allow-empty
    git push

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

  • 相关阅读:
    laravel中get方式表单提交后, 地址栏数据重复的问题
    laravel中firstOrCreate的使用
    表单使用clone方法后, 原有select无法生效
    浏览器提示内容编码错误, 不支持此压缩格式
    web端访问文件没有权限的问题
    $(this)在ajax里面不生效的探究
    如何在github上提交pr
    IDEA配置文件的配置文件配置
    quartz定时任务时间设置
    通过 EXPLAIN 分析低效 SQL 的执行计划
  • 原文地址:https://www.cnblogs.com/kinwing/p/11093835.html
Copyright © 2011-2022 走看看