前期准备工作

  1. Linux系统(外网可访问,如果是阿里云则需要开放端口)
  2. Docker(需要docker基础)
  3. Jenkins(基于docker容器)
  4. Maven工程使用github管理
发布项目思路:
  1. 使用dockerfile编写镜像,执行jar包;
  2. 运行镜像,挂载项目路径;
  3. Jenkins自动构建后通过配置的SSH上传jar包到挂载的路径;
  4. 上传后执行重启容器命令;
  5. dockerfile编写:
FROM java:8
RUN cd /
RUN mkdir projects
WORKDIR /projects
EXPOSE 90
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","tuding.jar"]
  1. 运行容器
docker run --name=tuding-1 -d -p 90:90 -v /usr/local/docker_volume/projects/tuding:/projects tuding-1

ps:这里运行容器会失败,因为还没有jar包,这里只需要有个容器即可,等待jenkins构建上传jar包,执行重启容器命令。

实现目标

本地代码修改,提交到Github远程仓库,即可完成自动化部署。

步骤梳理

  1. 本次整个过程依次为如下步骤:
  2. GitHub上准备一个spring boot的web工程;
  3. 在GitHub上创建一个access token,Jenkins做一些需要权限的操作的时候就用这个access token去鉴权;
  4. GitHub上配置Jenkins的webhook地址;
  5. Jenkins安装GitHub Plugin插件;
  6. Jenkins配置GitHub访问权限;
  7. Jenkins上创建一个构建项目,对应的源码是步骤1中的web工程;
  8. 修改web工程的源码,并提交到GitHub上;
  9. 检查Jenkins的构建项目是否被触发自动构建,构建成功后,访问项目,看是不是基于最新的代码构建;
webhook地址

webhook是通知Jenkins时的请求地址,用来填写到GitHub上,这样GitHub就能通过该地址通知到Jenkins;
假设Jenkins所在服务器的地址是:192.168.15.11,端口为8080,那么webhook地址就是http://192.168.15.11:8080/github-webhook

再次提醒,上述地址必须是外网也能访问的,否则GitHub无法访问到Jenkins;

一、使用IDEA拉取Github源码在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20200528194825552.png在这里插入图片描述

demo工程源码

  1. 本次用来在Jenkins上构建的工程是个springboot的web工程
    代码很简单,只有一个controller,接收http请求返回一个字符串,如下所示:
@RestController
public class Controller {

    Date date = new Date();
    @RequestMapping("hello")
    public String hello(String name){
        return name + ",<font color='red'>您好:</font>" + date.getTime();
    }
    
}
  1. 本地测试, http请求访问
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200528195711656.png

二、配置GitHub

一、生成Personal access tokens
  1. Jenkins访问GitHub工程的时候,有的操作是需要授权的,所以我们要在GitHub上生成授权的token给Jenkins使用,这就是Personal access tokens,生成步骤如下:

登录GitHub,进入"Settings"页面,点击左下角的"Developer settings",如下图:
在这里插入图片描述

  1. 跳转到"Developer settings"页面后,点击左下角的“Personal access tokens”,如下图:
    在这里插入图片描述
  2. 跳转到"Personal access tokens"页面后,点击右上角的"Generate new token"按钮,如下图:在这里插入图片描述
  3. 可能会提示输入GitHub密码,输入后跳转到创建token的页面,如下图所示,输入title,再勾选"repo"和"admin:repo_hook",再点击底部的"Generate token"按钮,就能产生一个新的access token,将此字符串复制下来,后面jenkins任务中会用到:
    在这里插入图片描述
二、配置Github Webhooks(钩子,有新代码提交,会通知jenkins)
  1. 在工程主页面点击右上角的"Settings",再点击左侧"Webhooks",然后点击“Add webhook”,如下图:
    在这里插入图片描述
  2. 如下图,在"Payload URL"位置填入webhook地址,再点击底部的"Add webhook按钮",这样就完成webhook配置了,今后当前工程有代码提交,GitHub就会向此webhook地址发请求,通知Jenkins构建:
    在这里插入图片描述
    配置Github Webhooks(钩子)这一步其实可以不用配置,配置了也是405访问不了,在下面jenkins配置中配置完毕,Github会自动创建钩子

三、Jenkins配置

一、配置国内源(如需下载插件,则可以配置,下载插件速度提高)
  1. 点击“系统管理->管理插件->高级”,如下图所示:
    在这里插入图片描述
    在这里插入图片描述
  2. 输入国内源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    在这里插入图片描述
二、系统设置
  1. GitHub Plugin插件,在"系统管理->管理插件"位置检查此插件是否已经安装,没有的话请先安装;在这里插入图片描述在这里插入图片描述
    红框4处输入过滤插件:

    1. 搜索Git,全部选中,点击红框5进行下载,配置github需要使用;
    2. 搜索SSH,全部选中,点击红框5进行下载,配置远程服务器需要使用;
    3. 搜索Maven,全部选中,点击红框5进行下载,配置项目Maven需要使用;
    4. 搜索Locale,全部选中,点击红框5进行下载,配置国际化中文需要使用;
    5. 上述下载可以并行一起下载。
  2. 配置国际化,点击“系统管理->系统设置”,如下图:
    在这里插入图片描述
    在这里插入图片描述
    zh_CN:简体中文
    zh_TW:繁体中文

  3. 配置GitHub,点击“系统管理->系统设置”,在系统设置页面找到"GitHub",配置一个"GitHub Server",如下图,“API URL"填写"https://api.github.com”,“Credentials"位置如下图红框所示,选择"Add->Jenkins”:
    在这里插入图片描述

  4. 弹出的页面中,“Kind"选择"Secret text”,"Secret"填入前面在GitHub上生成的Personal access tokens,Description随便写一些描述信息,如下图:
    在这里插入图片描述

  5. 写完毕后,点击右侧的"Test connection"按钮,如果信息没有填错,显示的内容如下图所示:
    (ps:点击Test connection可能会失败,多切换Credentials下拉框试几次)
    在这里插入图片描述

  6. 配置登录的SSH Server信息,描述把构建的jar包上传到哪台服务器,上传到哪个路径,如下图所示:
    在这里插入图片描述
    上述解释:

    1. Name:ssh名称,可随意填写;
    2. Hostname:远程服务器地址;
    3. Username:远程服务器账号;
    4. Remote Directory:上传到远程服务器的路径(这里是全局配置,会影响所有选择此SSH Server的项目,后面也有解释)
    5. 点击红框2输入远程服务器登录密码,如下图所示,输入完毕后点击右边“Test Configuration”按钮测试:
      在这里插入图片描述
  7. 点击页面最底部的"保存"按钮;

三、获得Github项目地址
  1. GitHub项目的仓库地址
    项目主页和仓库地址是不同的,如下图,点击红框2的按钮后,红框3中是仓库地址(要用HTTPS的,不用SSH 的):
    在这里插入图片描述在这里插入图片描述
    仓库地址:https://github.com/a402942988/tuding.git
四、jenkins新建构建项目
  1. 在Jenkins上新建一个maven构建项目,名为tuding,如下图:
    若没有maven选项:在Maven Plugin插件,在"系统管理->管理插件"位置检查此插件是否已经安装,没有的话请先安装;
    在这里插入图片描述
    接下来设置的配置信息,分为"源码管理设置"和"构建环境设置"两部分;
五、源码管理设置

1.若第一次配置,则红框3处需要先点击右侧Add,输入Githu登录账户与密码
在这里插入图片描述
2. 勾选Github钩子
在这里插入图片描述
上图中每个红框的设置如下解释:

  1. 选择"Git";
  2. "Repository URL"输入仓库地址:https://github.com/a402942988/tuding.git;
  3. “Credentials"创建一个Credentials,Kind选择"Username with password”,Username输入GitHub账号,Password输入GitHub密码;
  4. “构建触发器"中勾选"GitHub hook trigger for GiTScm polling”;
六、构建环境设置
  1. 如下图所示,勾选"Use secret text(s) or file(s)",下面的"Credentials"选择我们之前配置过的"Personal access tokens"
    在这里插入图片描述
    在这里插入图片描述

  2. maven设置,如下图所示:在这里插入图片描述

  3. 配置构建后的操作,准备上传到远程Linux的Docker挂载目录,如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    上述步骤解释:

    1. 选择“建置成功或是不穩定都執行“;
    2. 选择“Send files or execute commands over SSH”;
    3. 从Jenkins全局配置中配置的列表中选择SSH配置(也就是上面配置的“GitHub Server”);
    4. 选择jar包的相对路径(本次jar位置在demo-www/target/目录下);
    5. 去除前缀,也就是只留下jar包名称;
    6. 上传成功后执行的命令,使用docker重启容器;
  4. 设置完成后,点击页面底部的"保存"按钮;

  5. 配置完毕后,再Github查看钩子是否自动创建成功,若显示如下图所示,则表示成功:
    紫色框中显示“✔”,表示Github可以通知到 jenkins
    在这里插入图片描述

七、构建运行
  1. 点击构建,如下图所示:
    在这里插入图片描述

  2. 等待几秒,右下角出现构建进度条,如下图所示:
    在这里插入图片描述

  3. 点击项目名称,进入如下图所示,点击查看构建日志:
    在这里插入图片描述

  4. 查看日志,如下图所示:
    红框1:表示构建成功;
    红框2:表示构建后的项目路径;
    红框3:表示上传到linux服务器,并执行命令;
    红框4:表示执行成功;
    在这里插入图片描述

  5. 访问远程http地址,查看是否发布成功:
    在这里插入图片描述

  6. 修改本地代码,如下图所示:

@RestController
public class Controller {

    Date date = new Date();
    @RequestMapping("hello")
    public String hello(String name){
        return name + ",<font color='red'>您好,我修改了内容:</font>" + date.getTime();
    }
    
}
  1. Git提交代码后,jenkins会自动构建
    (原理是提交代码到Github仓库后,Github通过配置的webhook地址通知jenkins,jenkins收到请求则进行自动构建)
    在这里插入图片描述
  2. 查看Github通知日志,成功被通知,如下图所示:
    在这里插入图片描述
  3. 查看是否自动化构建成功:在这里插入图片描述

结尾

至此,github+jenkins+docker自动化构建Maven工程已经达成。该构造可运行在中小公司完全没问题,如果构建频繁等原因性能跟不上,可在此结构上进行扩展,增加jenkins集群和docker服务器。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐