概述
之前基于 GitLab + Jenkins 实现了简略的 NGINX 的自动化公布。
具体蕴含如下的组件:
-
GitLab
- 包含 GItLab 的 WebHook;
-
Jenkins 及其插件:
- Generic Webhook Trigger
- Publish Over SSH
🧠疑难:
为什么不必 Ansible?
答:这里阐明下,之所以不必 Ansible,是因为这个环境默认没有装置 Ansible,而且 Publish Over SSH 也足够用了,就没再用 Ansible 了。
具体阐明
这里有 3 个几个自动化 job,如下:
- Generic Webhook Trigger 用于和 GitLab 联动, 主动触发 WebHook
- Publish Over SSH 用于通过 SSH 公布 NGINX 配置
阐明:
配置 WebHook
以test-intranet-nginx
为例进行阐明.
- 进入该我的项目 -> 设置 -> 集成. 如下图:
- URL 里填入:
https://jenkins.example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k
(假如 jenkins.example.com 是 Jenkins 的控制台域名,token 能够在对应的 Jenkins 插件 Generic Webhook Trigger 中找到,这里 token 是用于区别具体是哪个 job。) - Trigger 抉择: Push events -> master.
- 按需勾销勾选 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 为例:
首先配置 源码治理, 如下图:
填入:
- 仓库 URL
- 认证信息(如果是公开的库, 就不须要认证信息)
- 分支:
master
(按需调整) -
源码库的信息:
- 本例中,类型是:
gitlab
- URL
- GitLab 的 Version
- 本例中,类型是:
而后配置 构建触发器, 如下图:
阐明:
具体应用请在浏览器输出图中的 URL 进一步查看.
- Variable (应用默认配置)
- Expression (应用默认配置)
- Token
- Expression(解释如下: 用于进行目录过滤,填入正则后,只有目录匹配正则且发生变化才会触发构建)
- Text (默认配置)
最初, 是 构建后操作(理论「构建」过程没做任何事件). 如下图:
留神:
如果有多台 nginx 要同时发, 就要在这里同时写上多台 SSH Server.
- Name: 下拉框抉择对应 Name
-
Transfers
- Source files: 源文件, 位于:
iaas_web_xxxx/conf/**/*
- Remove prefix: 须要移除的前缀, 为:
iaas_web_xxxx/
. 移除后, 示例为:conf/nginx.conf
- Remote directory: 不填写就是之前填写的目录, 个别为
/etc/nginx
. 那么示例就公布到:/etc/nginx
+conf/nginx.conf
, 即:/etc/nginx/conf/nginx.conf
- Exec command: 文件传输过来后须要执行的命令. 为:
nginx -t && nginx -s reload
(或:sudo systemctl reload nginx
). 即, 先-t
验证配置是否有语法错误, 而后再reload
公布. 如果验证有问题, jenkins pipeline 会异样, 变黄或变红.
- Source files: 源文件, 位于:
公布流程
- 用户通过 IDE + Git, 在本人本地批改 NGINX Conf, 并最终
push
或merge
(也会触发push
的动作) 到master
上 - GitLab 接管到
push
event, 触发 webhook 调用:https://example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k
- Jenkins 收到 webhook trigger. 并联合 filter 的 Expression 进行判断,确认匹配,则开始主动启动一次 Job.
-
该 Job 过程为:
- 将存有 nginx 配置的仓库 pull 到 jenkins.
- 通过 Publish over SSH, 将相干目录和文件传输到 SSH Server 的指定目录
- 执行 nginx 命令, 进行公布.
- 完结.
提醒:
如果因为其余异样, 导致未主动公布,那么也能够手动点击 Job 页面的: 立刻构建 进行手动触发
能够通过首图的 rss 订阅: Atom feed 失败, 这样公布失败你就会及时收到邮件.
三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.