一、首先要到https://gitee.com/注冊一個賬號,並創建一個項目。

二、把本地和服務器公鑰添加到碼雲公鑰管理

三、到webHooks下添加webHooks設置

然后添加一個觸發鈎子的url,當開發者提交主分支的時候,首先是把版本信息提交到碼雲,然后碼雲主動請求該url,並攜帶版本信息及密碼過去,進行驗證后觸發鈎子,鈎子再執行版本更新

四、分別在客戶端和服務器端克隆項目下來
git clone git@gitee.com:timelink/project.git

五、搭建鈎子
創建第三步配置的url訪問的php文件,我在此命名為gitCode.php文件,編輯
<?php $post=file_get_contents('php://input');//獲取請求攜帶的參數 $post=json_decode($post ,true);//將json轉換成數組 //驗證密碼 保證請求安全性 if($get['password'] == '12345'){ exec('sudo -u root git pull origin master 2<&1', $output); echo json_encode($output); }else{ echo '失敗'; }
然后再webhooks管理可以進行測試,出現相關成功信息,即說明配置成功

注意:在此處有個小坑
(1)如果出現報錯:sudo no tty present and no askpass program specified,則因為對於apache,由於其執行權限一般為apache:apache,用戶和組都是apache, apache用戶的特點是無密碼,不能登錄,無環境變量等。
解決方法:
1. 為sudoer文件開啟w權限
chmod u+w /etc/sudoers
2. 執行visudo命令, 給apache用戶分配sudo權限
visudo
a. 注釋掉1行:
#Defaults requiretty
b. 增加2行:
Defaults visiblepw
apache ALL=(ALL) NOPASSWD:/usr/bin/sudo, /usr/local/bin/MP4Box, /usr/local/bin/ffmpeg
我這里允許在cgi中調用 /usr/bin/sudo, /usr/local/bin/MP4Box, /usr/local/bin/ffmpeg三個命令,您可以根據需要修改
注意上面這2行的作用至關重要,不可隨意修改其格式
c. 保存退出visudo,退出跟vi命令一樣
:wq
3. 關閉sudoer文件w權限
chmod -w /etc/sudoers
4.重啟nginx
nginx -s reload
六、在客戶端提交版本即可實現項目的自動化部署了
