使用git和码云实现代码的自动部署

先说下基本流程

1、首先在码云创建一个项目,名为test

2、在本地创建git版本库,拉取码云上的test代码,与码云上的test项目建立连接

3、远程工作服务器克隆码云上的test代码,与码云上的test项目建立连接

4、在远程服务器上的工作目录建立一个webhooke.php文件,作为回调脚本

5、设置码云上test项目的webhook回调地址为上一步建立的文件地址

6、本地同步代码到码云后,远程工作服务器会自动从码云拉取代码

流程是比较简明容易理解的,不过过程却是曲折的。主要还是对linux服务器不熟悉,造成了走弯路。

下面就回顾一下整个实现过程和遇到坑

一、安装git

按照百度搜索到的教程,一步步安装。链接:https://jingyan.baidu.com/article/e9fb46e16698687521f766ec.html 安装过程中出现错误,提示 undefined reference to `libiconv'

安装libiconv,详细链接地址:http://blog.csdn.net/daojibruce/article/details/75315401
这里写图片描述

二、在工作服务器拉取项目

1、首先在服务器上生成秘钥,并把秘钥填写到码云的设置中

这里要注意的是:生成密钥匙时,要使用http服务器的用户生成。否则当运行webhook.php文件,链接git时,shell脚本的执行者是http服务器的用户www,系统会到www用户的家目录下寻找对应的秘钥。

所以在生成密钥时,不能直接 ssh-keygen -t rsa -C “码云的邮箱”,这样写会直接在当前用户root的家目录生成秘钥。所以我们要切换到www用户执行该命令,或者直接使用sudo运行该命令:sudo -u www ssh-keygen -t rsa -C “码云的邮箱”,然后一路回车即可。

然而我又遇到了个,输出如下错误:/dev/null:NOt a directory

这个问题找了半天,终于找到问题的原因。是因为www用户的家目录设置有误,所以生成密钥时,找不到存储位置。使用命令查看用户的家目录位置,如下:
这里写图片描述
www用户的家目录本应是www目录,不知道怎么变成dev/null。改成www后,在www目录下建立.ssh文件夹,运行命令成功。

去到.ssh目录下,把is_rsa.pub文件中的字符串复制下,填到码云

2、克隆test项目

还是使用www用户,运行git命令,克隆test项目:sudo -u www git clone ssh:git@xxxxxxx

然后又输出错误信息,提示没有发现git命令。是因为当前用户的环境变量里没有设置git的路径,可以去设置环境变量,或者直接把路径拼接在git前面即可。使用git –exec-path 查看git的运行路径,然后执行:

sudo -u www /usr/local/libexec/git-core/git clone ssh:git@xxxxxxx

三、webhook.php

webhook.php文件逻辑比较简单。接受到码云发送的请求后,验证下密码,判断是否合法,然后执行shell命令即可:shell_exec(“sudo -u www /usr/local/libexec/git-core/git pull”);

猜你喜欢

转载自blog.csdn.net/u012830303/article/details/82255431