背景
第一次写文章,有写的不好或者有不对的地方,还请多多指教,以后会继续努力,持续更新。
由于自己要搭建一个简单的项目,代码的托管放在了github上,使用ide进行代码ftp的上传到自己的服务器虽然比较方便,在不同的电脑上开发则会存在覆盖代码的风险,那么就想到了既然代码在github上进行了托管,那就使用github自动同步到自己服务器上不就好了,于是就有接下来的思路。实现当前自动化更新代码的方式有很多很多中,我只是说我自己实现的一种:openResty(基础环境)+lua(接收请求,执行shell)+shell(更新远程代码到本地)。
目录
- 安装openResty
- 服务器安装git
- 编写lua,执行脚本
- 编写shell,更新本地代码
步骤
1.安装openResty
官网安装教程,详情 点击这里
2.服务器安装git
本人的服务器是ubuntu服务器,版本为Ubuntu 18.04.2 LTS。
安装git很简单,只要执行几个命令即可安装:
- 确保你的系统和apt包列表完全更新,执行以下命令:
apt-get update -y
- 安装git:
apt install git
- 查看是否安装成功:
git --version
上图显示了git的版本号,则说明安装成功。
- 配置git
git config --global user.name "你的用户名" //设置全局用户名
git config --global user.email "你的邮箱" 设置全局邮箱
- 查看设置的用户名和邮箱可使用:
git config --list
安装了git以后要进行本地服务器和远程github通信,那么这里使用ssh(免密)通信:
进入家目录的ssh文件夹内,查看是否存在 id_dsa.pub 和 id_dsa 文件
cd ~/.ssh
如果不存在,则 使用一下命令创建:
ssh-keygen -t rsa -C "youremail@yourcompany.com"
不需要输入任何东西,一路回车即可创建成功。
然后再次查看目录下的文件列表,则会存在 id_dsa.pub 和 id_dsa 文件
则直接将 id_dsa.pub 文件的内容增加到github中即可:
1.进入github的设置中心
2.选择 SSH and GPG keys 进行增加密钥
3.进行增加密钥
粘贴密钥,点击增加ssh密钥即可完成。
3.编写lua,执行shell脚本
在编写lua之前,要进行编写nginx配置文件,使访问的地址可以直接使用lua进行解析,然后去执行对应的shell脚本执行。
- nginx配置
安装后的配置文件在 /usr/local/openresty/nginx/conf 目录下,自己创建了conf.d文件夹,讲该文件加下文件加载到默认配置文件内,在底部增加:
#导入外部服务器配置文件存放地址
include /usr/local/openresty/nginx/conf/conf.d/*.conf;
放在server {} 的外层即可,include 导入自己的配置文件制定的目录中,最后 *.conf 标识所有后缀为".conf"的文件,全部导入。
我的配置文件在 /usr/local/openresty/nginx/conf/conf.d 目录下
下面是配置文件的内容:
server {
listen 80; #监听的端口
server_name xxx.xxx.xxx; #监听的访问域名
location / {
default_type text/html;
content_by_lua_file /data/eh/pull/pull.lua; #指定指定的lua文件
}
}
可以看得出来,这是最最最基础能够访问和使用的一个配置文件,想要做更多的优化还需要对nginx做进一步的了解,其实这个配置只是保证能够使用即可。
后续会持续更新一个nginx详细配置的文章。
- lua代码的编写:
local shell = require "resty.shell" -- 引入执行shell的扩展(该扩展要单独下载)
local args = {
socket = "unix:/tmp/shell.sock", --这是第一步的unxi socket
}
local status, out, err = shell.execute("sh /data/eh/pull/pull.sh", args) --执行shell脚本
ngx.header.content_type = "text/plain" --设置头
ngx.say("Result:\n" .. out) -- 命令输出结果
这里完全可以在直接 ngx.say(“hello world”) 进行请求指定地址进行访问调试,输出经典语句 ,调试通了以后再次进行补入以上代码,当前代码并没有进行验证是否为github的hookweb请求,这个需要增加加密验证。
- github Webhooks 配置
找到自己的项目,点击进入项目中,第一步:点击设置 settings ->webhooks->add webhook
点击add webhook:
Payload URL
进行填写自己调试好的url地址。
Content type
选择 application/json ,便会在接收方一json的形式接受参数
Secret
相当于加密的盐(自己随便填写,可以不填写,也可以填写。填写以后则需要在接收放进行加密验证,判断是否来自github的webhook请求)
Which events would you like to trigger this webhook?
选择 “Just the push event.” 近push操作提交的时候回调
4.编写shell,执行git命令更新本地代码
shell文件的编写其实也是最最最基础可用的代码,并还没有做任何的优化,去执行shell不过就是去到指定的目录中执行git的拉取代码更新到本地的命令而已。
#! /bin/bash
echo "cd /date/eh/app/www.zanehy.top...\n"
# 切换到项目目录
cd /data/eh/app/www.zanehy.top
# 执行git命令,(需要执行有权限的用户,这里有点坑需要注意)
sudo -u zhanghy git pull origin master
echo " exec git pull origin master...\n"
echo "Success\n";
就是简单的几句话即可,进入指定目录,执行git的操作命令行。这里需要注意的是,在执行git命令的时候要使用有权限(项目权限,git权限)的用户(指定用户)去执行git的命令行,否则会直接执行失败。