11. Jenkins 触发器及视图

1 构建触发器(钩子)

构建触发器(webhook),有的人称为钩子,实际上是一个 HTTP 回调,其用于在开发人员向 gitlab 提交代码后能够触发 jenkins 自动执行代码构建操作。

以下为新建一个开发分支,只有在开发人员向开发(develop)分支提交代码的时候才会触发代码构建,而向主分支提交的代码不会自动构建,需要运维人员手动部署代码到生产环境。

图片.png

1.1 gitlab开发分支创建,代码提交以及合并流程

  • 进到gitlab项目里(web-02), 选择新建分支
图片.png
图片.png
  • 向开发分支提交代码
root@git-client:/opt/web-02# git branch
* master
root@git-client:/opt/web-02# git pull # 拉取最新代码, 把devlop分支拉下来
Username for 'http://10.0.0.239': developer-01 
Password for 'http://developer-01@10.0.0.239': 
From http://10.0.0.239/qq/web-02
 * [new branch]      develop    -> origin/develop
Already up to date.
root@git-client:/opt/web-02# git branch
* master
root@git-client:/opt/web-02# git checkout develop # 切换到develop分支
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
Switched to a new branch 'develop'
root@git-client:/opt/web-02# git branch
* develop
  master

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>qq</title>
</head>
<body>
<h1>web-02-v.111111</h1>
<h1>web-02-v.222222</h1>
<h1>web-02-v.333333</h1>
<h1>web-02-v.444444</h1>
<h1>web-02-v.555555</h1>
<h1>web-02-v.666666</h1>
<h1>web-02-v.777777</h1>
<h1>web-02-v.888888</h1>
<h1>web-02-v.999999</h1>
<h1>web-02-v.10</h1>                                                                                                                                                        

</body>
</html>

root@git-client:/opt/web-02# git add index.html 
root@git-client:/opt/web-02# git commit -m "v10"
[develop 24d3539] v10
 1 file changed, 1 insertion(+)
root@git-client:/opt/web-02# git push -u origin
Username for 'http://10.0.0.239': developer-01
Password for 'http://developer-01@10.0.0.239': 
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes | 302.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: 
remote: To create a merge request for develop, visit:
remote:   http://10.0.0.239/qq/web-02/-/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote: 
To http://10.0.0.239/qq/web-02.git
   9e27543..24d3539  develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
  • 此时master分支是v9版本, develop分支是v10版本
图片.png
图片.png
  • 模拟开发上传代码到develop分支后, 提交代码合并申请, 由开发项目管理人员批准合并

公司中一般都是由开发负责人去做代码合并, 开发将代码提交到开发分支后, 把master分支合并到develop上, 这样develop分支就是最新的代码, 之后部署到测试环境进行测试, 当测试没问题后, 需要提交一个合并申请, 把开发分支的代码合并到master分支, 然后由开发负责人进行审批合并.

这里模拟developer-01为开发普通用户, developer-02为开发负责人, 先给developer-02授权qq项目的owner. 权限设置的最小粒度是一个组, 不能对项目单独授权

图片.png
  • 假设developer-01提交了v10版本后, 测试没问题, 之后提交merge request
图片.png
图片.png
图片.png
图片.png

因为developer-01本身就是管理员账户, 因此, 自己也会提示可以批准申请, 工作中请求会被发给开发的负责人, 这里就是developer-02账号

负责人登陆后会在右上角看到merge requests提示

图片.png
图片.png
图片.png

点击同意即可, 不用删除原分支

图片.png

开发回到gitlab, 验证master分支升级到了v10版本

图片.png

1.2 配置gitlab触发器

1.2.1 jenkins安装插件

Gitlab Authentication Plugin和Gitlab Hook Plugin

图片.png

注意: 1.4.2版本的插件会有安全隐患, 所有的jenkins配置都是以明文保存, 具有jenkins服务器文件系统权限的用户可以登录并且修改配置, 造成构建不可用, 还需要重新配置. 因此, jenkins服务器的用户名和密码不要和其他服务器一样, 要妥善保管

图片.png

1.2.2 修改jenkins用户权限

如果想使用构建触发器, 那么需要修改用户授权为登陆用户可以做任何事, 并且匿名用户具有可读权限. 这样之前设置的Roles-based就失效了, 任何用户登陆都是超级管理员权限, 因此, 触发器的配置可以在任意账户配置

图片.png

启动跨站请求伪造保护

图片.png

早期的jenkins版本, 配置这些后, gitlab就可以跨站触发构建了, 不过新版本的jenkins还需要添加一个认证字段, 否则会报错, 不过可以直接用curl命令或者通过Python脚本触发

openssl rand -hex 12
b8f29d278dc227ffbce317be # 通过shell命令生成一个令牌, 然后配置到jenkins上, gitlab访问jenkins时需要携带这个令牌

1.2.3 配置jenkins项目触发器

在需要自动触发的项目里, 配置令牌

图片.png

修改远程触发jenkins构建的URL

JENKINS_URL/job/projectA-web1/build?token=TOKEN_NAME
http://10.0.0.249:8080/job/projectA-web1/build?token=b8f29d278dc227ffbce317be

1.2.4 配置gitlab上的系统钩子, 需要用root账号登陆

图片.png

图片.png
  • 测试
图片.png

这时会报错, 因为新版的jenkins需要一个专门字段做认证

图片.png

1.2.5 解决报错

方法1: 在Linux服务器上, 使用curl命令进行触发, 此时是不需要认证的. 只需指明在构建触发器中填写的token即可

在任意终端执行即可

root@git-client:/opt/web-02# curl http://10.0.0.249:8080/job/projectA-web1/build?token=b8f29d278dc227ffbce317be

执行命令后, 会触发项目构建

图片.png

验证v10版本部署成功

这里web-02项目仍然部署的是master版本
图片.png

方法2: 使用Python处理

pip3 install jenkinsapi


from jenkinsapi.jenkins import Jenkins

conn = Jenkins("http://10.0.0.249:8080", username="tom",password="ning0803030221",useCrumb="b8f29d278dc227ffbce317be")

conn.build_job("projectA-web1")

运行脚本后, 会立即触发项目的构建, userCrumb字段就是在构建触发器里填写的Token

总结: 对于Jenkins构建触发器, 如果是老版本Jenkins, 可以按照上述方法, 完成gitlab自动触发jenkins构建. 新版本可以在代码上传到开发分支后, 手动使用curl命令或者Python脚本实现构建触发. 无论是自动触发还是通过curl和Python, 都只适用于开发测试分支, 对于master分支的部署, 需要经过测试后, 由运维人员到Jenkins手动构建

2 构建后项目关联

用于多个 job 相互关联,串行执行多个 job 的场景,可以通过安装插件 Parameterized Trigger 触发执行其他 project. 也就是当一个项目完成构建后, 自动触发另一个项目的构建

使用场景就是把一个job分成多个, 可以实现多个job的复用, 比如, 把关闭tomcat定义为一个job, 那么这个job就可以在任意job结束后进行调用. 不过一般用的不多, 实际都是把所有的工作在一个job内完成

案例: 当projectB-web1执行完, 自动触发projectB-web2的构建, 让web1执行停止tomcat服务操作, web2执行启动tomcat服务操作

图片.png
  • 修改projectB-web1的构建
图片.png
  • 修改projectB-web2的构建
图片.png
  • 测试构建
图片.png
图片.png

3 视图

视图可用于将 job 进行分组显示,比如将同一个业务的job放在一个视图显示,安装build pipeline 插件之后将会有一个+号用于创建视图.

Jenkins共有三个视图类别, 我的视图, 列表视图和pipeline视图

3.1 使用pipeline视图

  • 安装build pipeline插件
图片.png
  • 重启jenkins
root@jenkins:~# systemctl restart jenkins
  • 创建pipeline视图
图片.png
图片.png
图片.png
图片.png
图片.png
  • 点击构建, 刷新页面后会显示新的job正在执行
图片.png
  • 可以查看控制台输出
图片.png
图片.png
  • 视图创建后, 会显示在jenkins首页
图片.png

3.2 使用我的视图

我的视图就是用来用户登陆后, 用来显示自己权限所能看到的job, 不过用户登陆本身也是显示自己所能看到的job, 所以一般没什么用

图片.png

图片.png

3.3 使用列表视图

图片.png
  • 选择视图需要显示的job
图片.png

这样该列表视图就会只显示定义的job, 因此, 列表视图就是按照不同的业务, 不同的项目, 对job进行分类

图片.png

3.4 使用脚本批量触发任务构建

  • 利用Python脚本, 可以实现多个任务的串行构建, 效率远高于在页面用鼠标点击
from jenkinsapi.jenkins import Jenkins

conn = Jenkins("http://10.0.0.249:8080", username="tom",password="ning0803030221",useCrumb="b8f29d278dc227ffbce317be")
# 需要构建哪个job, 只需要添加即可
conn.build_job("projectA-web1")
conn.build_job("projectA-web2")
conn.build_job("projectB-web1")
conn.build_job("projectB-web2")
  • 只要把需要构建的项目的job, 编写到脚本里, 即可一次运行, 触发所有的构建任务. 工作中, 可以和开发协商需要构建哪些业务的哪些项目, 提前把构建任务配置好, 需要部署时, 直接运行Python脚本, 即可完成批量的构建触发
图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容