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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Davis_Dxs/article/details/82868580

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

目录

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

Jenkins 服务器 环境

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

搭建 单节点 主要难点

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

检查是否按照 GitHub plugin 插件

GitHub 配置 Webhooks

GitHub 获取 Personal access tokens

Jenkins 配置

Jenkins 自动化部署 实战测试

扫描二维码关注公众号,回复: 3545141 查看本文章

测试项目介绍

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


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

命名为 单节点,是因为 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());
        }

        // 生成 token
        Map 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);

        // 持久化到 Redis
        jwtRedisDAO.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" = "" ]
    then
        echo "no tomcat pid alive"
    else
        kill -9 $pid
    fi
}

# 进入项目目录
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 任务主页,发现已经开始自动构建,如下图所示:

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

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

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

到此,该博文结束。

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

技术交流群:

猜你喜欢

转载自blog.csdn.net/Davis_Dxs/article/details/82868580