想用openresty做一个git的webhooks, 写lua脚本如下
location = /update {
default_type 'text/plain';
content_by_lua '
ngx.req.read_body()
local body_data = ngx.req.get_body_data()
local jsonData = cjson.decode(body_data)
local secret = jsonData.secret
if secret == nil or secret ~= “admin" then
ngx.say("error")
else
local cmd = "bash -c /home/wwwroot/update_proto.sh"
local t = io.popen(cmd)
t = t:read("*all")
ngx.say(t)
end
';
}
default_type 'text/plain';
content_by_lua '
ngx.req.read_body()
local body_data = ngx.req.get_body_data()
local jsonData = cjson.decode(body_data)
local secret = jsonData.secret
if secret == nil or secret ~= “admin" then
ngx.say("error")
else
local cmd = "bash -c /home/wwwroot/update_proto.sh"
local t = io.popen(cmd)
t = t:read("*all")
ngx.say(t)
end
';
}
验证secret是admin时,执行git命令,update_proto.sh脚本如下
#!/usr/bin/expect -f
set timeout 30
spawn sudo git -C /home/wwwroot/readme.tianxing.net pull
expect "password"
send “admin\r"
interact
readme.tianxing.net在root权限,纯静态
tengine运行在www权限,对readme.tianxing.net只读
所以在root下进行git pull操作
当测试时,发现git不执行,也就是sudo,输入完密码之后,脚本结束了,git没有输出任何信息
单独在www下执行lua
local cmd = "bash -c /home/wwwroot/update_proto.sh"
local t = io.popen(cmd)
t = t:read("*all”)
print(t)
则一切正常...
求各位大神解惑