Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)

目录

Jenkins 之 单节点 搭建自动化部署项目环境 与 实战测试 (三)

Jenkins 服务器 环境

何为 单节点 搭建自动化部署项目环境?

搭建 单节点 主要难点

如何实现对 github 上项目 push 的监听?

检查是否按照 GitHub plugin 插件

GitHub 配置 Webhooks

GitHub 获取 Personal access tokens

Jenkins 配置

Jenkins 自动化部署 实战测试

测试项目介绍

Jenkins 创建任务

测试 Jenkins 自动部署


Jenkins 服务器 环境

Linux: Centos 7.3 阿里云服务器一台。

IP: 47.99.66.88 (假的)

开放端口:8080 、8088、22 等。

防火墙:关闭

该服务器上 已经配置: Jenkins、Git、 Maven、JDK、Tomcat、MySQL

Jenkins 访问地址:47.99.66.88:8088 (Jenkins 启动端口已经设置成:8088)

代码仓库类型:GitHub

个人技能手册:https://github.com/DevilMafia/personal-skill-tree


何为 单节点 搭建自动化部署项目环境?

命名为 单节点,是因为 tomcat 服务器,即web容器 与 Jenkins 服务在同一台服务器。

说白了就是,当我们在windows系统上完成代码的开发与测试,push 到 GitHub, Jenkins 会把代码拉倒自己所在的服务器,再进行打包、然后将 war 包,copy 到 tomcat 路径下为 webapps 目录下。最后启动 tomcat。

既然有 单节点 搭建,肯定会有 主从节点,即多节点搭建项目自动化环境。这个我们要到后期的博文中进行记录。


搭建 单节点 主要难点


如何实现对 github 上项目 push 的监听?

因为我们要实现 我只要提交一下代码,即 push 一下。 jenkins 就会帮我们拉下来、打包、部署。所以如何让 Jenkins 知道 github 上的指定的项目 有没有进行 push 操作是关键之处。


检查是否按照 GitHub plugin 插件

如果没有按照,安装一下即可,可以参考:https://blog.csdn.net/Davis_Dxs/article/details/82865331


GitHub 配置 Webhooks

Webhooks 是什么?

一个钩子函数,指定触发改钩子函数的事件,触发后,向指定的 url 接口地址发送 当前项目发生的改变。(个人理解)

webhooks 是项目级别的,每个 project 都有各自的 webhooks。所以,只需要设置我们需要自动化部署项目的webhooks。

配置流程如下:

打开Github 上项目的主页。如下图所示,点击 Settings。

点击  Add webhook ,此时可能会再次验证用户密码,输入密码即可。添加 webhook 页面如下如所示:

填写参数解释:

Payload URL:钩子触发后发送的URL地址

Content type:发送数据格式,默认就行。

Secret:密钥,默认不填就行。

Which events would you like to trigger this webhook? 

设置钩子的触发机制

Jush the push event: 当有人将代码提交到该仓库(git push)时,触发钩子函数,发送请求

Send me everything: 对该仓库执行任何操作后,拉取,评论等,都会触发钩子,发送请求。

Let me select individual events: 让你自己选择 什么事件 会触发钩子函数、发送请求。

Payload URL 此时应该填写为 Jenkins 服务器:47.99.66.88:8088 + github-webhook

即是:http://47.99.66.88:8088/github-webhook/

Content type 默认就行,Secret 默认为空。至于 钩子函数 的触发机制,我们只需要 push 即可。      填写完成之后如图所示:

点击 Add webhook, 完成添加。然后点击 WebHooks,来到这个页面,如图所示:

为什么会报错有警告?

因为我这个 Jenkins 服务器的地址是假的,也就是根本就不存在这个 回调地址,当我们点击 Add webhook 后,它将主动发起请求,去测试连接这个 jenkins 回调的接口。因为不存在所以会报错。

所以,大家在配置 Webhooks 时,Jenkins 服务 一定要正常启动。


GitHub 获取 Personal access tokens

Jenkins做一些需要权限的操作的时候就用这个access token去鉴权

先找到生成 Personal access tokens 的页面。如下图所示

跳转到”Personal access tokens”页面后,点击右上角的”Generate new token”按钮。

随便输入个描述,当然见名识意更好。然后勾选 repo 、admin:repo_hook ,点击 Generate token 即可。

注:切记要保存好 token,因为您只能看到它一次。之后你再次刷新就看不到啦。我就是这样,很蛋疼。


Jenkins 配置

系统管理 --> 系统设置 --> 然后在系统设置页面找到 GitHub

Name : 随便起个名字

API URL:  https://api.github.com    固定的,我也是通过查找资料找到的,至于为什么,没研究。

Credentials: 点击 Add,如下图所示,填写后点击 添加。

添加 Credentials 之后。选择 Credentials。此时可以测试连接,点击旁边的 Test Connection 按钮。如果出现类似如下图所示结果,则OK,No 问题的。

之后 验证 webhooks 中所填写的 url 路径地址。点击高级

然后选择: Specify another hook URL for Github configuration, 就会自动出现如图所示的URL地址,这个地址与我们在GitHub中项目上的webhooks中所填写的URL要一致,以这个 URL 为标准。

最后 点击左下角的 保存按钮,保存即可。此时Jenkins配置 与 GitHub 实现自动化部署的环境已经完成。在后继的博文中继续更新与 GitLab 实现自动化部署。敬请期待。


Jenkins 自动化部署 实战测试

测试项目介绍

GitHub 项目地址:https://github.com/DevilMafia/cli

https: https://github.com/DevilMafia/cli.git

我们拿该项目中的一个接口来做测试。登录接口。项目代码为 Java 代码,Springboot 项目。

Controller 层

Service 层 代码如下:

 @Override
public RestResult login(Map map) {String account = (String) map.get("ukAccount");// 参数校验if (StringUtil.isEmpty(account)){return ResultUtils.error(ResultCodeEnum.ILLEGAL_ARGUMENT.getCode(),ResultCodeEnum.ILLEGAL_ARGUMENT.getMsg());}// 验证账户是否存在Admin admin = adminMapper.getByAuthenticatorUkAccount(account);if (null == admin){return ResultUtils.error(ResultCodeEnum.USER_NOT_FOUND.getCode(),ResultCodeEnum.USER_NOT_FOUND.getMsg());}// 验证密码String password = (String) map.get("password");if (!admin.getPassword().equals(EncryptUtils.encrypt(password,admin.getSalt()))){return ResultUtils.error(ResultCodeEnum.USER_PASSWORD_NOT_MATCH.getCode(),ResultCodeEnum.USER_PASSWORD_NOT_MATCH.getMsg());}// 验证是否禁用if (1 == admin.getStatus()){return ResultUtils.error(ResultCodeEnum.USER_BAN.getCode(),ResultCodeEnum.USER_BAN.getMsg());}// 生成 tokenMap domain = new HashMap();domain.put(AdminConstant.PKID, admin.getPkId());domain.put(AdminConstant.UKACCOUNT, admin.getUkAccount());domain.put("time", System.currentTimeMillis());String token = JWTUtils.generateToken(AdminConstant.JWT_SALT, domain);// 持久化到 RedisjwtRedisDAO.set(AdminConstant.JWT_TOKEN + account, token);// 返回数据Map adminMap = adminMapper.getAdminByUkAccount(account);Map response = new HashMap();response.put("admin",adminMap);response.put("token",token);response.put("github","webhooks");response.put("jenkins","deploy.sh");return ResultUtils.success(response);}

Jenkins 创建任务

任务名称:自己随意起个就行

至于是选择 自由风格的软件项目 还是 maven 项目。

首先,如果没有安装 Maven Integration plugin 插件,是不会有 “构建一个maven项目”这个选项。

安装可以参考系列文章(一):https://blog.csdn.net/Davis_Dxs/article/details/82865331

然后我再说明一下哈,maven项目具体我还没摸清楚到底怎么玩,可能是我太笨。此处使用 自由风格 项目。

确定之后,来到任务配置页面。首先是:

General

选择 GitHub project 选项,Project url 为该项目主页地址。既是这个,如图所示:

源码管理

源码管理 选择 Git。

Repository URL: 该项目 clone 的 https 地址。即:

Credentials: 点击 Add . 添加 账号密码,此账号密码为 登录 GitHub的账号密码,即:

然后选中添加的 Credentials。

Branches to build:我选择的是 dev 分支,因为master分支上我没有提交 自动化部署的 shell 脚本。  这个分支选择你们在测试时根据实际情况即可。

源码库浏览器:选择 githubweb。 没有什么原因,至于有的话,我不知道。

URL 为该项目的主页地址:https://github.com/DevilMafia/cli

Additional Behaviours:点击新增, 然后选择:Check out to a sub-directory

此时的 Local subdirectory for repo 是存放从 GitHub 上拉下来的代码存放 目录名称,自己设置命名一个。我此时设置的与GitHub上项目名称相同。

构建触发器

构建触发器 一定要选择:GitHub hook trigger for GITScm polling

“GitHub hook trigger for GITScm polling”以前叫做“Build when a change is pushed to GitHub”,Github Plugin插件改了这个设置的名称。作用:可以监听GitHub上项目的 push 动作,然后进行自定义操作,下面即将配置我们所说的自定义操作。

构建环境

构建环境,先选中 Use secret text(s) or file(s)。

然后再 Bingding 模块中点击 新增,选择 Secret text。

Credentials:选择在 我们在系统管理-->系统设置中 GitHub Server 时,添加的 Credentials(Personal access token)。

最后,就是 构建。

构建

构建 选择增加构建步骤时,选中执行shell脚本。

BUILD_ID=DONTKILLME                                              防止杀死 tomcat 进程

. /etc/profile                                                                     加载环境变量

export PROJ_PAT=`pwd`                                               Jenkins的任务路径,clone的代码就在该目录下。

export TOMCAT_APP_PATH=/opt/tomcat                      tomcat 路径,根据各自服务器路径进行制定

sh $PROJ_PATH/cli/deploye.sh                                      执行自动化部署脚本,该脚本在从github上clone下来的项目中。

我们再来看下我们的自动化部署的 shell 脚本。代码如下:

#!/usr/bin/env bash# 项目路径
#export PROJ_PATH='pwd'# Tomcat 路径  此时路径为:47.100.177.120 节点tomcat路径
#export TOMCAT_APP_PATH=/opt/soft/tomcat# base 函数
killTomcat()
{pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`echo "tomcat Id list: $pid"if [ "$pid" = "" ]thenecho "no tomcat pid alive"elsekill -9 $pidfi
}# 进入项目目录
cd $PROJ_PATH/cli# 执行maven命令 进行清除及编译打包
mvn clean install# 停止 tomcat
killTomcat# 删除所有工程
rm -rf $TOMCAT_APP_PATH/webapps/*# copy 并 重命名 war 到 webapps 目录下
cp $PROJ_PATH/cli/admin/target/admin.war $TOMCAT_APP_PATH/webapps/
mv $TOMCAT_APP_PATH/webapps/admin.war $TOMCAT_APP_PATH/webapps/ROOT.war# 启动tomcat
cd $TOMCAT_APP_PATH/sh bin/startup.sh

最后,点击左下角的 保存按钮。

保存之后,会自动跳转到该任务的页面,如下图所示,点击立即构建。

第一次构建(#1)报错: 原因-->  把 . /etc/profile   写成 . /etc/profle

改正后,第二次构建(#2)成功,如图所示:


测试 Jenkins 自动部署

测试部署是否成功

postman 请求 登录接口。之前指定服务器IP: 47.99.66.88 此时已经替换为真正的用于本篇博文的测试服务器地址。

tomcat 默认启动端口:8080

默认账户密码:ukAccount:admin    password:123

接口路径:http://47.99.66.88:8080/sys/admin/login     请求路径 可以参考之前的项目代码。

请求结果如下:

我们在本地对 login 方法的返回结果代码进行修改,然后提交(push)。测试 push 后会不会自动构建,并且再次测试登录接口,观察返回结果是否发生改变。

修改后代码如下:仅注释掉返回结果集中的  github、jenkins 键值。

提交(push)代码:

此时返回到 GitHub_CSDN 任务主页,发现已经开始自动构建,如下图所示:

再次查看,已经构建成功。

再次测试接口,结果如下图所示:

此时,项目代码已经重新拉取、打包、部署。诚然,已更新。

到此,该博文结束。

个人能力有限,不足之处,请多多指教、留言。

技术交流群:

Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)相关推荐

  1. git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知

    简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/j ...

  2. 基于Gitlab Jenkins Docker集群 微服务搭建自动化部署平台

    随着公司应用系统的不断增多,原有手工部署流程越来越不满足上线的需求.为了各个系统能快速迭代与测试,减少上线流程时间和人为出错,迫切需要一套自动化部署系统. 转载原文:https://luoji.liv ...

  3. 《阿里云服务器搭建》------实现Jenkins和github之间自动化部署Java web项目

    本系列教程的搭建环境为阿里云服务器,其他服务器可作为参考. 本文主要讲述实现Jenkins和github之间自动化部署项目 在浏览器中打开我们的jenkins页面.(http://ip:80/jenk ...

  4. K8S搭建自动化部署环境(四)Jenkins多分支流水线Blue Ocean的安装和使用

    各位大佬,前文如下: K8S搭建自动化部署环境(一)安装Kubernetes K8S搭建自动化部署环境(二)安装K8S管理工具Kuboard V3 K8S搭建自动化部署环境(三)Jenkins下载.安 ...

  5. K8S搭建自动化部署环境(三)Jenkins下载、安装和启动

    各位大佬,前文如下: K8S搭建自动化部署环境(一)安装Kubernetes K8S搭建自动化部署环境(二)安装K8S管理工具Kuboard V3 一.jenkins 下载 jenkins下载地址:h ...

  6. 再见 Jenkins!几行脚本搞定自动化部署,这款神器有点厉害

    title: 再见 Jenkins!几行脚本搞定自动化部署,这款神器有点厉害 date: 2021-04-30 20:42:32 tags: CICD Jenkins 在开发或生产环境中,我们经常会搞 ...

  7. 使用Kubeadm部署K8S单节点,速度快于二进制部署

    使用Kubeadmin部署K8S单节点,速度快于二进制部署 一. 环境准备 二.所有节点安装docker 三.所有节点安装kubeadm,kubelet和kubectl 四.部署K8S集群 五.安装d ...

  8. PM2 自动化部署项目 之 (Vue SSR)

    背景 常规部署项目比较传统的方式通过上传工具直接上传文件替换服务器文件, 也可以通过Xftp 方式来更新/发布指定站点.随着项目复杂度的增强,开发技术等手段增多.一些部署方式显得有点力不从心,且操作过 ...

  9. 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)

    TableGo_20220801 v8.0.0 正式版发布,此次版本累计更新如下:  1.生成项目功能新增支持若依框架,可同时生成若依框架代码和所有业务表的前后端基础CRUD代码,一键搞定所有  2. ...

最新文章

  1. Redis 之布隆过滤器与布谷鸟过滤器
  2. 生成建表脚本up_CreateTable
  3. VC文件扩展名解读大全
  4. 5分钟用Spring4 搭建一个REST WebService(转)
  5. Thinkphp 数据库配置参数
  6. SxSW小组成员讨论了Valley调查中的Elephant
  7. glassfish3新建domain
  8. 华为防火墙网管配置实例
  9. 查看最大的10个文件
  10. 山东大学操作系统课设
  11. PS教程:利用自定义形状快速打造图案
  12. 实验九 vlan间路由实验
  13. 实拍:丽江特色美食腊排骨火锅
  14. MarkDown表格合并
  15. Redis 中的 集合(Set) SCARD:获取集合包含的元素数量
  16. 3GPP TS 23501-g51 中英文对照 | 5.2.4 Authorisation
  17. Makefile 与 GCC G++ 入门
  18. C端产品经理面试攻略
  19. 手把手教你Nodejs获取微信小程序二维码
  20. bibliometrix-BiblioShiny使用

热门文章

  1. 大学生值得浏览的网站
  2. HSC490控制器调试笔记(一)
  3. 【前端小技能】vue + highcharts 绘制世界地图及各个国家的地图
  4. wp门户新闻主题下载免授权自适应大门户WordPress主题
  5. Linux下静默安装Oracle数据库
  6. java语言Word、excel、ppt转pdf
  7. 重庆邮电大学计算机考研录取名单,重庆邮电大学2019年硕士研究生复试拟录取名单公示(第一批)...
  8. 基于51单片机太阳能光伏充电宝系统 +防过充 基于单片机太阳能充电系统
  9. 从源码编译安装 TensorFlow C++ 库和 DeepMD-kit
  10. IC基础知识(九)三态门与高阻态