2016第一篇文章,没啥技术含量,权当作个笔记。
我们通常在一些git托管网站托管我们的代码,除了大家耳熟能详的GitHub, 还有国外的Bitbucket等,国内的开源中国、Coding等都是不错的选择。
今天以Coding上私有库的部署为例来讲解如何使用Coding的hook服务来自动部署到生产环境的服务器。
在此目录下建立一个目录
准备工作
- 在Coding.net上创建一个私有库
- 安装了web服务与git服务的服务器
在服务器上
1.创建web服务器用户目录,这里以apache用户为例,不同的环境请根据自己环境自行修改: sudo mkdir /var/www/.ssh
sudo chown -R apache:apache /var/www/.ssh/
2.生成公钥
公钥有两个:1. git用户公钥,2. 部署公钥:
3.用户公钥(用于git clone时认证权限)
ssh-keygen -t rsa -C "anzhengchao@gmail.com"
# 然后一直回车就行
# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径
4.部署公钥
sudo -Hu apache ssh-keygen -t rsa # 请选择 "no passphrase",一直回车下去
sudo cat /var/www/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部
5.准备钩子文件
在你的www目录建立一个目录hook
, 里面放上一个php文件index.php
,内容如下:
<?php |
error_reporting(1); |
$target = __DIR__ . '/../website.com'; // 生产环境web目录 |
$token = '您在coding填写的hook令牌'; |
$wwwUser = 'apache'; |
$wwwGroup = 'apache'; |
$json = json_decode(file_get_contents('php://input'), true); |
if (empty($json['token']) || $json['token'] !== $token) { |
exit('error request'); |
} |
$repo = $json['repository']['name']; |
$dir = __DIR__ . '/repos/' . $repo; |
$cmds = array( |
"cd $dir && git pull", |
"rm -rf $target/* && cp -r $dir/* $target/", |
"chown -R {$wwwUser}:{$wwwGroup} $target/", |
); |
foreach ($cmds as $cmd) { |
shell_exec($cmd); |
} |
repos
:
mkdir repos
修改目录权限:
chown -R apache:apache /www/hook # 这里请改成你创建的hook目录
确保你的hook文件可以访问:http://example.com/hook/index.php,钩子准备完成。
4.修改git配置
git config --global user.name "overtrue"
git config --global user.email "anzhengchao@gmail.com" # 邮箱请与conding上一致
在代码托管网站
1.添加用户公钥 复制上面的/root/.ssh/id_rsa.pub
的内容到个人设置页https://coding.net/user/setting/keys
添加即可
2.复制/var/www/.ssh/id_rsa.pub
的内容并添加到Coding.net公钥:
选择项目 > 设置 > 部署公钥 > 新建 > 粘贴到下面框并确认3.添加hook
选择项目 > 设置 > WebHook > 新建hook > 粘贴你的hook/index.php所在的网址。比如:http://example.com/hook/index.php, 令牌可选,但是建议写上。稍过几秒刷新页面查看hook状态,显示为绿色勾就OK了。
初始化
1.我们需要先在服务器上clone一次,以后都可以实现自动部署了: sudo chown -R apache:apache /www/hook/repos
sudo -Hu apache git clone git@coding.net:you/repo.git /www/hook/repos/ --depth=1
**!!注意,这里初始化clone必须要用www用户**
2.往Coding.net提交一次代码测试:
git commit -am "test hook" --allow-empty
git push
OK,稍微一几秒,正常的话你在代码里配置的目标目录里就会有你的项目文件了。
分类: web
标签:
搜索
标签
study
ab
amap
apache
apahe
awk
aws
bat
centos
CFS
chrome
cmd
cnpm
composer
consul
crontab
css
curl
cygwin
devops
di
docker
docker,docker-compose
ethereum
excel
fiddler
fluentd
framework
front-end
git
gitgui
github
glide
go
golang
gorm
grafana
gzip
ioc
item2
iterm2
javascript
jenkins
jsonp
kafka
laradock
laravel
larval
linux
liunux
log
mac
mac, wi-fi
macos
magento
mariaDB
minikube
mongoDB
msp
mysql
netbeans
nginx
nodejs
nohup
npm
nsq
php
php-fpm
php7
phpstorm
php扩展
Protobuf
python
redis
scp
server
shell
soap
socket
socket5
sql
sre
ssdb
ssh
ssl
study
sublime
swift
system
td-agent
uml
v2ray
vagrant
vagrnat
vim
vpn
vue
vue.js
webpack
webrtc
websocket
webtatic
windows
windows7
word
wps
xdebug
yarn
yii2
yum
zookeeper
世界国家
互联网
以太坊
分类
前端
小程序
打印机
排序算法
搞笑
权限
粤语
缓存
网络
虚拟机
视频
设计模式
项目管理
热门文章
友情链接