写点什么

实战:向 GitHub 提交代码时触发 Jenkins 自动构建

作者:程序员欣宸
  • 2022 年 5 月 04 日
  • 本文字数:2633 字

    阅读完需:约 9 分钟

实战:向GitHub提交代码时触发Jenkins自动构建

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


本篇概览

  • 当我们提交代码到 GitHub 后,可以在 Jenkins 上执行构建,但是每次都要动手去执行略显麻烦,今天我们就来实战 Jenkins 的自动构建功能,每次提交代码到 GitHub 后,Jenkins 会进行自动构建;

前期准备工作

  • 进行本章的实战前,推荐您参照《docker 下的 Jenkins 安装和体验》做安装和体验的实战,以便对 Jenkins 服务有初步了解;

重要前提

  1. GitHub 收到提交的代码后要主动通知 Jenkins,所以 Jenkins 所在服务器一定要有外网 IP,否则 GitHub 无法访问,我的 Jenkins 服务器是部署在腾讯云的云主机上,带有外网 IP;

  2. 本次实战要提交源码到 GitHub,所以您需要有一个 GitHub 号,并在上面创建工程;

demo 工程源码

  • 本次用来在 Jenkins 上构建的工程是个 springboot 的 web 工程,地址是:git@github.com:zq2599/jenkinsdemo.git,用浏览器访问的地址是:https://github.com/zq2599/jenkinsdemo.git

  • 代码很简单,只有一个 controller,接收 http 请求返回一个字符串,如下所示:


@RestControllerpublic class Hello {    @RequestMapping("/")    public String sayHello(){        return "3. Hello jenkins, " + new Date();    }}
复制代码


  • 您需要在自己的 GitHub 创建一个项目,源码可以参照上述 demo 工程的源码;

实战步骤梳理

  • 本次整个实战过程依次为如下步骤:


  1. GitHub 上准备一个 spring boot 的 web 工程;

  2. GitHub 上配置 Jenkins 的 webhook 地址;

  3. 在 GitHub 上创建一个 access token,Jenkins 做一些需要权限的操作的时候就用这个 access token 去鉴权;

  4. Jenkins 安装 GitHub Plugin 插件;

  5. Jenkins 配置 GitHub 访问权限;

  6. Jenkins 上创建一个构建项目,对应的源码是步骤 1 中的 web 工程;

  7. 修改 web 工程的源码,并提交到 GitHub 上;

  8. 检查 Jenkins 的构建项目是否被触发自动构建,构建成功后,下载工程运行,看是不是基于最新的代码构建的;

webhook 地址

  • webhook 是通知 Jenkins 时的请求地址,用来填写到 GitHub 上,这样 GitHub 就能通过该地址通知到 Jenkins;

  • 假设 Jenkins 所在服务器的地址是:192.168.0.1,端口为 8080,那么 webhook 地址就是 http://192.168.0.1:8080/github-webhook

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

配置 GitHub

  • 登录 GitHub,进入要本次构建用到的工程;

  • 在工程主页面点击右上角的"Settings",再点击左侧"Webhooks",然后点击“Add webhook”,如下图:

  • 如下图,在"Payload URL"位置填入 webhook 地址,再点击底部的"Add webhook 按钮",这样就完成 webhook 配置了,今后当前工程有代码提交,GitHub 就会向此 webhook 地址发请求,通知 Jenkins 构建:

生成 Personal access tokens

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

  • 登录 GitHub,进入"Settings"页面,点击左下角的"Developer settings",如下图:

  • 跳转到"Developer settings"页面后,点击左下角的“Personal access tokens”,如下图:

  • 跳转到"Personal access tokens"页面后,点击右上角的"Generate new token"按钮,如下图:

  • 可能会提示输入 GitHub 密码,输入后跳转到创建 token 的页面,如下图所示,输入 title,再勾选"repo"和"admin:repo_hook",再点击底部的"Generate token"按钮,就能产生一个新的 access token,将此字符串复制下来,后面 jenkins 任务中会用到:

Jenkins 配置

  • GitHub Plugin 插件,在"系统管理->管理插件"位置检查此插件是否已经安装,没有的话请先安装;

  • 配置 GitHub,点击“系统管理->系统设置”,如下图:

  • 在系统设置页面找到"GitHub",配置一个"GitHub Server",如下图,"API URL"填写"https://api.github.com","Credentials"位置如下图红框所示,选择"Add->Jenkins":

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

  • 填写完毕后,点击右侧的"Test connection"按钮,如果信息没有填错,显示的内容如下图所示:

  • 点击页面最底部的"保存"按钮;

GitHub 项目的项目主页和仓库地址

  • 项目主页和仓库地址是不同的,如下图,红框 1 中是项目主页,点击红框 2 的按钮后,红框 3 中是仓库地址(要用 HTTPS 的,不用 SSH 的):


  • 项目主页:https://github.com/zq2599/jenkinsdemo

  • 仓库地址:https://github.com/zq2599/jenkinsdemo.git

新建构建项目

  • 在 Jenkins 上新建一个 maven 构建项目,名为 test003,如下图:


  • 接下来设置 test003 的配置信息,分为"源码管理设置"和"构建环境设置"两部分;

源码管理设置


  • 上图中每个红框的设置如下解释:


  1. 选择"Git";

  2. "Repository URL"输入仓库地址:https://github.com/zq2599/jenkinsdemo.git

  3. "Credentials"创建一个 Credentials,Kind 选择"Username with password",Username 输入 GitHub 账号,Password 输入 GitHub 密码;

  4. "源码库浏览器"选择"githubweb";

  5. "URL"输入项目主页:https://github.com/zq2599/jenkinsdemo

  6. "构建触发器"中勾选"GitHub hook trigger for GiTScm polling";

构建环境设置

  • 如下图所示,勾选"Use secret text(s) or file(s)",下面的"Credentials"选择我们之前配置过的"Personal access tokens"


  • 设置完成后,点击页面底部的"保存"按钮;

修改 web 工程代码并提交到 GitHub

  • 将 GitHub 仓库的代码 clone 到本地,做一些修改然后提交到 GitHub 上,例如我修改了 Hello.java 中的源码(修改了 sayHello 方法的 return 的字符串的内容),如下所示:

@RestControllerpublic class Hello {
@RequestMapping("/") public String sayHello(){ //修改返回的字符串的内容 return "abcdefg. Hello jenkins, " + new Date(); }}
复制代码
  • 提交到 GitHub 的操作如下图所示:

Jenkins 自动构建

  • 回到 Jenkins 的 test003 页面,可以看到已经开始自动构建了,如下图:

验证自动构建结果

  • 在 test003 的页面,点击"工作空间"->"工作区",如下图:


  • 点击下图红框中的"mavendockerplugindemo-0.0.1-SNAPSHOT.jar",浏览器就会下载这个文件:


  • 下载成功后,在 mavendockerplugindemo-0.0.1-SNAPSHOT.jar 所在目录下执行命令 java -jar mavendockerplugindemo-0.0.1-SNAPSHOT.jar,web 应用启动成功,如下图:


  • 浏览器输入 localhost:8080,可以看到 web 应用返回的内容是我们刚刚提交的最新内容,如下图:


  • 至此,GitHub 提交触发 Jenkins 自动构建的实战就完成了,希望能对您搭建持续构建环境有所帮助。

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

发布于: 刚刚阅读数: 2
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
实战:向GitHub提交代码时触发Jenkins自动构建_DevOps_程序员欣宸_InfoQ写作社区