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

news2024/12/23 14:34:41

目录

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 的分布式构建功能,将构建任务分发到多个节点上并行执行,提高构建效率。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SRE运维和DevOps之间是什么关系?

一、SRE运维和DevOps之间是什么关系&#xff1f; SRE运维和DevOps之间存在紧密的联系和相互依赖。 首先&#xff0c;两者都是开发运维一体化时代的产物&#xff0c;旨在通过协同工作来构建高效可靠的软件运维团队。SRE&#xff08;Site Reliability Engineering&#x…

【UE5.1 C++】提升编译速度

步骤 1. 在“C:\Users\用户\AppData\Roaming\Unreal Engine\UnrealBuildTool”目录下找到“BuildConfiguration.xml”文件 打开“BuildConfiguration.xml”&#xff0c;添加如下部分内容 <?xml version"1.0" encoding"utf-8" ?> <Configuratio…

FastGPT编译前端界面,并将前端界面映射到Docker容器中

建议在linux系统下编译 1、克隆代码 git clone https://github.com/labring/FastGPT 2、进入FastGPT目录&#xff0c;执行 npm install 3、进入projects/app目录&#xff0c;执行 npm run dev 此时会自动下载依赖包&#xff0c;这里如果执行npm install的话&#xff0c;…

OS复习笔记ch4

引言 上一章&#xff0c;我们学习了进程的相关概念和知识&#xff0c;不知道小伙伴们的学习进度如何&#xff0c;没看的小伙伴记得去专栏看完哦。 线程从何而来 我们之前说过&#xff0c;进程是对程序运行过程的抽象&#xff0c;它的抽象程度是比较高的。 一个进程往往对应一…

LabVIEW专栏九、类的应用

一、类的应用 接上一章"类" 类在项目中&#xff0c;一般会在类的私有成员簇内&#xff0c;包含一个数据类型为参数类的队列。 例如网口类&#xff0c;里面实际会包含很多信息&#xff0c;有IP地址和端口等等参数。这些参数如果不放在队列引用中缓存下来&#xff0c;…

【热门前端【vue框架】】——vue框架和node.js的下载和安装保姆式教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;程序员-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

FPM 快速报表开发

背景&#xff1a; 使用FPM开发报表时&#xff0c;如果报表字段过多&#xff0c;页面拖拽等操作不方便 报表数量过多时&#xff0c;新建应用操作步骤较为繁琐 更习惯通过少量代码而非页面操作去实现功能 处理&#xff1a; 将FPM报表开发简化为类似GUI端ALV的开发过程:&#xff…

大模型微调之 使用 LLaMA-Factory 微调 Llama3

大模型微调之 使用 LLaMA-Factory 微调 Llama3 使用 LLaMA Factory 微调 Llama-3 中文对话模型 安装 LLaMA Factory 依赖 %cd /content/ %rm -rf LLaMA-Factory !git clone https://github.com/hiyouga/LLaMA-Factory.git %cd LLaMA-Factory %ls !pip install "unsloth…

力扣数据库题库学习(4.25日)

1484. 按日期分组销售产品 问题链接 思路与分析 编写解决方案找出每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。我来分析一下&#xff0c;这里的题目要求其实就是统计不同日期下的销售产品数&#xf…

excel文件导入dbeaver中文乱码

1.将excel文件进行另存为&#xff0c;保存类型选择【CSV】 2.选择【工具】–>【web选项】–> 【编码】–> 【简体中文&#xff08;GB18030&#xff09;】 3.在DBeaver进行数据导入 直接导入应该就可以&#xff0c;如果不行的话按下面处理。 选择【导入数据——选择cs…

【3GPP】【核心网】【4G】LTE中S1-MME流程字段分析(二)

1. 欢迎大家订阅和关注&#xff0c;精讲3GPP通信协议&#xff08;2G/3G/4G/5G/IMS&#xff09;知识点&#xff0c;专栏会持续更新中.....敬请期待&#xff01; 承接上文 目录 6. PDN Connectivity 7. PDN Disconnection 8. EPS Bearer resource allocation 9. EPS Bearer r…

Gin+WebSocket实战——在线聊天室WebSocketDemo详细使用教程

文章目录 仓库地址项目简介如何使用 仓库地址 Github&#xff1a;https://github.com/palp1tate/WebsocketDemo 欢迎star&#xff01;&#x1f60e; 项目简介 利用 GinWebSocket 实现的在线聊天室Demo项目&#xff0c;支持加入/离开聊天室广播、给其他用户发送消息等。 如何…

sqlplus / as sysdba登陆失败,(ORA-01017)

周一上班检查alert log&#xff0c;看到某个库报出大量的错误 提示无法连接到ASM实例&#xff0c;这是某知名MES厂商DBA创建的11G RAC刚刚​转交到我手上的&#xff0c;这又是给我挖了什么坑&#xff1f; 报错为ORA-01017​用户名密码不对&#xff1f;​what&#xff1f; 登陆o…

【线性代数 C++】求逆矩阵

对于 n n n阶矩阵 A A A&#xff0c;如果有 n n n阶矩阵 B B B&#xff0c;使 A B B A E ABBAE ABBAE&#xff0c;则说 A A A是可逆的&#xff0c;并把 B B B称为 A A A的逆矩阵. A A A的逆矩阵记作 A − 1 A^{-1} A−1&#xff0c;则 B A − 1 BA^{-1} BA−1.若 ∣ A ∣ ≠…

如何3分钟,快速开发一个新功能

背景 关于为什么做这个代码生成器&#xff0c;其实主要有两点: 参与的项目中有很多分析报表需要展示给业务部门&#xff0c;公司使用的商用产品&#xff0c;或多或少有些问题&#xff0c;这部分可能是历史选型导致的&#xff0c;这里撇开不不谈&#xff1b;项目里面也有很多C…

【白盒测试】单元测试的理论基础及用例设计技术(6种)详解

目录 &#x1f31e;前言 &#x1f3de;️1. 单元测试的理论基础 &#x1f30a;1.1 单元测试是什么 &#x1f30a;1.2 单元测试的好处 &#x1f30a;1.3 单元测试的要求 &#x1f30a;1.4 测试框架-Junit4的介绍 &#x1f30a;1.5 单元测试为什么要mock &#x1f3de;️…

【自然语言处理】InstructGPT、GPT-4 概述

InstructGPT官方论文地址&#xff1a;https://arxiv.org/pdf/2203.02155.pdf GPT-4 Technical Report&#xff1a;https://arxiv.org/pdf/2303.08774.pdf GPT-4&#xff1a;GPT-4 目录 1 InstructGPT 2 GPT-4 1 InstructGPT 在了解ChatGPT之前&#xff0c;我们先看看Instr…

线性代数-行列式-p1 矩阵的秩

目录 1.定义 2. 计算矩阵的秩 3. 矩阵的秩性质 1.定义 2. 计算矩阵的秩 3. 矩阵的秩性质

Apache Doris 2.x 版本【保姆级】安装+使用教程

Doris简介 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。基于…

数据挖掘实验一

一、实验环境及背景 使用软件&#xff1a; Anaconda3 Jupyter Notebook 实验内容&#xff1a; 1.使用Tushare或者其他手段获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。2.使用Pandas_datareader获取世界银行数据库中美国&#xff08;USA&#xff09;、瑞典&…