使用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,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。

coding.net------WEBHOOK自动部署实战的更多相关文章

  1. webhook 自动部署代码

    前话: 一般情况,自己在本地开发,代码改动后要push放到线上去看效果,但是我们还要到线上环境手动拉取代码库 git pull 下来, 一来一回太麻烦了. 现在用webhook就可以实现本地开发,pu ...

  2. 使用PHP自动部署GIT代码

    最近在使用Coding的代码托管,顺便设置了WebHook自动部署,过程还是挺艰辛的,主要还是没搞懂Linux的权限控制,不过好在弄好了,分享一下获益最深的一篇文章,供大家参考,原文是英文版的,我的英 ...

  3. php项目使用git的webhooks实现自动部署

    前言 在项目开发中使用git进行代码的管理,每次完成更改上传代码后,还需要登录服务器将代码拉取下来.现在git服务器(gitee/gitlab/github)都会有Webhooks功能,以实现在向gi ...

  4. 利用WebHook实现PHP自动部署Git代码

    平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的<使用PHP脚本远程部署git项目>后就尝试在自己服务 ...

  5. 基于webhook方案的Git自动部署方案

    之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...

  6. 使用Travis CI自动部署博客到github pages和coding pages

    每次换系统或换电脑之后重新部署博客总是很苦恼?想像jekyll那样,一次性部署完成后,以后本地不用安装环境直接 git push 就能生成博客?那推荐你应该使用使用 Travis CI了. 这篇文章我 ...

  7. Webhook 实践 —— 自动部署

    https://segmentfault.com/a/1190000007892407 安装nodejs 安装nodejs建议直接下载二进制包,把官网上的64位二进制版本下载地址复制下来,执行 wge ...

  8. 【SpringBoot】SpringBoot热部署和配置文件自动注入实战

    ========================3.SpringBoot热部署devtool和配置文件自动注入实战 ============================ 1.SpringBoot2 ...

  9. Jenkins+Gitlab配置Webhook实现提交自动部署

    一.概述 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 已经实现了 Jenkins+harbor+gitlab+ ...

随机推荐

  1. rac 数组之遍历

    rac的数组遍历其实很简单.但是有个点需要注意. 以下先举个例子说明遍历的用法 NSArray *temArr = @["]; [temArr.rac_sequence.signal sub ...

  2. Spring Cloud Gateway整合Eureka

    Spring Cloud Gateway features: Built on Spring Framework 5, Project Reactor and Spring Boot 2.0 Able ...

  3. 前端css知识实现自动打字,文字滚动

    HTML部分: <div class="div1"> <div class="div2">文字文字文字文字文字文字文字文字文字文字文字文 ...

  4. 微信小程序开发入门教程(四)---自己动手做个小程序

    前面已将基础知识准备的差不多了,下面实际做一个小程序. 一.目标 用于上传照片和文字. 2个主要页面:我me,设置set 二.开始制作 1.打开微信开发者工具(我用的1.02.1907160 Wind ...

  5. luogu 1373 小a和uim之大逃离 dp

    有取模操作,所以直接维护模意义下的差即可. Code: #include <bits/stdc++.h> #define M 16 #define N 801 #define ll lon ...

  6. Hibernate 5 升级后 getProperties 错误

    升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/uti ...

  7. cropbox.js 头像裁剪插件

    cropbox.js 一个轻量级和简单的JavaScript,Jquery,YUI插件来裁剪您的头像. 特征 支持dataUrl显示图像(函数getDataURL) 支持Blob上传图片(函数getB ...

  8. PHP 根据两个坐标计算距离 圆形围栏的计算

    可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ...

  9. Mysql索引查询失效的情况

    首先,复习一下索引的创建: 普通的索引的创建: CREATE INDEX  (自定义)索引名  ON  数据表(字段); 复合索引的创建: CREATE INDEX  (自定义)索引名  ON  数据 ...

  10. Docker+Rancher构建部署流水线

    工作多年,在项目部署方面, 1:以前用ftp或者rz上传更新的,每次更新算上打包.目录切换.更新遗漏.备份.出错还原.启动等工作都得搞上一来小时甚至更长,要是多两台服务器那心都凉了: 2:后来有用sv ...