概述

之前基于 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. 进入该项目 -> 设置 -> 集成. 如下图:

  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. 保存. 如下:

说明:

URL地址可以在 Jenkins的对应插件里找到.

Trigger可以按需调整.

在 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 为例:

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

填入:

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

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

说明:

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

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

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

  1. Text (默认配置)

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

注意:

如果有多台 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 发布简易实现的更多相关文章

  1. netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了

     在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不 是特别麻烦...现如今你的项目需要在li ...

  2. Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...

  3. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  4. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  5. Gitlab+Jenkins用钩子实现git提交后jenkins自动化构建

    Gitlab+Jenkins用钩子实现git提交后jenkins自动化构建 一.Jenkins 进入项目---->Configure 1.设置项目代码从git中拉取 2.设置钩子程序 二.git ...

  6. git+jenkins jar包代码的发布加新建项目

    1.本地仓库  java开发 把代码上传上来 ,问一下他要上传到的主机ip , 分支 2.本地 , 设置-->仓库 更新数据,让他同步到南阳gitlab, 若没有这个项目,需要创建相同名字的项目 ...

  7. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  8. Jenkins自动化部署服务器及git 提交及git tag标签版本更新流程,超详细!

    工作中部署的项目和服务器较多时就用上了Jenkins进行自动部署 优点 不用在连接单独的服务器进行更新项目,再启动项目服务的操作了 更新部署都是自动的,比较方便.适合大批量的部署 一.git流程部分 ...

  9. GIt+jenkins代码自动上线

    代码自动上线功能 企业部署代码上线是件比较麻烦的事情,还好我们有jenkins这个持续集成的软件可以帮助我们做很多的事情,现在我们就 来测试用jenkins推送代码上线. 我们这里测试的是一个html ...

  10. AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

    一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...

随机推荐

  1. 使用 nvm 对 node 进行版本管理

    前端项目工程化,基本都依赖于 nodejs, 不同的项目对于 nodejs 的版本会有要求,nvm 就是可以让我们在各个版本之间进行快速切换的工具. Linux 系统 下载解压 查看所有版本 , 选择 ...

  2. android学习 基础知识

    布局管理器 大小用dp; 字体用sp 线性布局 与 相对布局是可以嵌套使用的,根据实际需求,灵活使用. 1.通用属性 # 大小相关 layout_width="100dp":宽度 ...

  3. java学习之springboot

    0x00前言 呀呀呀时隔好久我又来做笔记了,上个月去大型保密活动了,这里在网上看了一些教程如果说不是去做java开发我就不做ssm的手动整合了采用springboot去一并开发. Spring Boo ...

  4. 2022春每日一题:Day 23

    题目:Piotr's Ants 蚂蚁转头走,其实可以看做他们交换灵魂后接着往前走,同样发现,既然他们的速度相同,那么在数轴上相对位置不会改变(碰面会改变方向),那就好办了. 先把初始状态排序,id都记 ...

  5. 我的第一个项目(二):使用Vue做一个登录注册界面

    好家伙,   顶不住了,太多的bug, 本来是想把背景用canvas做成动态的,但是,出现了各种问题 为了不耽误进度,我们先把一个简单的登录注册界面做出来 来看看效果:  (看上去还不错) 本界面使用 ...

  6. 基于Spring-AOP的自定义分片工具

    作者:陈昌浩 1 背景 随着数据量的增长,发现系统在与其他系统交互时,批量接口会出现超时现象,发现原批量接口在实现时,没有做分片处理,当数据过大时或超过其他系统阈值时,就会出现错误.由于与其他系统交互 ...

  7. 关于python3调用matplotlib中文乱码问题

    问题描述 我用来绘制柱形图,横坐标上面的数据, 但是网上大部分说的都是更改横纵坐标标签的乱码问题,而不是横坐标数据乱码问题 解决办法 更改横纵坐标上标签的中文不乱码 import matplotlib ...

  8. 漫谈计算机网络: 运输层 ------ 从UDP ->TCP , 从面向通信->面向用户,三次握手/四次挥手?

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  9. JavaEE Day11 BootStrap

    之前:前端知识 HTML+CSS+JavaScript           不好写 今日内容:前端的开发框架,内部定义了丰富的CSS样式和JS代码,只需要拿来用就行 会用即可 一.BootStrap ...

  10. 跨机房ES同步实战

    作者:谢泽华 背景 众所周知单个机房在出现不可抗拒的问题(如断电.断网等因素)时,会导致无法正常提供服务,会对业务造成潜在的损失.所以在协同办公领域,一种可以基于同城或异地多活机制的高可用设计,在保障 ...