Git + Jenkins 自动化 NGINX 发布简易实现
概述
之前基于 GitLab + Jenkins 实现了简单的 NGINX 的自动化发布。
具体包含如下的组件:
- GitLab
- 包括 GItLab 的 WebHook;
 
 - Jenkins 及其插件:
- Generic Webhook Trigger
 - Publish Over SSH
 
 
疑问:
为什么不用 Ansible?
答:这里说明下,之所以不用 Ansible,是因为这个环境默认没有安装 Ansible,而且 Publish Over SSH 也足够用了,就没再用 Ansible 了。
详细说明
这里有 3 个几个自动化 job,如下:

说明:
配置 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 接收到 
pushevent, 触发 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 编写.
Git + Jenkins 自动化 NGINX 发布简易实现的更多相关文章
- netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了
		
在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不 是特别麻烦...现如今你的项目需要在li ...
 - Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置
		
最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...
 - Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】
		
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
 - Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
		
jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...
 - Gitlab+Jenkins用钩子实现git提交后jenkins自动化构建
		
Gitlab+Jenkins用钩子实现git提交后jenkins自动化构建 一.Jenkins 进入项目---->Configure 1.设置项目代码从git中拉取 2.设置钩子程序 二.git ...
 - git+jenkins  jar包代码的发布加新建项目
		
1.本地仓库 java开发 把代码上传上来 ,问一下他要上传到的主机ip , 分支 2.本地 , 设置-->仓库 更新数据,让他同步到南阳gitlab, 若没有这个项目,需要创建相同名字的项目 ...
 - Python+Pytest+Allure+Git+Jenkins接口自动化框架
		
Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...
 - Jenkins自动化部署服务器及git 提交及git tag标签版本更新流程,超详细!
		
工作中部署的项目和服务器较多时就用上了Jenkins进行自动部署 优点 不用在连接单独的服务器进行更新项目,再启动项目服务的操作了 更新部署都是自动的,比较方便.适合大批量的部署 一.git流程部分 ...
 - GIt+jenkins代码自动上线
		
代码自动上线功能 企业部署代码上线是件比较麻烦的事情,还好我们有jenkins这个持续集成的软件可以帮助我们做很多的事情,现在我们就 来测试用jenkins推送代码上线. 我们这里测试的是一个html ...
 - AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
		
一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...
 
随机推荐
- Codeforces Round #829 (Div. 2) A-E
			
比赛链接 A 题解 知识点:枚举. 只要一个Q后面有一个A对应即可,从后往前遍历,记录A的数量,遇到Q则数量减一,如果某次Q计数为0则NO. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) ...
 - vue-axios更改操作
			
<template> <div class="nav"> <label for="">新部门</label>&l ...
 - 用 VS Code 搞 Qt6:让信号和槽自动建立连接
			
Qt 具备让某个对象的信号与符合要求的槽函数自动建立连接.弄起来也很简单,只要调用这个静态方法即可: QMetaObject::connectSlotsByName(...); connectSlot ...
 - Appscan的安装破解以及使用
			
本文简单介绍Appscan的安装和使用. 一.下载安装 可自行百度下载相关安装包(因较高版本的破解资料比较难找,建议下载9.0版本). 双击.exe安装文件进行安装,在弹出的安装指引中各选项默认安装即 ...
 - 【笔记】CF1607F Robot on the Board 2 及相关
			
题目传送门 记忆化搜索 首先,这题 \(10000\) 组 \(2000\times 2000\) 的数据直接爆搜肯定会超时.想到,如果一个点的答案已经被更新过,之后走到这个点能再多走的点也就确定了, ...
 - Node.js的学习(一)node.js 的介绍
			
一.简介 1.1.什么是 node.js ? node.js 一种 JavaScript 的运行环境,能够使得javascript能够脱离浏览器运行.以前 js 只能在浏览器基础上运行,能够操作的也 ...
 - 棋盘覆盖(java实现)
			
棋盘覆盖 问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘 ...
 - 给ofo共享单车撸一个微信小程序
			
想学一下微信小程序,发现文档这东西,干看真没啥意思.所以打算自己先动手撸一个.摩拜单车有自己的小程序,基本功能都有,方便又小巧,甚是喜爱.于是我就萌生了一个给ofo共享单车撸一个小程序(不知道为啥of ...
 - c++详细学习——继承
			
通常讲父类(parrent)-子类(child).基类(base)-派生类(derived)和超类(super)-子类(sub) 1 最基础的写法 以下例子为最基本的写法,默认构造 1 enum Ge ...
 - Linux 中的文件简单说明
			
Linux 中的文件简单说明 作者:Grey 原文地址: 博客园:Linux 中的文件简单说明 CSDN:Linux 中的文件简单说明 说明 本文基于 CentOS 7 根目录(/)下文件夹主要作用 ...