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

git,jenkins,自动化,nginx,发布,简易,实现 · 浏览次数 : 561

小编点评

**使用 Ansible 替代 Ansible 在 NGINX 自动发布中存在以下几个原因:** 1. **Ansible 在 GitLab Environment 中不可用:**由于 GitLab Environment 运行在容器中,而 Ansible 是基于操作系统的,因此无法在容器中运行。 2. **Ansible 需要安装在 GitLab Environment 中:**Ansible 需要在 GitLab Environment 中安装,而 GitLab Environment 是不可访问的。 3. **Ansible 提供了更强大的功能:**Ansible 提供了更强大的功能,例如支持 YAML 语言的配置。 **因此,使用 Ansible 在 NGINX 自动发布中不是必要。**

正文

概述

之前基于 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 编写.

与Git + Jenkins 自动化 NGINX 发布简易实现相似的内容:

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

概述 之前基于 GitLab + Jenkins 实现了简单的 NGINX 的自动化发布。 具体包含如下的组件: GitLab 包括 GItLab 的 WebHook; Jenkins 及其插件: Generic Webhook Trigger Publish Over SSH 🧠疑问: 为什么不

Jenkins + SVN/Git + Maven + Docker + 阿里云镜像 + Kubernetes(K8S)

Jenkins 2361.2 + Maven Integration + SVN/GIT + Docker + 阿里云镜像 + Kubernetes(K8S) 本文用于学习,了解原理,和实际应用,有所差别,特别是 Post Steps 步骤中,方式很多,根据实际情况而定。 实际应用中,一般 Pipe

【规范】Git分支管理,看看我司是咋整的

制定Git分支管理规范旨在加速团队协作,确保代码质量和主分支稳定性,支持敏捷开发流程。主要涉及分支包括:主分支(master/main)确保生产环境稳定;开发分支(develop)用于集成日常开发成果;特性分支(feature)支持单独功能开发;修复分支(hotfix)快速修复线上问题。规范流程涵盖...

Git分支管理

前言 从22年10月到24年1月,一直忙于项目建设,终于顺利投产,截止现在,项目需求、项目缺陷持续推进,越发感觉到代码分支管理的重要性,从项目投产最初,一直试图通过查询各种资料,想找到一种合适的策略进行分支管理,奈何可能是资料过于繁杂未能发现有实际落地价值的资料,通过诸多资料,仅知道了有git工作流

保姆教程系列:Git 实用命令详解

!!!是的没错,胖友们,保姆教程系列又更新了!!! @目录前言1.将本地项目推送到远程仓库2. Idea Git回退到某个历史版本3. 修改项目关联远程地址方法4. Git 修改分支的名称5. Git 删除分支6. master分支代码复制到新的分支7. Git迁移项目到其他代码仓库,且保留分支与提

Git——分支管理(2)

Git——分支管理(2) 提示:图床在国外且动图比较多的情况下,需要时间加载。 目录: 目录Git——分支管理(2)提示:图床在国外且动图比较多的情况下,需要时间加载。目录:Git基础Git的分支与HEADGit的存储机制Git的分支指针Git的远程仓库Git的远程分支管理远程分支和本地仓库的冲突处

Git 版本控制:构建高效协作和开发流程的最佳实践

版本控制是软件开发的核心,促进团队协作与项目管理。通过制定明确的分支命名策略,遵循一致的代码提交规范,如指明提交类型和简短描述,增强了历史记录的可读性,可以清晰地组织和理解项目的结构与进展。

面试官:你了解git cherry-pick吗?

事情要从一次不规范的代码开发开始说起 背景故事 时间 2024年某个风平浪静的周五晚上 地点 中国,北京,西二旗,某互联网大厂会议室 人物 小杰,小A,小B,老K 对话 老K:昨天提交的代码被测试打回来了!为什么小B没开发完的内容也一起提交上去了? 小B:啊?我不清楚啊,我在开发分支B开发完一部分就

Git 常用命令

博客地址:https://www.cnblogs.com/zylyehuo/ 虚拟机基本配置 git 基本指令 # 在 centos7 环境下查看系统版本 cat /etc/redhat-release # (1)安装 git yum install -y git # windows安装地址:htt

[转帖]rsbeat对redis慢日志入库到ES

git地址: https://github.com/Yourdream/rsbeat gitg地址: 改进支持sentinel https://github.com/154650362/rsbeat 1、安装 mkdir rsbeat cd rsbeat curl -L https://ghprox