Git + Jenkins 自动化 NGINX 发布简易实现

news2024/11/27 21:37:48

概述

之前基于 GitLab + Jenkins 实现了简单的 NGINX 的自动化发布。 具体包含如下的组件:

  1. GitLab
    1. 包括 GItLab 的 WebHook;
  2. Jenkins 及其插件:
    1. Generic Webhook Trigger
    2. Publish Over SSH

🧠疑问:

为什么不用 Ansible? 答:这里说明下,之所以不用 Ansible,是因为这个环境默认没有安装 Ansible,而且 Publish Over SSH 也足够用了,就没再用 Ansible 了。

详细说明

这里有 3 个几个自动化 job,如下:

  1. Generic Webhook Trigger 用于和GitLab联动, 自动触发 WebHook
  2. Publish Over SSH 用于通过SSH 发布NGINX配置

说明:

配置 WebHook
test-intranet-nginx 为例进行说明.

  1. 进入该项目 -> 设置 -> 集成. 如下图:
    gitlab webhook
  2. URL里填入: https://jenkins.example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k(假设 jenkins.example.com 是 Jenkins 的控制台域名,token 可以在对应的 Jenkins 插件 Generic Webhook Trigger 中找到,这里 token 是用于区别具体是哪个 job。)
  3. Trigger 选择: Push events -> master.
  4. 按需取消勾选 Enable SSL verification. 保存. 如下:
    gitlab webhook 填入 jenkins url 和 token

说明:

URL地址可以在 Jenkins的对应插件里找到.
Trigger可以按需调整.

在 Jenkins 的 系统配置*里 -> *Publish over SSH:

如下图:
jenkins 插件 publish over ssh

填入:

  • Key
  • SSH Server的:
    • name(用于给 jenkins 用户识别的用户名)
    • Hostname(目标机器的 IP 地址)
    • Username(目标机器的 OS 用户)
    • Remote Directory(需要把文件发送到的目标机器的目录地址)

说明:

一般情况下,对于 NGINX, 目录是2个, 为: /etc/nginx(放配置 *.conf) 和 /usr/share/nginx/html(放静态 web 文件)

以下图 Job 为例:

首先配置 源码管理, 如下图:

job 源码管理配置

填入:

  1. 仓库 URL
  2. 认证信息(如果是公开的库, 就不需要认证信息)
  3. 分支: master(按需调整)
  4. 源码库的信息:
    1. 本例中,类型是: gitlab
    2. URL
    3. GitLab 的 Version

然后配置 构建触发器, 如下图:

jenkins-webhook-trigger1.png

说明:

详细使用请在浏览器输入图中的 URL 进一步查看.

  1. Variable (使用默认配置)
  2. Expression (使用默认配置)
  3. Token

jenkins-webhook-trigger2.png

  1. Expression(解释如下: 用于进行目录过滤,填入正则后,只有目录匹配正则且发生变化才会触发构建)

  1. Text (默认配置)

最后, 是 构建后操作(实际「构建」过程没做任何事情). 如下图:

配置 publish over ssh

注意:

如果有多台 nginx 要同时发, 就要在这里同时写上多台 SSH Server.

  1. Name: 下拉框选择对应Name
  2. Transfers
    1. Source files: 源文件, 位于: iaas_web_xxxx/conf/**/*
    2. Remove prefix: 需要移除的前缀, 为: iaas_web_xxxx/. 移除后, 示例为: conf/nginx.conf
    3. Remote directory: 不填写就是之前填写的目录, 一般为 /etc/nginx. 那么示例就发布到: /etc/nginx + conf/nginx.conf, 即: /etc/nginx/conf/nginx.conf
    4. Exec command: 文件传输过去后需要执行的命令. 为: nginx -t && nginx -s reload(或:sudo systemctl reload nginx). 即, 先 -t 验证配置是否有语法错误, 然后再 reload 发布. 如果验证有问题, jenkins pipeline 会异常, 变黄或变红.

发布流程

  1. 用户通过 IDE + Git, 在自己本地修改 NGINX Conf, 并最终 pushmerge(也会触发push的动作) 到 master
  2. GitLab 接收到 push event, 触发 webhook 调用: https://example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k
  3. Jenkins 收到 webhook trigger. 并结合 filter 的 Expression 进行判断,确认匹配,则开始自动启动一次 Job.
  4. 该 Job 过程为:
    1. 将存有 nginx 配置的仓库 pull 到 jenkins.
    2. 通过 Publish over SSH, 将相关目录和文件传输到 SSH Server 的指定目录
    3. 执行 nginx 命令, 进行发布.
  5. 结束.

提示:

如果因为其他异常, 导致未自动发布,那么也可以手动点击 Job 页面的: 立即构建 进行手动触发

可以通过首图的 rss 订阅: Atom feed 失败, 这样发布失败你就会及时收到邮件.

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

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

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

相关文章

算法训练营DAY44|518. 零钱兑换 II、377. 组合总和 Ⅳ

这两道题是对于完全背包题型的另一个维度,都是求解给定背包容量求装满背包最多有几种方法的题目。两道题十分相像,但在遍历顺序上却又有着极其微妙的差别。 518. 零钱兑换 II - 力扣(LeetCode)https://leetcode.cn/problems/coin…

看完流浪地球2,这些功课你必须要补

昨天看了流浪地球2,里面的信息量太大了,回来补充了一些功课,这些知识,看完,才算对流浪地球2有了进一步了解。地球人的航天路径我们的太空航程是什么样子的呢?要从第二次世界大战开始。回形针计划&#xff1…

金仓数据库简单巡检与事务阻塞会话简单处理

查看KES版本信息 使用version函数查看 这种方式能详细显示信息 使用ksql查看 查看license有效期 查看实例启动时间和运行时长 查看实例启动时间 查看KES无故障运行时长 查看数据库列表 使用元命令\l查看 使用字典查看 查看数据库占用的磁盘空间 统计当前数据库所占的磁盘空…

chrome在爬虫中的使用

chrome浏览器使用方法介绍 学习目标 了解 新建隐身窗口的目的了解 chrome中network的使用了解 寻找登录接口的方法 1 新建隐身窗口 浏览器中直接打开网站,会自动带上之前网站时保存的cookie,但是在爬虫中首次获取页面是没有携带cookie的,这…

Wireshark TS | Packet Challenge 之 FTP 案例分析

前言 来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次&#xf…

【华为上机真题】工号不够用咋办

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

2D测量 Metrology——

基本流程: 1,创建计量模型 create_metrology_model (MetrologyHandle) 2,设置计量模型的图像大小 set_metrology_model_image_size (MetrologyHandle, Width, Height) 3,将计量对象添加至计量模型中.(矩形,直线,圆,椭圆) add_metrology_object_rectangle2_measure  //矩形…

【高并发】- 指标介绍

什么是高并发 高并发系统有哪些关键指标 高并发系统介绍 本文主要讲解高并发系统的概念,在实际开发过程中为什么要使用高并发系统,相比于传统系统,能带来怎样的改变。 1.1 高并发介绍 高并发(Hign Concurrency)&#…

Linux常用命令——sed命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) sed 功能强大的流式文本编辑器 补充说明 sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存…

剖析“类和对象” (下) -------- CPP

学习完“类和对象”(上)【剖析“类和对象” (上) -------- CPP】和(中)【剖析“类和对象” (中) -------- CPP】,相信各位同学对CPP中类与对象的理解或多或少都加深了一点。 本篇博客将和大家一同再次学习CPP中类和对象的知识点,跟随本篇博客的脚步定能…

Java两大工具库:Commons和Guava(1)

您好,我是湘王,这是我的CSDN博客。值此新春佳节,我给您拜年啦~祝您在新的一年中所求皆所愿,所行皆坦途,展宏“兔”,有钱“兔”,多喜乐,常安宁!Java的成功很大…

Kettle(8):删除组件

删除组件能够按照指定条件,将表中的数据删除。 1 需求 有以下一个文本文件,文本文件包含了要删除的两个用户id: id 392456197008193000 267456198006210000 需要使用Kettle将文本文件中两个ID对应的t_user1表的数据删除。 2 构建Kettle数据流图 效果图: 1 将文本文件输…

【算法突击】动态规划系列 (一)| 程序员面试 | 最大子数组和 | 最长递增子序列 | 最长公共子序列

【算法突击】动态规划系列 (一)| 程序员面试 | 最大子数组和 | 最长递增子序列 | 最长公共子序列 文章目录【算法突击】动态规划系列 (一)| 程序员面试 | 最大子数组和 | 最长递增子序列 | 最长公共子序列1. 最大子数组和1.1 题目…

C 语言零基础入门教程(十三)

函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明: typedef int (*fun_ptr)(int,i…

ATAC-seq分析:Annotating Peaks(9)

1. 注释开放区域 将已识别的无核小体区域与基因组特征(如基因和增强子)相关联通常很有趣。 一旦注释到基因或增强子的基因,我们就可以开始将 ATACseq 数据与这些基因的特征相关联。 (功能注释、表达变化、其他表观遗传状态&#x…

瑞吉外卖实战

https://blog.csdn.net/weixin_43715214/category_12022798.html大佬记录项目介绍day01功能架构(1)用户层本项目中在构建系统管理后台的前端页面,我们会用到H5、Vue.js、ElementUI等技术。而在构建移动端应用时,我们会使用到微信小…

计算机网络连环炮40问

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…

Day09 C++STL入门基础知识六——deque容器 构造函数-赋值操作-大小操作-插入删除-数据存储-排序操作【全面深度剖析+例题代码展示】

无人问津的日子,我为自己喝彩! 文章目录1. 基本概念1.1 功能1.2 与vector区别1.3 图解1.4 内部工作原理1.5 deque 容器的迭代器也是支持随机访问的2. 构造函数2.1 函数原型2.2 代码展示2.3 测试结果2.4 小think2.4.1 小问题2.4.2 思路2.4.3 修改2.4.4 测…

从零开始的数模(六)python在高等数学和线性代数中的应用

科学计算设计数值计算和符号计算,在python中作基础数值计算用numpy和scipy工具库,作符号运算用sympy工具库 sympy工具库–符号运算 符号运算基本知识 1.利用symbols函数创建符号变量构造多个符号变量时中间以空格分隔 2.利用符号变量创建表达式 3.利用…

Hive整合HBase,操作HBase表

Hive over HBase原理 Hive与HBase利用两者本身对外的API来实现整合,主要是靠HBaseStorageHandler进行通信,利用 HBaseStorageHandler,Hive可以获取到Hive表对应的HBase表名,列簇以及列,InputFormat和 OutputFormat类&…