DevOps(十四)怎么实现Gitlab更新后Jenkins自动发布

目录

1、在 Jenkins 中安装 GitLab 插件

2、在 GitLab 中创建一个访问令牌(Access Token)

3、在 Jenkins 中配置 GitLab 连接

4、在 Jenkins 中创建一个新的任务(Job)

5、在 GitLab 中配置 Webhook

6、以下是一些补充说明和建议


持续集成的一个特点就是开发可以随时提交,随时进行集成测试,当开发工程师将代码提交到GitLab 以后,jenkins怎么样自动触发进行编译和并将制品发布到测试环境呢?要实现在开发工程师将代码提交到 GitLab 后自动触发 Jenkins 进行编译和发布,可以按照以下步骤进行配置:

1、在 Jenkins 中安装 GitLab 插件

  • 进入 Jenkins 管理页面,选择"管理插件"
  • 在可用插件列表中搜索"GitLab",勾选"GitLab Plugin"
  • 点击"直接安装"按钮,安装插件

2、在 GitLab 中创建一个访问令牌(Access Token)

  • 进入 GitLab 的用户设置页面,选择"Access Tokens"
  • 填写令牌名称,并勾选相应的权限(如 api、read_repository 等)

  • 点击"Create personal access token"按钮,生成访问令牌

  • 复制生成的访问令牌,稍后将在 Jenkins 中使用

3、在 Jenkins 中配置 GitLab 连接

  • 进入 Jenkins 管理页面,选择"系统配置"
  • 滚动到"GitLab"部分,点击"添加 GitLab 服务器"

  • 填写 GitLab 服务器的 URL(如 http://gitlab.povison-pro.com/,这里填你自己的GitLab服务器URL)
  • 在"Credentials"部分,选择"添加"并选择"GitLab API token"

  • 将之前复制的 GitLab 访问令牌粘贴到"API token"字段
  • 点击"Test Connection"按钮,验证连接是否成功
  • 保存 Jenkins 系统配置

4、在 Jenkins 中创建一个新的任务(Job)

  • 点击 Jenkins 主页的"新建任务"
  • 输入任务名称,选择"构建一个自由风格的软件项目",点击"确定"
  • 在任务配置页面,选择"源码管理"选项卡
  • 选择"Git"作为源码管理工具
  • 在"Repository URL"字段中,填写 GitLab 仓库的 URL(如 git@gitlab.example.com:username/project.git)

注意:红色箭头指示的这里替换你访问GitLab的仓库相关参数

  • 在"构建触发器"选项卡中,勾选"Build when a change is pushed to GitLab"

  • 在"高级"部分,可以配置触发条件,如指定分支、标签等,这些条件

  • 生成Secret token,先暂存一下,用于GitLab配置WebHook时填写。
  • 在"构建"选项卡中,添加构建步骤,如执行 shell 脚本、调用 Maven 等,根据项目需求进行配置,这里我们选择shell脚本,我们前面布署helloworld项目的 Jenkins Pipeline 代码转换为以下 Shell 脚本:
    #!/bin/bash
    
    # Stop Application
    serviceStatus=$(sudo supervisorctl status django 2>/dev/null | awk '{print $2}')
    if [ "$serviceStatus" == "RUNNING" ]; then
        sudo supervisorctl stop django
    else
        echo "Django process not running or does not exist."
    fi
    
    # Prepare Deployment
    sudo rm -rf /opt/HelloWorld/*
    sudo cp -R . /opt/HelloWorld
    
    # Configure Supervisor
    sudo cp /opt/HelloWorld/django.conf /etc/supervisor/conf.d/django.conf
    sudo supervisorctl reread
    sudo supervisorctl update
    
    # Restart Application
    sudo supervisorctl restart django
    

    这个 Shell 脚本的功能与 Jenkins Pipeline 代码相同,分为以下几个阶段:

    • Stop Application:

      • 使用 sudo supervisorctl status django 命令检查 Django 服务的状态。
      • 如果服务正在运行,使用 sudo supervisorctl stop django 命令停止服务。
      • 如果服务未运行或不存在,输出相应的信息。
    • Prepare Deployment:

      • 使用 sudo rm -rf /opt/HelloWorld/* 命令清理 /opt/HelloWorld 目录下的旧代码。
      • 使用 sudo cp -R . /opt/HelloWorld 命令将当前目录下的新代码复制到 /opt/HelloWorld 目录。
    • Configure Supervisor:

      • 使用 sudo cp /opt/HelloWorld/django.conf /etc/supervisor/conf.d/django.conf 命令将 django.conf 文件复制到 Supervisor 的配置目录。
      • 使用 sudo supervisorctl reread 命令让 Supervisor 重新读取配置文件。
      • 使用 sudo supervisorctl update 命令更新 Supervisor 的配置。
    • Restart Application:

      • 使用 sudo supervisorctl restart django 命令重启 Django 服务。
    • 脚本在 Django 项目的根目录下运行。
    • django.conf 文件已经准备好,并位于项目的根目录下。
    • 脚本运行时具有足够的权限执行 sudo 命令。
  • 保存任务配置

5、在 GitLab 中配置 Webhook

  • 进入 GitLab 项目的设置页面,选择"Webhooks"
  • 在 URL 字段中,填写 Jenkins 的 Webhook URL,格式为 http://<jenkins-url>/project/<job-name>,注意这个是在你在jenkins配置"Build when a change is pushed to GitLab"时生成的,没记住的,回去jenkins任务那里获取,还有一个Secret token参数也需要填写。

  • 在 Trigger 部分,勾选"Push events",表示在代码推送时触发 Webhook
  • 点击"Add webhook"按钮,添加 Webhook

注意,在jenkins内网地址的时候,保存Webhook的时候会提示错误“Url is blocked: Requests to the local network are not allowed”。

通常是由于 GitLab 服务器的安全设置限制了对本地网络的请求。

GitLab 默认禁止向本地网络发送请求,以防止潜在的安全风险。如果你的 Jenkins 服务器和 GitLab 服务器在同一个本地网络中,就会触发这个安全限制。

为了解决这个问题,你可以通过以下方式之一进行配置:

在 GitLab 服务器上允许向本地网络发送请求:

  • 以管理员身份登录 GitLab。
  • 进入 Admin Area (管理区域)。
  • 在左侧菜单中,选择 "Settings" (设置)。
  • 在 "Network" (网络)部分,找到 "Outbound requests" (出站请求)。
  • 勾选 "Allow requests to the local network from hooks and services" (允许来自钩子和服务的本地网络请求)选项。
  • 保存设置。

使用 Jenkins 服务器的外部可访问地址作为 Webhook URL:

  • 如果 Jenkins 服务器有一个外部可访问的域名或 IP 地址,可以使用该地址作为 Webhook URL。
  • 将 Jenkins 的 Webhook URL 修改为使用外部地址,例如 http://jenkins.example.com/project/my-project
  • 确保 GitLab 服务器能够通过该外部地址访问到 Jenkins 服务器。

配置 GitLab 的白名单:

  • 在 GitLab 服务器上,找到 GitLab 的配置文件,通常位于 /etc/gitlab/gitlab.rb
  • 打开配置文件进行编辑。
  • 找到 gitlab_rails['webhook_local_net'] 配置项。
  • 将 Jenkins 服务器的 IP 地址或网络范围添加到该配置项中,例如:
    gitlab_rails['webhook_local_net'] = ['192.168.1.0/24', '10.0.0.0/8']
    
  • 保存配置文件。
  • 重新配置 GitLab:
    sudo gitlab-ctl reconfigure
    

选择适合你的方式进行配置,然后重新尝试在 GitLab 中添加 Jenkins 的 Webhook URL。如果配置正确,应该就不会再出现 "Url is blocked" 的错误提示了。

完成以上配置后,当开发人员将代码推送到 GitLab 仓库时,GitLab 会自动发送一个 Webhook 请求到 Jenkins。Jenkins 接收到请求后,会根据配置的触发条件判断是否需要执行构建任务。如果满足触发条件,Jenkins 将自动拉取最新的代码,并按照配置的构建步骤进行编译和发布。

到这里我们就完成了整个流程。

6、以下是一些补充说明和建议

构建触发条件:

  • 在 Jenkins 任务的"构建触发器"部分,除了勾选"Build when a change is pushed to GitLab"外,还可以配置其他触发条件,如定时构建、手动触发等。
  • 在"高级"部分,可以根据项目需求设置更细粒度的触发条件,如指定分支、标签、目录路径等。

构建步骤:

  • 在 Jenkins 任务的"构建"部分,根据项目的技术栈和构建需求,添加相应的构建步骤。常见的构建步骤包括:
    • 执行 shell 脚本:可以编写 shell 脚本来执行编译、测试、打包等操作。
    • 调用构建工具:如 Maven、Gradle 等,可以通过 Jenkins 的插件来调用这些构建工具。
    • 使用 Jenkins Pipeline:通过编写 Jenkinsfile,可以定义更复杂的构建流水线,包括多个阶段和步骤。

发布和部署:

  • 在构建完成后,可以将构建产物发布到指定的位置,如部署服务器、应用容器等。
  • 可以使用 Jenkins 的插件或编写脚本来实现自动化部署,如 SSH 插件、Docker 插件等。

通知和报告:

  • 在构建完成后,可以配置 Jenkins 发送通知,如邮件通知、即时通讯通知等,以便及时了解构建结果。
  • 可以生成构建报告,如测试报告、代码覆盖率报告等,并在 Jenkins 界面中展示,方便查看和分析。

权限控制:

  • 根据团队成员的角色和权限,可以在 Jenkins 中配置不同的用户权限,如只读权限、构建权限、管理权限等。
  • 可以与 GitLab 的用户认证集成,实现单点登录和权限同步。

扩展和优化:

  • 可以探索 Jenkins 的其他插件和功能,如 Pipeline as Code、多分支流水线、参数化构建等,以满足更复杂的持续集成和持续部署需求。
  • 对于大型项目,可以考虑使用 Jenkins 的分布式构建功能,将构建任务分发到多个节点上并行执行,提高构建效率。

持续集成是一个持续优化和改进的过程,需要根据项目的实际情况不断调整和完善。通过自动化构建、测试和部署,可以提高开发效率,减少错误,并加快交付速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/574899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务组件-反向代理(Nginx)

微服务组件-反向代理(Nginx) Nginx 基本概念 1、nginx是什么&#xff1f; ①、Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器同时也提供了IMAP/POP3/SMTP服务。它是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&a…

TiDB 6.x 新特性解读 | Collation 规则

对数据库而言&#xff0c;合适的字符集和 collation 规则能够大大提升使用者运维和分析的效率。TiDB 从 v4.0 开始支持新 collation 规则&#xff0c;并于 TiDB 6.0 版本进行了更新。本文将深入解读 Collation 规则在 TiDB 6.0 中的变更和应用。 引 这里的“引”&#xff0c;…

Oracle 监控 SQL 精选 (一)

Oracle数据库的监控通常涉及性能、空间、会话、对象、备份、安全等多个层面。 有效的监控可以帮助 DBA 及时发现和解决问题&#xff0c;提高数据库的稳定性和性能&#xff0c;保障企业的数据安全和业务连续性。 常用的监控指标有&#xff1a; 性能指标&#xff1a; 查询响应时间…

产品推荐 | BittWare基于Altera Agilex“M FPGA的lA-860m加速卡

01 产品概述 BittWare的lA-860m是一款Altera Agilex“M系列FPGA卡&#xff0c;针对吞吐量和内存密集型应用进行了优化。M 系列 FPGA 具有广泛的内存层次结构&#xff0c;包括集成高带宽存储器 &#xff08;HBM2e&#xff09; 和硬内存片上网络 &#xff08;NoC&#xff09;&am…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下&#xff1a; ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

Vivado-IP-DDS and Testbench Learning

DDS内部结构 实现流程 首先新建一个工程&#xff0c;创建bd文件&#xff0c;添加DDS Compiler核&#xff0c;此处不多赘述 Block Design 在观测输出的信号时&#xff0c;需要将最高位符号位的信号取反&#xff0c;这样才能输出正弦波&#xff0c;否则输出的波形如下图所示 将t…

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高&#xff0c;而且过程比较复杂&#xff0c;涉及的步骤非常多&#xff0c;有一定难度&#xff0c;可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…

实验 1--SQL Server2008数据库开发环境

文章目录 实验 1--SQL Server2008数据库开发环境2.4.1 实验目的2.4.2 实验准备2.4.3 实验内容1.利用 SSMS 访问系统自带的Report Server 数据库。2.熟悉了解 SMSS对象资源管理器树形菜单相关选择项的功能。(1)右键单击数据库Report Server&#xff0c;查看并使用相关功能;(2)选…

K8s: 部署 kubernetes dashboard

部署 Dashboard K8s 官方有一个项目叫 dashboard&#xff0c;通过这个项目更方便监控集群的状态 官方地址: https://github.com/kubernetes/dashboard 通常我们通过命令行 $ kubectl get po -n kube-system 能够查看到集群所有的组件&#xff0c;但这样的方式比较不太直观 …

算法学习002-填数游戏 中小学算法思维学习 信奥算法解析 c++实现

目录 C填数游戏 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C填数游戏 一、题目要求 1、编程实现 在小学奥数中经常会看到一些填数字的游戏&#xff0c;如下图所示&#xff0c;其中每个…

【Web】第三次

【Web】第三次 1.完成学校官方网站页面制作2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 2.使用动画完成过渡变换效果 1.完成学校官方网站页面制作 html&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://…

OpenCV 实现重新映射

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 实现霍夫圆变换 下一篇 :OpenCV实现仿射变换 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 一个。使用 OpenCV 函数 cv&#xff1a;&#xff1a;remap 实现简单的重新…

Socket编程实验

文章目录 服务端&#xff1a;客户端&#xff1a;使用说明&#xff1a;封装后服务端&#xff1a;封装后客户端 听学弟学妹们反馈&#xff0c;好像老师发的socket编程实验指导里的代码跑不起来。 今天花了一大把时间写了下socket编程代码 现在附上能跑的c代码&#xff1a; 最重要…

nosql数据库 redis

一、介绍 1、redis与mysql的区别&#xff1a; Redis是一种基于键值对的内存数据库&#xff0c;数据存储在内存中&#xff0c;因此读写速度非常快。它支持多种数据结构&#xff0c;如字符串、哈希、列表等。 MySQL是一种关系型数据库&#xff0c;数据以表格的形式组织存储在磁…

12.6.1 实验5:IOS恢复

1、实验目的 通过本实验可以掌握&#xff1a; copy方式恢复IOS的步骤。TFTPDNLD方式恢复IOS的步骤。Xmodem方式恢复IOS的步骤。 2、实验拓扑 路由器IOS恢复的实验拓扑如下图所示。 3、实验步骤 如果工作中不慎误删除路由器IOS&#xff0c;或者升级了错误版本的IOS&#xff…

Sylar C++高性能服务器学习记录06 【线程模块-代码分析篇】

早在19年5月就在某站上看到sylar的视频了&#xff0c;一直认为这是一个非常不错的视频&#xff0c;还有幸加了sylar本人的wx&#xff0c;由于本人一直是自学编程&#xff0c;基础不扎实&#xff0c;也没有任何人的督促&#xff0c;没能坚持下去&#xff0c;每每想起倍感惋惜。恰…

机器学习day3

一、距离度量 1.欧氏距离 2.曼哈顿距离 3.切比雪夫距离 4.闵可夫斯基距离 二、特征与处理 1.数据归一化 数据归一化是一种将数据按比例缩放&#xff0c;使之落入一个小的特定区间的过程。 代码实战 运行结果 2.数据标准化 数据标准化是将数据按照其均值和标准差进行缩放的过…

2024最新版JavaScript逆向爬虫教程-------基础篇之面向对象

目录 一、概念二、对象的创建和操作2.1 JavaScript创建对象的方式2.2 对象属性操作的控制2.3 理解JavaScript创建对象2.3.1 工厂模式2.3.2 构造函数2.3.3 原型构造函数 三、继承3.1 通过原型链实现继承3.2 借用构造函数实现继承3.3 寄生组合式继承3.3.1 对象的原型式继承3.3.2 …

paddle ocr v4 微调训练文字识别模型实践

识别步骤参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据准备…

【漏洞复现】Weblogic 任意文件上传漏洞(CVE-2018-2894)

漏洞简介 Oracle在7月更新中&#xff0c;修复了Weblogic Web Service Test Page中一处任意文件上传漏洞&#xff0c;Web Service Test Page在"生产模式"下默认不开启&#xff0c;所以该漏洞有一定限制&#xff0c;利用该漏洞&#xff0c;可以上传任意.jsp文件&#x…