个人博客地址:GitLab + Jenkins + Nginx + Lua 实现代码自动分发 | 一张假钞的真实世界
在大数据Hive数据仓库的开发中,主要是shell + HQL的脚本开发。脚本的测试需要放到适当的大数据环境中进行。如果大家共用GitLab项目上的同一个Branch进行测试需要代码频繁合并,影响效率。我的思路是每个Developer在自己的Branch开发并经过测试后发起Merge Request。
在我的开发场景中GitLab在内网中通过端口映射后允许从外网访问,GitLab中的IP都是内网的,GitLab上的项目链接地址都是内网的,如(ssh://git@192.168.1.10:50022/test/test.git)。并且我的Jenkins也是在内网中的,所以需要通过一层代理接收外部的REST API请求。这一点给最终的实现带来一些难点。
系统架构
GitLab 项目配置
在GitLab项目上配置WebHook:
这样每次项目的push操作都会向这个配置的URL发送一个Post请求。每次WebHook的执行情况可以点击WebHook后面的Edit按钮在编辑页面中查看。
Nginx + Lua
OpenResty安装
直接使用推荐的预编译OpenResty安装。Centos 7.3执行以下命令:
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
sudo yum install openresty
安装OpenResty Lua HTTP客户端模块
下载GitHub项目代码:lua-resty-http
将lib/resty目录下的两个文件http.lua和http_headers.lua放到OpenResty安装对应的目录下(如:/usr/local/openresty/lualib/resty)。
Nginx配置
nginx.conf配置内容如下。主要是使用Lua解析从GitLab WebHook发送来的数据,并解析需要的参数后通过Jenkins的REST API发送给Jenkins。
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
content_by_lua_block {
local cjson = require "cjson"
local http = require "resty.http"
local httpc = http.new()
ngx.req.read_body()
local data = ngx.req.get_body_data()
local json = cjson.decode(data)
local after = json["after"]
if ( after == "0000000000000000000000000000000000000000" )
then
ngx.status = 200
ngx.say("delete branch do not need build")
return
end
local projectName = json["project"]["name"]
local userName = json["user_name"]
local ref = json["ref"]
local branchName = string.sub(ref, 12)
if ( branchName == "master" )
then
ngx.status = 200
ngx.say("master branch do not need build")
return
end
local uri = "http://172.16.72.200:8080/job/DataWarehouse/buildWithParameters?userName="
uri = uri..userName.."&branchName="..branchName.."&projectName="..projectName
local res, err = httpc:request_uri(uri, {
method = "POST"
})
ngx.status = res.status
ngx.say(res.body)
}
}
}
Jenkins项目配置
配置参数化构建的项目
注意参数名称与Lua发送请求的参数名称要对应,如下图:
代发分发逻辑
在构建的Shell中实现代码分发到对应Developer的个人目录下:
标签:http,Lua,local,GitLab,Nginx,Jenkins,ngx From: https://blog.csdn.net/weixin_46161645/article/details/145083737