配置環(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
- 至官網(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)入客戶端操作
- 在客戶端創(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請求哼绑,并做更新
- 安裝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)擊右上角的管理 ,如下圖
-
點(diǎn)擊添加出現(xiàn)如下界面赦肋,輸入服務(wù)器地址,和要監(jiān)聽的端口號
-
配置完成后點(diǎn)擊測試励稳,返回如下結(jié)果,表示配置成功
做完如上操作囱井,即可實(shí)現(xiàn)代碼提交碼云時驹尼,自定同步到對應(yīng)的web站點(diǎn)。