docker 下 git 提交代碼 代碼自動部署

這個自動部署溜畅,真是把人折騰的不行,我看其他人搞好容易极祸,結果慈格,我這邊麻煩得很。最后總結遥金,主要原因還會因為對 docker 不熟悉造成的浴捆,網(wǎng)上的很多記錄,只能參考一點點稿械,摸索了一整天选泻,終于實現(xiàn)了,下來重復一下整個流程溜哮,一方面記錄一下,另一方面色解,希望有同樣需求的朋友參考:

Part 1. 環(huán)境描述

通過 docker compose 安裝 LNMP 環(huán)境茂嗓;
git 線上用的是 coding.net

Part 2. 正確流程

以下操作都在服務器環(huán)境進行

1. 進入安裝 php 的 docker 容器

1.1 ssh 登錄服務器

ssh root@192.168.0.0
// @ 后的 ip 是你云服務器外部 ip

1.2 進入安裝 php 的 docker 容器

docker exec -it php /bin/bash
// php:是你自己的容器 name

2. 切換用戶

剛才登陸是用 root 登陸的,但 php 運行時的用戶是 www-data科阎,因此需要切換用戶為 www-data

su - www-data

3. 生成配對公鑰

一定要在 www-data 用戶下生成公鑰

ssh-keygen -t rsa -C account@email.com
// 一路回車就好述吸,不要設置密碼,否則操作 git 時會要求填寫賬號密碼,沒法自動部署
// account@email.com 是你的 coding 郵箱賬號
image.png

4. 復制公鑰

參考上圖蝌矛,找到公鑰位置

cd /var/www/.ssh/id_rsa

// 你會看到兩個文件:
// id_rsa:私鑰道批,存在的服務器上,請求時自動驗證入撒;
// id_rsa.pub:公鑰隆豹,將內(nèi)容配置到 git 倉庫(coding.net)

// 查看 id_rsa.pub,復制其中的全部內(nèi)容
cat id_rsa.pub

5. 部署公鑰

此操作在 coding.net 上

1)配置公鑰

部署公鑰.jpg

新建公鑰.jpg

6. 確認公鑰配置正確

ssh -T git@e.coding.net

看到以下內(nèi)容茅逮,表示公鑰部署成功


image.png

7. 部署 webhook 文件

1)編寫 webhook.php

我是用 php 璃赡,因此 webhook 就是 PHP 文件,我的命名是 webhook.php 献雅,你可以自定義碉考。這里主要用到的是 php 的 shell_exec() / exec() 函數(shù),該函數(shù)是在 php 里執(zhí)行 linux 系統(tǒng)的 shell 腳本(我的是 /bin/bash 解釋器)挺身。以下是簡單的 webhook.php 代碼:

<?php
// 因為我的 webhook.php 文件侯谁,是放在項目里的,因此無須是用 cd 切換目錄章钾,直接執(zhí)行拉取即可墙贱。
// 2>&1:是用來輸入執(zhí)行返回結果的
// 因為我只有 git pull 這一條執(zhí)行項目,因此伍玖,使用了 exec()嫩痰,沒有使用 shell_exec()
$res = exec('git pull 2>&1');

// 打印結果
print $res;
?>

注:將 webhook.php 文件放到服務器上,你項目的地址(流程應該在 git clone 你的項目后窍箍,再復制到項目目錄)

2)配置 webhook

添加 webhook 設置.jpg

新建 webhook.jpg

8. 首次拉取文件

1)找到 git 地址串纺,clone 項目到服務器


image.png

2) 進入項目上級目錄

git clone git@e.coding.net:……

9. 測試自動部署

可以試著本地 git push 項目了,順利的話椰棘,就能自動部署纺棺。如果沒能成功,繼續(xù)往下看邪狞,看看下面的問題詳解能否解決問題祷蝌。

Part 3. 遇到的問題

1. git not found(git:command not found)

這個問題,就是對 docker 不理解的一個表現(xiàn)帆卓,這個提示很明確沒有找到 git 命令巨朦,因為我的 git 是裝在服務器層面的,而不是裝在 docker 容器里的剑令,所以糊啡,很長時間,沒想明白(明明裝了 git 為啥提示沒有)吁津。

解決辦法:就是在 php 容器的 docker 里裝一次 git 棚蓄。
apt-get update

apt-get install git

2. Please make sure you have the correct access rights and the repository exists.

這個人問題是在裝上 git 后,git pull 拉代碼時出錯的,這個就是公鑰配對的問題梭依。
返回可能只返回:the repository exists

解決辦法:重新部署公鑰
  • 刪除 coding 上的 公鑰
  • 刪除 .ssh 下的 id_rsa id_rsa.pub known_hosts 三個文件
  • 再次執(zhí)行上面的 第 5 步

3. git pull fatal: unpack-objects failed

// 報錯如下
remote: Counting objects: 100, done
remote: Finding sources: 100% (77/77)
remote: Total 77 (delta 20), reused 60 (delta 20)
error: insufficient permission for adding an object to repository database .git/objects

fatal: failed to write object
fatal: unpack-objects failed

這是個 .git 文件夾的歸屬權限問題

解決辦法:給用戶 .git 文件夾賦予更高的權限
chown -R www-data [projectDir]

4. www-data 權限不夠

將你的項目文件開啟更高權限稍算,讓 www-data 訪問

chmod 777 .git
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市役拴,隨后出現(xiàn)的幾起案子糊探,更是在濱河造成了極大的恐慌,老刑警劉巖扎狱,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧到,死亡現(xiàn)場離奇詭異,居然都是意外死亡淤击,警方通過查閱死者的電腦和手機匠抗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來污抬,“玉大人汞贸,你說我怎么就攤上這事∮』” “怎么了矢腻?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長射赛。 經(jīng)常有香客問我多柑,道長,這世上最難降的妖魔是什么楣责? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任竣灌,我火速辦了婚禮,結果婚禮上秆麸,老公的妹妹穿的比我還像新娘初嘹。我一直安慰自己,他們只是感情好沮趣,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布屯烦。 她就那樣靜靜地躺著,像睡著了一般房铭。 火紅的嫁衣襯著肌膚如雪驻龟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天缸匪,我揣著相機與錄音翁狐,去河邊找鬼。 笑死豪嗽,一個胖子當著我的面吹牛谴蔑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播龟梦,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼隐锭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了计贰?” 一聲冷哼從身側響起钦睡,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躁倒,沒想到半個月后荞怒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秧秉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年褐桌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片象迎。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡荧嵌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砾淌,到底是詐尸還是另有隱情啦撮,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布汪厨,位于F島的核電站赃春,受9級特大地震影響,放射性物質發(fā)生泄漏劫乱。R本人自食惡果不足惜织中,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望要拂。 院中可真熱鬧抠璃,春花似錦、人聲如沸脱惰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉一。三九已至采盒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔚润,已是汗流浹背磅氨。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嫡纠,地道東北人烦租。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓延赌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叉橱。 傳聞我的和親對象是個殘疾皇子挫以,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容