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

devtools/2024/9/18 21:33:22/ 标签: 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" ]; thensudo supervisorctl stop django
    elseecho "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.ppmy.cn/devtools/24286.html

相关文章

并查集应用-连通块中点的数量and食物链

文章目录 连通块中点的数量思路代码javaC 代码 食物链带扩展域的并查集代码带边权的并查集数组d的真正含义以及find()函数调用过程核心代码注意事项&#xff0c;即明白 d[i] 的含义 代码C Java 连通块中点的数量 给定一个包含 n 个点&#xff08;编号为 1∼n &#xff09;的无向…

【go项目01_学习记录day01】

博客系统 1 vscode开发go项目插件推荐1.1 CtrlShiftP&#xff08;俗称万能键&#xff09; &#xff1a;打开命令面板。在打开的输入框内&#xff0c;可以输入任何命令。1.2 开发时&#xff0c;我们需要经常查阅 Go 语言官方文档&#xff0c;可惜因国内访问外网不稳定&#xff0…

数据结构绪论

数据结构的研究内容 步骤: 抽象->设计->编写->测试->调试->解决问题 例如: 1.学生学籍管理系统。线性关系、(查找、删除、插入);一对一 2.人机对弈问题: 树结构、数学模型就是如何用树结构表示棋盘和棋子等,算法是博弈的规则和策略的,元素之间是…

idm线程怎么设置 idm线程数怎么上不去 idm免安装

IDM&#xff08;Internet Download Manager&#xff09;是一款流行的下载管理软件&#xff0c;IDM采用高级的多线程下载技术&#xff0c;可以将下载文件分成多个部分同时下载&#xff0c;从而提高下载速度&#xff0c;它因高效的下载速度和丰富的功能而受到用户的喜爱。接下来&…

GPRS远程抄表:大数据时代的能源管理新模式

1.技术简述 GPRS(GeneralPacketRadioService)远程抄表是一种利用通信网络开展数据传送智能抄表技术。它通过安装在电度表、智能水表等设备上GPRS控制模块&#xff0c;即时将以能数据发送至云服务器&#xff0c;进而实现远程监控和管理。这类技术的诞生&#xff0c;大大提高了抄…

File(文件)和 IO(读写文件)

一、文件的一些知识 1、概念 狭义的文件&#xff1a;硬盘上的 文件 和 目录&#xff08;文件夹&#xff09;。 广义的文件&#xff1a;计算机中的很多 软硬件资源。操作系统中&#xff0c;把很多硬件设备和软件资源抽象成了文件&#xff0c;按照文件的方式统一管理。&#x…

Spring Boot 统一数据返回格式:优化前后端开发协作的利器

在开发基于Spring Boot的Web应用程序时&#xff0c;统一的数据返回格式是非常重要的。 它可以使得前后端的交互更加规范和统一&#xff0c;降低前后端开发人员的沟通成本&#xff0c;提高开发效率。 本文将分析Spring Boot中统一数据返回格式的必要性&#xff0c;以及如何实现…

mac上 完全清除新安装的python3环境

前言 之前未知的方式安装python3环境 导致python 混乱 先将其清除 操作 X 替换为自己的python版本 卸载 Python3 首先,需要卸载 Python3 及其相关文件。在终端中运行以下命令: sudo rm -rf /Library/Frameworks/Python.framework sudo rm -rf "/Applications/Python 3.…

【Spring】IOC/DI中常用的注解@Order与@DependsOn

目录 1、Order 注解改变Bean自动注入的顺序 1.1、了解SpringBootTest注解 1.2、Order 注解改变Bean自动注入的顺序 2、DependsOn 改变Bean的创建顺序 1、Order 注解改变Bean自动注入的顺序 在sping中&#xff0c;通过IOC&#xff08;控制反转&#xff09;和DI&#xff08;依…

docker学习笔记7:centos docker安装mysql

在 CentOS 系统上使用 Docker 安装 MySQL 8 的过程相对简单。以下是一步步的指导: 1. 确保 Docker 已经安装 首先,你需要确保你的 CentOS 系统上已经安装了 Docker。可以通过以下命令检查 Docker 是否已经安装并且运行: sudo systemctl status docker如果 Docker 没有安装…

QT:小项目:登录界面 (下一个连接数据库)

一、效果图 登录后&#xff1a; 二、项目工程结构 三、登录界面UI设计 四主界面 四、源码设计 login.h #ifndef LOGIN_H #define LOGIN_H#include <QDialog>namespace Ui { class login; }class login : public QDialog {Q_OBJECTpublic:explicit login(QWidge…

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

杰发科技AC7840——SPI通信简介(1)_跑通Demo

0. 简介 一些配置项&#xff1a; CPHA&#xff1a;相序 CPLO&#xff1a;极性 看着demo需要按键&#xff0c;于是去掉按键&#xff0c;去掉打印&#xff0c;直接输出波形看逻辑分析仪的信号。 其实现在做这些demo测试应该都有逻辑分析仪&#xff0c;直接看波形更直观一点。…

12_Scala_package

文章目录 Scaal面向对象编程1.回顾Java2.package可以多次声明3.设置作用域&#xff0c;设置上下级4.包可以当作对象使用5.import6.Scala用_取代Java *7.导入多个包8.屏蔽类9.类起别名10.import的规则11.有些包无需导入 Scaal面向对象编程 Scala是一门完全面向对象语言&#xf…

MySQL入门

目录 MySQL概述 使用命令行窗口连接MySQL数据库 启动MySQL数据库的常用方式&#xff1a;[Dos命令] 数据库三层结构 SQL语句分类 创建数据库 语法一&#xff1a;CREATE DATABASE ​编辑 语法二&#xff1a;DROP DATABASE 查询语法&#xff08;select&#xff09; 校对…

信息系统项目管理师0077:工程概述(5信息系统工程—5.4安全工程—5.4.1工程概述)

点击查看专栏目录 文章目录 5.4安全工程5.4.1工程概述5.4安全工程 随着国际互联网信息高速公路的畅通和国际化的信息交流,业务大范围扩展,信息安全的风险也急剧增加。由业务应用信息系统来解决安全性问题,已经不能胜任。由操作系统、数据库系统、网络管理系统来解决安全问题…

【跟我学RISC-V】认识RISC-V指令集并搭建实验环境

写在前面 现在计算机的体系架构正是发展得如火如荼的时候&#xff0c;占领桌面端市场的x86架构、占领移动端市场的arm架构、在服务器市场仍有一定地位的mips架构、国产自研的指令集loongarch架构、还有我现在要讲到的新型开源开放的RISC-V指令集架构。 我先说一说我的学习经历…

攻防世界 easyphp

本题主要利用的知识点是php绕过 一、PHP代码分析 首先先看一下代码 我们需要利用get方式上传3个参数a,b,c&#xff0c;这3个分别需要满足不同的条件: a&#xff1a;设置a值&#xff1b;值大于6000000&#xff1b;长度不超过3&#xff1b; b&#xff1a;设置b值&#xff1b;MD…

JAVA系列 小白入门参考资料 继承

目录 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量 2. 子类和父类成员变量同名 4.2 子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员方法名字相同 ​5. super关键字 …

debian配置四叶草输入法

效果展示 一、前言 在linux下体验比较好的输入法只有两款&#xff1a;搜狗输入法、四叶草输入法。 ubuntu下可以成功配置搜狗输入法&#xff0c;但debian下从来没有成功过。 今天在用fcitx5 四叶草时发现VNC远程输入法会失灵&#xff0c;于是改用了ibus 四叶草&#xff0c…