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.phpphp

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服務端自動部署.html

推薦參考:
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.htmlgit

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------web

1. 生成公鑰

公鑰有兩個:1. git用戶公鑰,2. 部署公鑰:shell

git用戶公鑰json

 

 
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」,一直回車下去ssh

2. 準備鉤子文件

建立和修改目錄權限:ide

 

 
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,稍過幾秒,正常的話你在配置的項目目錄裏就會有你的項目文件了。

相關文章
相關標籤/搜索