实战:向GitHub提交代码时触发Jenkins自动构建
当我们提交代码到GitHub后,可以在Jenkins上执行构建,但是每次都要动手去执行略显麻烦,今天我们就来实战Jenkins的自动构建功能,每次提交代码到GitHub后,Jenkins会进行自动构建;
原文地址:http://blog.csdn.net/boling_cavalry/article/details/78943061
前期准备工作
进行本章的实战前,推荐您参照《docker下的Jenkins安装和体验》做安装和体验的实战,以便对Jenkins服务有初步了解;
重要前提
- GitHub收到提交的代码后要主动通知Jenkins,所以Jenkins所在服务器一定要有外网IP,否则GitHub无法访问,我的Jenkins服务器是部署在腾讯云的云主机上,带有外网IP;
- 本次实战要提交源码到GitHub,所以您需要有一个GitHub号,并在上面创建工程;
demo工程源码
本次用来在Jenkins上构建的工程是个springboot的web工程,地址是:git@github.com:zq2599/jenkinsdemo.git,用浏览器访问的地址是:https://github.com/zq2599/jenkinsdemo.git;
代码很简单,只有一个controller,接收http请求返回一个字符串,如下所示:
@RestController
public 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,生成步骤如下:
1. 登录GitHub,进入”Settings”页面,点击左下角的”Developer settings”,如下图:
2. 跳转到”Developer settings”页面后,点击左下角的“Personal access tokens”,如下图:
3. 跳转到”Personal access tokens”页面后,点击右上角的”Generate new token”按钮,如下图:
4. 可能会提示输入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的字符串的内容),如下所示:
@RestController
public 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自动构建的实战就完成了,希望能对您搭建持续构建环境有所帮助。
实战:向GitHub提交代码时触发Jenkins自动构建的更多相关文章
- 六、配置github的pull request触发jenkins自动构建
之前的配置,都是向master分支push操作触发jenkins进行构建,但是在一般的正常工作中,不会允许程序员直接向主分支推送代码:正常都是fork一个本地的分支,在本地分支调试完后,向主干分支提交 ...
- 配置github的pull request触发jenkins自动构建
参照: https://www.cnblogs.com/zanjiahaoge666/p/6402738.html 之前的配置,都是向master分支push操作触发jenkins进行构建,但是在一般 ...
- Gitlab源码库里代码提交后,如何触发jenkins自动构建?
版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...
- github提交代码时,报permission denied publickey
在像github提交代码时,报permission denied publickey. 查找了一下,可能是因为github的key失效了. 按照以下步骤,重新生成key. ssh-keygen 一路默 ...
- SVN怎么触发Jenkins自动构建
通常,有几种方式可以在SVN仓库发生改变时触发Jenkins进行构建.第一种是,Jenkins主动轮询SVN仓库:第二种是,在SVN客户端(如TortoiseSVN)创建客户端hooks来触发构建:第 ...
- Gitlab使用Webhook实现Push代码后的jenkins自动构建
本文出自https://www.cnblogs.com/kevingrace/p/6479813.html 怕以后找不到,所以先写到自己博客中 Gitlab利用Webhook实现Push代码后的jen ...
- 向Github提交代码时遇到的一些问题
今天分享一下我的一些小经验,那就是向github提交我们的代码.之前一直是直接使用的浏览器完成的代码的下载任务,没有使用过客户端,为了让自己在工作之前熟练使用GitHub,所以就有了下面的这篇博文了. ...
- Gitlab利用Webhook实现Push代码后的jenkins自动构建
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布.这种方式每次在发版的时候,需要人工去执行je ...
- gitlab实现webhook触发jenkins 自动,构建,测试,push webhook构子 总结
最新一直在学习 工作 + 学习 去掉 90% 所以blog 一直没更 真是很不好! exsi ceph gitlab jenkins harbor k8s docker-compose ap ...
随机推荐
- mysql慢查询和php-fpm慢日志
MySQL慢查询 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较长的SQL语句 ...
- 如何删除linux是用root生成的文件夹以及文件
rm -rf 文件名 管理员的身份进行删除
- 分布式系统中的幂等性-zookeeper与dubbo
现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有 ...
- NSMutableString和NSString区别,及相互转换方法
NSString是一个不可变的字符串对象.这不是表示这个对象声明的变量的值不可变,而是表示它初始化以后,你不能改变该变量所分配的内存中的值,但你可以重新分配该变量所处的内存空间.而NSMutableS ...
- byte[]与各种数据类型互相转换示例
public class TestCase { /** * short到字节数组的转换. */ public static byte[] shortToByte(short number) { int ...
- mongodb禁止外网访问以及添加账号
未曾料到被黑客勒索比特币的戏码竟然降临到我的身上,几个月的技术积累付之一炬.怪只怪自己学艺不精,心存侥幸和无知,不过经此一役,方知网络安全防护的重要性. 一直未给自己的mongodb数据库设置账号密码 ...
- 理解django的多对多ManyToManyField
转自:http://luozhaoyu.iteye.com/blog/1510635 对于第一次碰到django这样类activerecord的ORM,初学者可能比较疑惑的是ManyToManyFie ...
- Android6.0------权限申请~easypermissions
前面写了Android6.0权限介绍和权限单个,多个申请,用的是纯Java代码,本文主要说的是借助第三方库来实现权限申请. 借助第三方库 easypermissions来申请6.0权限,Google官 ...
- UVA-11324 The Largest Clique (强连通+DP)
题目大意:在一张无向图中,最大的节点集使得集合内任意两个节点都能到达对方. 题目分析:找出所有的强连通分量,将每一个分量视作大节点,则原图变成了一张DAG.将每个分量中的节点个数作为节点权值,题目便转 ...
- SPOJ KPSUM ★(数位DP)
题意 将1~N(1<=N<=10^15)写在纸上,然后在相邻的数字间交替插入+和-,求最后的结果.例如当N为12时,答案为:+1-2+3-4+5-6+7-8+9-1+0-1+1-1+2=5 ...