摘要:而利用的功能,能夠讓我們省去這一步,下面我就以碼云的為例,實現服務端的代碼自動同步部署。查看是哪個用戶執行該命令參考文章使用腳本遠程部署項目利用實現自動部署代碼碼云通過實現自動同步代碼部署執行系統外部命令函數
當進行開發的環境在本地,而運行的環境要在服務端時,每一次提交代碼都需要在服務端pull一次。而利用git的hooks功能,能夠讓我們省去這一步,下面我就以碼云的webhooks為例,實現服務端的代碼自動同步部署。
更新歷史
2017.12.29:完成初稿
了解 git 的 hooksGit 能在特定的重要動作發生時觸發自定義腳本。 有兩組這樣的鉤子:客戶端的和服務器端的。 客戶端鉤子由諸如提交和合并這樣的操作所調用,而服務器端鉤子作用于諸如接收被推送的提交這樣的聯網操作。 你可以隨心所欲地運用這些鉤子。
鉤子都被存儲在 Git 目錄下的 ==hooks== 子目錄中。 也即絕大部分項目中的 ==.git/hooks== 。 當你用 ==git init== 初始化一個新版本庫時,Git 默認會在這個目錄中放置一些示例腳本。這些腳本除了本身可以被調用外,它們還透露了被觸發時所傳入的參數。 所有的示例都是 shell 腳本,其中一些還混雜了 Perl 代碼,不過,任何正確命名的可執行腳本都可以正常使用 —— 你可以用 Ruby 或 Python,或其它語言編寫它們。 這些示例的名字都是以 ==.sample== 結尾,如果你想啟用它們,得先移除這個后綴。
把一個正確命名且可執行的文件放入 Git 目錄下的 hooks 子目錄中,即可激活該鉤子腳本。 這樣一來,它就能被 Git 調用。 接下來,我們會講解常用的鉤子腳本類型。
具體使用可以參考官方文檔:Git Hookes
了解 webhooks鉤子功能(callback),是幫助用戶 push 了代碼后,自動回調一個你設定的 http 地址。 這是一個通用的解決方案,用戶可以自己根據不同的需求,來編寫自己的腳本程序(比如發郵件,自動部署等);目前,webhooks 支持多種觸發方式,支持復選。
webhooks 的請求方式為POST請求,有兩種數據格式可以選擇,JSON 和 web 的 form參數,可以自行選擇是否使用密碼來確定請求。(注意:該密碼是明文)
不同托管平臺的POST數據格式都不太一樣,不過也不會有太大影響,只是解析數據的時候注意就行了,下面是碼云的 Push 操作回調的 json 數據:
{ "before": "fb32ef5812dc132ece716a05c50c7531c6dc1b4d", "after": "ac63b9ba95191a1bf79d60bc262851a66c12cda1", "ref": "refs/heads/master", "user_id": 13, "user_name": "123", "user": { "name": "123", "username": "test123", "url": "https://gitee.com/oschina" }, "repository": { "name": "webhook", "url": "http://git.oschina.net/oschina/webhook", "description": "", "homepage": "https://gitee.com/oschina/webhook" }, "commits": [ { "id": "ac63b9ba95191a1bf79d60bc262851a66c12cda1", "message": "1234 bug fix", "timestamp": "2016-12-09T17:28:02 08:00", "url": "https://gitee.com/oschina/webhook/commit/ac63b9ba95191a1bf79d60bc262851a66c12cda1", "author": { "name": "123", "email": "123@123.com", "time": "2016-12-09T17:28:02 08:00" } } ], "total_commits_count": 1, "commits_more_than_ten": false, "project": { "name": "webhook", "path": "webhook", "url": "https://gitee.com/oschina/webhook", "git_ssh_url": "git@gitee.com:oschina/webhook.git", "git_http_url": "https://gitee.com/oschina/webhook.git", "git_svn_url": "svn://gitee.com/oschina/webhook", "namespace": "oschina", "name_with_namespace": "oschina/webhook", "path_with_namespace": "oschina/webhook", "default_branch": "master" }, "hook_name": "push_hooks", "password": "pwd" }
其他的具體數據可以到各個官網查看:碼云、Coding、GitHub
在 Ubuntu + Apache + 碼云的嘗試 準備工作1、首先你要搭建好LAMP的的開發環境 可以看騰訊開發者實驗室的課程
2、當然要有git的環境了
3、要將代碼方在一個提供webhooks支持的代碼托管平臺上,如果自己搭建 git 服務器則要自己實現 webhooks 回調
開始干活創建web服務器用戶目錄,這里以apache用戶為例,不同的環境請根據自己環境自行修改:
sudo mkdir /var/www/.ssh sudo chown -R apacheuser /var/www/.ssh/ // 這里的用戶要是 Apache 的運行用戶,下同
生成公鑰
公鑰有兩個:1. git用戶公鑰,2. 部署公鑰:
用戶公鑰(用于git clone時認證權限)
ssh-keygen -t rsa -C "sample@gmail.com" # 填自己的郵箱 # 然后一直回車就行 # 生成的文件通常是 /root/.ssh/id_rsa,如果非root用戶請查看提示上的路徑
部署公鑰
sudo -Hu apacheuser ssh-keygen -t rsa # 請選擇 "no passphrase",一直回車下去
配置公鑰
用戶公鑰
sudo cat /root/.ssh/id_rsa.pub # 查看生成的密鑰內容,復制全部
將公鑰的內容粘貼到用戶->設置 中的SSH公鑰中
部署公鑰
sudo cat /var/www/.ssh/id_rsa.pub # 查看生成的密鑰內容,復制全部
將公鑰內容添加到具體項目 -> 管理 中的部署公鑰
git 的全局配置
sudo -Hu apacheuser git config --global credential.helper store # 永久保存 sudo -Hu apacheuser git config --global user.name "name" sudo -Hu apacheuser git config --global user.email "shample@gmail.com" # 郵箱請與碼云上一致
配置完成之后可以 clone 或 pull 項目來驗證是否配置成功(注意:要切換成Apache運行用戶來進行操作),若多次操作只需輸入一次用戶名、密碼,即配置成功,若每一次操作都有輸入用戶名密碼,則配置不成功,需要重新檢查配置。
準備鉤子文件
在你的www目錄建立一個目錄hook, 里面放上一個php文件index.php,內容如下:
修改目錄權限:
chown -R apacheuser /var/www/hook # 這里請改成你創建的hook目錄 chown -R apacheuser /var/www/Project # 這里請改成你的項目目錄
確保你的hook文件可以訪問:http://example.com/hook/index... ,鉤子準備完成。
配置webhooks
如果鏈接可用,則大功告成,只需把倉庫 clone 之后,再向碼云提交,變回自動被 服務器 pull
注意事項如果配置都沒有問題,但是就是不會自動拉取,那應該是用戶的權限配置問題,可以先查看運行php代碼的具體用戶是什么,然后為該用戶開啟權限。
system("whoami"); // 查看是哪個用戶執行該命令參考文章
使用PHP腳本遠程部署git項目
利用WebHook實現PHP自動部署Git代碼
Gitee碼云通過WebHooks實現自動同步代碼部署
PHP執行系統外部命令函數:exec()、passthru()、system()、shell_exec()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26293.html
摘要:自動部署基礎實踐熟悉的基本操作實現本地后自動構建部署服務此實踐用于優化自己在實際工作中的工作流在本地開發到服務器登錄云服務器或者簡化流程后本地開發云服務器自動構建部署本實踐將結合技術來實現云服務器對各種環境的切換與部署。 Docker + Jenkins + webhooks 自動部署基礎實踐 熟悉 jenkins 的基本操作 ?? 實現本地 git push 后 jenkins 自...
摘要:正文準備首先確定需要完成的內容明確需求監聽指定提交執行指定多個腳本而且因為我這邊是需要分別對和目錄分別執行部署命令。部署部署我們只需要對然后就可以在本地開發完之后推送,服務器就能自動拉取代碼并且部署。 前言 之前斷斷續續在重構一個項目,然后發現功能一開始設計太多了,可能需要花大量時間來增加,但是核心功能基本完成,于是想著能不能半上線狀態,然后通過更新提交git,讓服務器部署自動更新。這...
摘要:該簽名由一個密碼,請求體的十六進制摘要,并使用哈希生成。調試打印語句顯示了從請求體收到的短提交哈希。這是持續部署的關鍵。 借助 GitHub 的網絡鉤子webhook,開發者可以創建很多有用的服務。從觸發一個 Jenkins 實例上的 CI(持續集成) 任務到配置云中的機器,幾乎有著無限的可能性。這篇教程將展示如何使用 Python 和 Flask 框架來搭建一個簡單的持續部署(CD)...
摘要:使用框架實現自動部署項目為了方便開發測試或項目部署至服務器不那么繁瑣,搞一個自動部署的小輪子也是必要的。同時配置項目托管平臺的個人私鑰或項目公鑰,保證能直接拉取。 gohook Python 使用 Tornado 框架實現 WebHook 自動部署 Git 項目 為了方便開發測試或項目部署至服務器不那么繁瑣,搞一個自動部署的小輪子也是必要的。 小輪子需要涉及到 Coding 項目托管平...
摘要:本文通過鉤子實現了,本地代碼,會自動響應并拉取碼云上最新的代碼值服務器上,使得本地提交代碼時,線上能夠同步的更新代碼,省去了手動更新服務器上代碼的重復工作。思考下我的需求本地代碼到碼云,自動拉取最新的代碼。 * 寫在前面的一段話:? ? ? ? ? 根據目前的工作需要,以及為了接下來新產品前后端間更高效的協同,我決定爬一下Jenkins的坑。本文通過git鉤子+Jenkins實現了,...
閱讀 2977·2021-11-23 09:51
閱讀 3609·2021-10-13 09:39
閱讀 2491·2021-09-22 15:06
閱讀 881·2019-08-30 15:55
閱讀 3147·2019-08-30 15:44
閱讀 1778·2019-08-30 14:05
閱讀 3434·2019-08-29 15:24
閱讀 2362·2019-08-29 12:44