概述

之前根据 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,如下:

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

  1. Generic Webhook Trigger 用于和GitLab联动, 主动触发 WebHook
  2. Publish Over SSH 用于经过SSH 发布NGINX装备

阐明:

装备 WebHook
test-intranet-nginx 为例进行阐明.

  1. 进入该项目 -> 设置 -> 集成. 如下图:
    Git + Jenkins 自动化 NGINX 发布简易实现
  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. 保存. 如下:
    Git + Jenkins 自动化 NGINX 发布简易实现

阐明:

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

在 Jenkins 的 系统装备里 -> Publish over SSH:

如下图:

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

填入:

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

阐明:

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

以下图 Job 为例:

首要装备 源码办理, 如下图:

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

填入:

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

然后装备 构建触发器, 如下图:

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

阐明:

具体运用请在浏览器输入图中的 URL 进一步检查.

  1. Variable (运用默许装备)
  2. Expression (运用默许装备)
  3. Token

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

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

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

  1. Text (默许装备)

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

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

注意:

假如有多台 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 编写.