首页 > 系统相关 >GitLab + Jenkins + Nginx + Lua 实现代码自动分发

GitLab + Jenkins + Nginx + Lua 实现代码自动分发

时间:2025-01-12 19:02:49浏览次数:3  
标签:http Lua local GitLab Nginx Jenkins ngx

个人博客地址: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:

GitLabWebHook


这样每次项目的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

相关文章

  • 使用RSyslog将Nginx Access Log写入Kafka
    个人博客地址:使用RSyslog将NginxAccessLog写入Kafka|一张假钞的真实世界环境说明CentOSLinuxrelease7.3.1611kafka_2.12-0.10.2.2nginx/1.12.2rsyslog-8.24.0-34.el7.x86_64.rpm创建测试Topic$./kafka-topics.sh--zookeeper192.168.72.25:2181/kafka--create--......
  • 云服务器登录无权限,Nginx无法启动
    服务器系统可能处于只读状态,导致您无法正常登录并修改配置文件。我们已经为您进入单用户模式修复了文件系统,现在Nginx可以正常运行了。非常感谢您长期对我司的支持!出现这种情况的原因可能是某些程序未正常停止,导致文件系统出现问题。建议您以后多观察服务器的状态,确保所有程序都......
  • 宝塔面板Nginx无法启动或启动失败的原因及解决办法
    宝塔面板中的Nginx服务在启动时遇到问题可能是由多种原因引起的。为了帮助您诊断和解决问题,以下是详细的排查步骤和解决方法。一、问题概述宝塔面板中的Nginx服务无法启动或启动失败可能发生在以下几种情况:初次安装Nginx即无法启动。安装或修改了相关配置后导致无法启动。正......
  • [笔记] 使用 Jenkins 和 Nginx 实现前端项目的持续集成与部署 (CICD) : 从 GitLab 拉
    在现代软件开发中,持续集成与持续部署(CI/CD)已经成为提高开发效率、保证代码质量的重要手段。对于前端项目来说,如何快速、稳定地将代码从开发环境推送到生产环境,是一个关键问题。本文将详细介绍如何使用Jenkins和Nginx实现前端项目的CI/CD流程,确保每次代码提交都能自动......
  • 基于gitlab数据的还原研究
    通过oss权限获取部分不明数据1.1全部数据及格式分析1.1.1下载文件中的文件内容通过oss服务器获取了一些包含bundle、checksum、list、lsremote后缀文件。1、list文件内容2、lsremote文件内容3、bundle文件内容bundle中发现有gitbundle4、checksum文件内容checksum文......
  • GitLab CISO谈DevSecOps成功:主动监测与指标是关键
    原创MirkoZorz信息安全D1netGitLab的CISOJoshLemos探讨了从DevOps到DevSecOps的转变,指出构建系统复杂性和安全工具集成是企业面临的主要挑战,他建议简化构建系统,将安全检查直接融入流水线,并采取措施避免次优设计决策,同时,强调了以软件最小化为目标、在非阻塞模式下逐个项目......
  • 05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
    Docker学习,常用安装:Mysql、Redis、Nginx、Nacos一、Docker安装Mysql1、dockersearchmysql ##查找mysql版本都有哪些2、dockerpullmysql:5.6 ##下载5.6版本的mysql镜像3、dockerrun-p13306:3306--namemysql ##运行镜像生成容器-v/opt......
  • 学习- Nginx -浅谈Keepalived实现服务高可用的实现原理
    浅谈Keepalived实现服务高可用的实现原理一、原理两个Nginx服务器IP地址分别为192.168.44.111和192.168.44.112,对我们的应用服务器做负载均衡。为了保证服务高可用,在两台服务器上安装Keepalived软件(可以互相通信)。Keepalived会创建一个虚拟IP地址(vip-VirtualIPAddress),此......
  • GitLab安装与配置
    由于图片和格式解析问题,为了更好阅读体验可前往阅读原文对于gitlab的安装本人都是在arm架构Centos7.9虚拟机上进行的,请悉知本人安装环境,或者与本人的环境保持一致,以便产生不必要的疑惑这里使用docker安装Gitlab,机器上需要先安装docker,如果你还不知道docker,可以先看看我的往期......
  • NGINX--HTTP&TCP负载均衡
    一、HTTP负载均衡1、基本介绍在多应用实例中,通常可以用nginx来做负载均衡器来分发流量,以达到提高应用吞吐量、降低时延、调优性能、提供容错性等。2、http负载均衡最简单的配置如下http{upstreammyapp1{serversrv1.example.com;serversrv2.......