利用Webhook实现自动化部署(记录)

胡大大 2018/04/17 17:05:13 426

前言


在日常项目的维护中,通常会在本地git push后,然后去服务器端通过git pull拉取最新的代码,反反复复的重复操作过后,觉得这种方式有点笨,然后通过科学上网了解到自动化部署这种神器,然后就小小的了解了一下,一般自动化部署都是通过webhook来实现的,也有一些做的比较好的自动化部署工具:

上面这些都是很好的自动化部署的工具,结合项目的持续集成,很好用的。而我没有用,我就简单的用了一下webhook,下面是整个过程。本次测试基于码云,ubuntu16.04,GitHub,coding,GitLab同理。

  1. 新建Git仓库

在码云上建立一个git仓库,这个步骤简单,就略过,如果你实在不知道怎么建立仓库,请参考这篇文章码云上创建项目,我这里创建了一个autopull项目。

自动部署

2.在服务器上配置

  1. 打开服务器终端,这里我用的xshell来访问服务器,输入以下命令
    sudo mkdir /var/www/.ssh
  2. 指定目录的访问用户
    sudo chown -R www:www /var/www/.ssh/
  3. 生成ssh公钥,实现访问的码云的项目免口令,下面的邮箱换成你自己的码云账号邮箱
    ssh-keygen -t rsa -C "1235567@qq.com"
    一直回车,会自动创建好公钥,然后进入生成的公钥目录查看生成的公钥,复制全部,然后在码云的个人中心设置页面找到ssh公钥设置,把它添加进去。
    ssh
  4. 部署公钥
    sudo -Hu www ssh-keygen -t rsa,选择no passphrase一直回车
    sudo cat /var/www/.ssh/id_rsa.pub查看生成的秘钥,然后复制全部内容
    进入码云创建好的项目,进入项目管理,把这个秘钥添加到项目
  5. 配置git,邮箱与你自己的码云的邮箱一致
    git config --global user.name "orange"
    git config --global user.email "12341412@qq.com"
  6. 因为服务器是用的宝塔面板管理的服务器,所以直接在/www/wwwroot/目录下新建一个文件夹test,再在test文件夹下建立一个webhook.php文件。将test文件夹赋予给www用户。
    chown -R www:www /www/wwwroot/test
    webhook.php的内容如下:
<?php

password = '您在码云填写的password'; json = json_decode(file_get_contents(‘php://input’), true);
if (empty($json[‘password’]) || $json[‘password’] !== $password) {
exit(‘error request’);
}

cmds = array( 'cd /www/wwwroot/test/autopull && git pull && composer install', 'chown -R www:www /www/wwwroot/test/autopull/', ); foreach (cmds as cmd) { exec(cmd);
}
echo ‘success’;

注意:请确保你的webhook.php文件能够访问,例如http://www.example.com/test/webhook.php

因为PHP默认禁止exec函数,所以请修改PHP的配置文件,在disable_function后面去掉exec函数,然后重启PHP

7.进入码云创建好的项目,点击项目管理,进入webhook管理,添加你的webhook地址


你可以点击测试来测试地址是否能访问。
然后克隆项目到服务器路径/www/wwwroot/test

8.克隆项目到本地,然后随便改点东西推上去,这个时候你再去服务器看刚才的git仓库,就出现了你推送的内容。很神奇有木有,哈哈,然而只是几个命令而已。- -!!

友情提示:如果你部署失败了,一般都是exec函数没有操作权限,请赋予对应的linux用户权限去操作对应的目录。

last but not least:转载请注明出处,happy coding….再见。。。



标签
评论一下

评论列表

  • 孤单又灿烂的人 评论:
抢个沙发
  • 2018/04/17 17:07:11
  • 回复