cicdDevOps

11. Jenkins 触发器及视图

2021-07-06  本文已影响0人  随便写写咯

1 构建触发器(钩子)

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

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

图片.png

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

图片.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'.
图片.png 图片.png

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

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

图片.png 图片.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 图片.png 图片.png 图片.png 图片.png

3 视图

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

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

3.1 使用pipeline视图

图片.png
root@jenkins:~# systemctl restart jenkins
图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png 图片.png

3.2 使用我的视图

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

图片.png
图片.png

3.3 使用列表视图

图片.png 图片.png

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

图片.png

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

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")
图片.png
上一篇 下一篇

猜你喜欢

热点阅读