欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
忘了密码?

扫一扫,访问微社区

快捷导航
搜索
查看: 517|回复: 5

[经验交流] [大学生的233种腾讯云用法][11]LNMP网站环境+GitLab自动部署 - 下

[复制链接]

38

主题

0

好友

1万

积分

版主

Rank: 7Rank: 7Rank: 7Rank: 7

云币
16682
威望
13310
发表于 2017-7-27 14:22:35 |显示全部楼层
前半部分:-上- GitLab/LNMP环境安装

3.1熟悉Git环境与操作
目的:在项目中添加文件,在Web服务器上克隆仓库。

3.1.1建立测试文件
按照自己喜好的方式建立index.php,作为master分支的第一个commit。示例如下:
1.png


3.1.2克隆git仓库
登录Web服务器,切换到相关目录(注意,不是网站目录,是网站目录的上一级),改变所有者为www组的www用户:
  1. cd /home
  2. chown -R www:www wwwroot
复制代码
报错:chown: changing ownership of 'wwwroot/default/.user.ini': Operation not permitted,说明.user.ini权限不足。一般而言无需理会,强迫症可以使用chattr -i。


配置git用户:
  1. git config --global user.email "auto-deploy@qclouddomain.com"
  2. git config --global user.name "auto-deploy"
复制代码
执行命令克隆仓库,注意替换IP地址或域名。
  1. git clone git@119.29.1.1:root/qcloud-student-pack.git
复制代码
就可以看到仓库的目录了:/home/wwwroot/qcloud-student-pack,打开可以看到刚刚创建的index.php。

3.2配置Web
目的:将刚才克隆的仓库作为Web目录。

3.2.1配置
此处仅简要说明:
(1)用lnmp命令创建vhost;
(2)将wwwroot下对应生成的网站目录中的.user.ini移动至仓库目录,权限不足时先chattr -i,移动完成后 +i;
(3)删除网站目录(此时应该已经为空),将仓库目录重命名为网站目录的目录名。

此时,访问(1)中vhost绑定的IP或域名,即可访问仓库中的index.php。
2.png


3.2.2测试

切换至Web服务器命令行,进入本地仓库(网站目录),以www用户的身份执行下面的命令

(1)Pull测试
通过Git修改index.php的文件内容。执行:
  1. git pull
复制代码
返回结果:
3.png

说明已经pull完成。

浏览器访问:
4.png

说明pull成功。

(2)Push测试
新建func.php,内容随意。执行:
  1. git add -A
  2. git commit -m \"push from web server\"
  3. git push origin master
复制代码
返回结果:
5.png

说明已经push完成。

在GitLab中查看:
6.png

说明push成功。

4.1实现半自动部署和回传
目标:编写PHP文件,访问即可触发相关git操作。

在Web服务器某一网站的目录下(建议是直接访问IP对应的目录,如LNMP下的default),创建文件(本例命名为git-qcloud-student-pack.php),内容如下:
务必记得将敏感文件(如数据库配置文件等)加入.gitignore!
  1. <?php

  2. //WARNING! ADD GITIGNORE FOR SQL CONF FILE !!!!!!!!!!!

  3. $path = "/home/wwwroot/studentpack.qclouddomain.com/";

  4. switch($_GET['a']){
  5.     case "pull":
  6.         $res = shell_exec("cd {$path} && git pull 2>&1");
  7.         $res_log = '[AUTODEPLOY][PULL]' . PHP_EOL;
  8.         break;
  9.     case "push":
  10.         $res = shell_exec("cd {$path} && git add -A && git commit -m \"push from gitlab server\" && git push origin master");
  11.         $res_log = '[AUTODEPLOY][PUSH]' . PHP_EOL;
  12.         break;
  13.     case "reset":
  14.         $res = shell_exec("cd {$path} && git fetch origin && git reset --hard origin/master");
  15.         $res_log = '[AUTODEPLOY][RESET]' . PHP_EOL;
  16.         break;
  17. }

  18. if($_GET['a']){
  19.     $res_log .= date('Y-m-d H:i:s') . PHP_EOL;
  20.     $res_log .= $res . PHP_EOL;
  21.     file_put_contents("git-qcloud-student-pack.txt", $res_log, FILE_APPEND);
  22. }

  23. echo "git-core";

  24. ?>
复制代码
解释:
(1)第5行,为完整的网站目录,注意末尾的正斜杠;
(2)第13行,自定义commit message;
(3)第25行,将操作记录追加到和本文件(git-qcloud-student-pack.php)同目录下的同名txt文件中,作为日志;
(4)第28行,作为返回信息。

此时,访问服务器IP或域名/git-qcloud-student-pack.php?a=pull,或a=push,即可实现相关功能。reset用于紧急情况。

4.2实现全自动部署和回传

目标:通过设置GitLab中的Webhook,或在业务代码中访问上一步的PHP,实现全自动部署和回传。

4.2.1全自动部署

登录GitLab,进入对应项目,选择Settings > Integrations,填入上一步PHP文件的访问地址:
7.png

注意末尾是pull,因为向GitLab的push操作会触发这个钩子,Web服务器需要将代码从GitLab上拉下来。

Trigger即为触发条件,本例选择Push events和Merge request events。SSL选项视情况而定。
点击绿色Add webhook按钮保存。

提交后即可看到钩子列表,点击右侧的Test按钮进行测试。
8.png

于是GitLab显示请求成功:
9.png

而通过浏览器访问日志文件,也表明收到请求:
10.png


此时我们来真正测试一下:
(1)访问index.php,记录当前的运行结果(应该与其上次出现的内容一致);
(2)修改index.php并提交,本例新增一行输出;
(3)访问index.php,发现文件内容已经更新:

而日志也已经更新:
11.png


说明全自动部署成功。

【可能出现的错误,如无则跳过此步】

如果日志仅记录了时间,而文件并没有更新,则一般是由shell_exec函数被禁用造成的。
  1. vi /usr/local/php/etc/php.ini
复制代码
搜索disable_functions,将其后的shell_exec及逗号删除,保存,使用lnmp restart命令重启Web服务,即可。


4.2.2全自动回传
PHP业务代码在执行了上传文件到Web服务器的操作后,模拟访问git-qcloud-student-pack.php?a=push,即可将刚刚上传的文件(如图片)push至GitLab。此处请自行配置与尝试。
12.png



本部分到此结束。

本篇文章到此结束,感谢阅读。

72

主题

2

好友

1万

积分

版主

Rank: 7Rank: 7Rank: 7Rank: 7

云币
21138
威望
13897
发表于 2017-7-27 16:13:58 |显示全部楼层
感谢分享!!!!!
回复

使用道具 举报

0

主题

0

好友

20

积分

小白[LV1]

Rank: 1

云币
70
威望
20
发表于 2017-8-25 09:28:53 |显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

0

好友

60

积分

小白[LV1]

Rank: 1

云币
240
威望
60
发表于 2018-2-1 10:42:04 |显示全部楼层
在3.1.2克隆git仓库下面的命令,你这里是已经进入了web服务器,那么意思是web服务器要安装git服务才可以使用git命令?不然会提示没有git这个命令。
git config --global user.email "auto-deploy@qclouddomain.com"
回复

使用道具 举报

0

主题

0

好友

60

积分

小白[LV1]

Rank: 1

云币
240
威望
60
发表于 2018-2-1 10:48:11 |显示全部楼层
有点看不懂这个
微信图片_20180201104346.png
回复

使用道具 举报

38

主题

0

好友

1万

积分

版主

Rank: 7Rank: 7Rank: 7Rank: 7

云币
16682
威望
13310
发表于 2018-2-10 17:56:06 来自手机 |显示全部楼层
是的,Web 服务器上需要安装 git。当时楼主用腾讯云 CentOS 7.3 镜像测试的时候是自带 git 的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
您需要登录后才可以发帖 QQ登录

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2018-2-18 07:14 , Processed in 1.173621 second(s), 30 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部