借助git|碼云 hooks實(shí)現(xiàn)自動部署

配置環(huán)境

安裝nvm

1.  執(zhí)行命令
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash    // 或者
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
2. 執(zhí)行
source ~/.bashrc
3. 使用nvm安裝node

安裝node

nvm install  v9.10.0

安裝git

  1. 至官網(wǎng)查看git版本;
    2 安裝最新版本
  • 執(zhí)行下載
  wget https://github.com/git/git/archive/v2.17.0.tar.gz
  • 解壓
tar -zxvf v2.17.0.tar.gz
  • 安裝編譯源碼所需依賴星掰,命令為:
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 

出現(xiàn)提示輸入y即可其馏;

  • 安裝依賴時凤跑,yum自動安裝了Git,需要卸載舊版本Git叛复,命令為: yum remove git 出現(xiàn)提示輸入y即可仔引;

  • 進(jìn)入解壓后的文件夾,命令 cd git-2.17.0 致扯,然后執(zhí)行編譯肤寝,命令為 make prefix=/usr/local/git all 耐心等待編譯即可;

  • 安裝Git至 /usr/local/git 路徑抖僵,命令為 make prefix=/usr/local/git install鲤看;

  • 打開環(huán)境變量配置文件,命令 vim /etc/profile 耍群,在底部加上Git相關(guān)配置信息:

PATH=$PATH:/usr/local/git/bin 
export PATH 

2 配置免登陸的ssh公鑰

1.  cd ~/.ssh
2. ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
3.  vim id_rsa.pub   // 打開公鑰復(fù)制里面的內(nèi)容义桂,黏貼到git上

一. 在服務(wù)器自建git倉庫實(shí)現(xiàn)自動部署

  • 創(chuàng)建git用戶
adduser gc    // 用戶名
passwd gc     // 為改用戶設(shè)置密碼
  • 使用gc用戶生成git秘鑰
1. 在服務(wù)器操作
  cd /home
  mkdir gc  // 若有生成就不用創(chuàng)建了
  mkdir  ./gc/.ssh
  touch  ./gc/.ssh/authorized_keys
  chown -R  gc:gc  gc
  cd  /home/gc
  chmod 700  .ssh   // 需要設(shè)置成700,否則公鑰認(rèn)證會提示 (Permission denied)
  chmod 600  ./.ssh/authorized_keys // 需要設(shè)置成600蹈垢,否則公鑰認(rèn)證會提示 (Permission denied)
  sudo -u gc ssh-keygen -t rsa -C  "xxxx@qq.com"   //生成密鑰
  cd /home/gc/.ssh
  cat id_rsa.pub>>authorized_keys  //把公鑰加入authorized_keys文件
2. 客戶端操作
  在客服端生成秘鑰慷吊,將客戶端的公鑰copy到authorized_key
  • 創(chuàng)建git倉庫
cd /data
mkdir warehouse
cd warehouse
git init --bare egg.git  // 添加--bare就不會再生成.git文件夾
sudo chown -R gc:gc egg.git  // 給用戶gc添加這個用戶的權(quán)限,不然會報錯(insufficient permission for adding an object to repository database ./objects)
  • 創(chuàng)建web站點(diǎn)目錄
cd /data
mkdir web
cd web/
git clone /data/warehouse/egg.git  // 前面生成的倉庫地址
chown -R gc:gc egg   // 給該站點(diǎn)設(shè)置權(quán)限(不設(shè)置會報錯)
  • 編寫自動更新鉤子
cd /data/warehouse/egg.git/hooks/
vim  post-receive  // 注意改文件沒有后綴名曹抬,如果沒有該文件測創(chuàng)建溉瓶,若加.sample后綴表示為示例文件,不會調(diào)用谤民。
在 post-receive文件中寫入如下內(nèi)容:
#// 文件位置 /data/warehouse/egg.git/hooks/post-receive
#!/bin/sh
cd /data/web/egg   // 進(jìn)入到web站點(diǎn)目錄
unset GIT_DIR      // 清空git的工作目錄堰酿,git才可以進(jìn)入/home/test/工作目錄(沒有使用該代碼,報錯:remote: fatal: Not a git repository: '.')
git config --list
git pull origin master
// 保存退出后給文件添加執(zhí)行權(quán)限
cd  /data/warehouse/egg.git/hooks/
chmod +x post-receive  //給鉤子文件添加執(zhí)行權(quán)限
  • 完成以上服務(wù)端工作已基本完成张足,接著進(jìn)入客戶端操作
  1. 在客戶端創(chuàng)建本地倉庫
    git clone ssh://gc@129.203.74.199/data/warehouse/egg.git   // gc 為前面服務(wù)端創(chuàng)建的用戶名

至此基本可以實(shí)現(xiàn)本地提交代碼至服務(wù)器倉庫egg.git時触创,自動同步代碼到web 站點(diǎn)egg

二. 利用碼云的webhooks實(shí)現(xiàn)自動部署(每次提交代碼,碼云會向配置的服務(wù)器發(fā)送post請求)

  • 在服務(wù)器創(chuàng)建服務(wù)为牍,接收碼云發(fā)送的post請求哼绑,并做更新
  1. 安裝npm包 gitee-webhook-handler(GitHub,GitLab,gitee 的包是不同的岩馍,不能混用)
mkdir /opt/webhook #創(chuàng)建目錄
cd /opt/webhook
npm init # 初始化項(xiàng)目,方便以后遷移
npm install  gitee-webhook-handler --save # 當(dāng)前的版本為v0.1.2

2 . 創(chuàng)建對應(yīng)的webhook服務(wù)

// 文件位置 /opt/webhook /egg/egg.webhook.js
var http = require('http')
var createHandler = require('gitee-webhook-handler')
var handler = createHandler({ path: '/egg/active', secret: 'gcActive12345' }) // path可根據(jù)需要填寫抖韩,post 所需要用到的秘鑰

function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn;
  var child = spawn(cmd, args);
  var resp = "";
  child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
  child.stdout.on('end', function() { callback (resp) });
}
handler.on('error', function (err) {
  console.error('Error:', err.message)
})
handler.on('Push Hook', function (event) {  // 這個地方就是GitHub 和 Gitee 不一樣的地方蛀恩,需要注意
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    run_cmd('sh', ['./egg.sh'], function(text){ console.log(text) }); // 需要執(zhí)行的腳本位置
})
try {
  http.createServer(function (req, res) {
    handler(req, res, function (err) {
      res.statusCode = 404
      res.end('no such location')
    })
  }).listen(9527)  // 服務(wù)監(jiān)聽的端口,可以自行修改
}catch(err){
  console.error('Error:', err.message)
}

3 . 創(chuàng)建用來更新sh腳本;

  # 文件位置  /opt/webhook /egg/egg.sh
  cd  /data/web/activeNew  # 進(jìn)入web站點(diǎn)
  git pull origin master         # 執(zhí)行g(shù)it pull 命令

4 . 使用pm2啟動egg.webhook服務(wù)

npm i pm2 -g  // 安pm2
pm2  start  egg.webhook.js

可以使用pm2 logs來觀察更新日志

  • 配置秘鑰
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  
三次回車
  • 將生成的公鑰添加至碼云
  • 進(jìn)入碼云要自動部署的代碼倉庫帽蝶,點(diǎn)擊右上角的管理 ,如下圖


    1545021134(1).jpg
  • 點(diǎn)擊添加出現(xiàn)如下界面赦肋,輸入服務(wù)器地址,和要監(jiān)聽的端口號


    1545019699(1).jpg
  • 配置完成后點(diǎn)擊測試励稳,返回如下結(jié)果,表示配置成功


    1545021282(1).jpg

做完如上操作囱井,即可實(shí)現(xiàn)代碼提交碼云時驹尼,自定同步到對應(yīng)的web站點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庞呕,一起剝皮案震驚了整個濱河市新翎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌住练,老刑警劉巖地啰,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讲逛,居然都是意外死亡亏吝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門盏混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔚鸥,“玉大人,你說我怎么就攤上這事许赃≈古纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵混聊,是天一觀的道長弹谁。 經(jīng)常有香客問我,道長句喜,這世上最難降的妖魔是什么预愤? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮藤滥,結(jié)果婚禮上鳖粟,老公的妹妹穿的比我還像新娘。我一直安慰自己拙绊,他們只是感情好向图,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布泳秀。 她就那樣靜靜地躺著,像睡著了一般榄攀。 火紅的嫁衣襯著肌膚如雪嗜傅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天檩赢,我揣著相機(jī)與錄音吕嘀,去河邊找鬼。 笑死贞瞒,一個胖子當(dāng)著我的面吹牛偶房,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播军浆,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼棕洋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乒融?” 一聲冷哼從身側(cè)響起掰盘,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赞季,沒想到半個月后愧捕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡申钩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年次绘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片典蜕。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡断盛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愉舔,到底是詐尸還是另有隱情钢猛,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布轩缤,位于F島的核電站命迈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏火的。R本人自食惡果不足惜壶愤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馏鹤。 院中可真熱鬧征椒,春花似錦、人聲如沸湃累。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒙秒,卻和暖如春勃黍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晕讲。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工覆获, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓢省。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓弄息,卻偏偏與公主長得像,于是被迫代替她去往敵國和親净捅。 傳聞我的和親對象是個殘疾皇子疑枯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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