前面使用插件模拟了Jenkins如何触发流水线,现在使用Gitlab去触发Jenkins。
进入项目设置, gitlab webhook的配置页面:(为你的项目创建webhook)
trigger下面是很多事件,push events就是提交之后的构建 。(基于事件去触发)
事件:
这里选择的是代码提交事件, 过滤的分支是以feature开头的所有分支
当事件触发了,就会去使用URL去触发Jenkins。
新建一个“Gitlab-Webhook-Trigger”项目, 开启Generic webhook。 配置触发token 为作业名称gitlab-test-pipeline。
现在在Jenkins启用触发器,并且填入token,token值为项目名字
生成的触发URL
http://139.198.166.235:8080/generic-webhook-trigger/invoke?token=Gitlab-Webhook-Trigger
进入项目设置, gitlab webhook的配置页面:
当修改代码,提交之后,基于所有分支。那么gitlab会向上面配置的url里面发送一个post请求,然后触发Jenkins。
出现此FAQ:Url is blocked: Requests to the local network are not allowed
解决方法:进入admin管理页面设置 > network
找到"Outbound requests"勾选允许请求webhooks和服务。(更改后,重启触发即可)
模拟事件触发,点击test按钮选择push事件,此时去看下Jenkins是否成功被触发。
触发成功提示: Hook executed successfully: HTTP 200
触发之后,Jenkins拿到如下的数据,gitlab将数据发送给Jenkins了,后面需要什么信息在里面过滤就可以。
Generic Cause
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline (hide)
GenericWebhookEnvironmentContributor
Received:
{"object_kind":"push","event_name":"push","before":"0d9212b05a167d8c6e53f225402894456894ef1e","after":"236006b394466b614ca84fcd6a767329d3b9eea4","ref":"refs/heads/master","checkout_sha":"236006b394466b614ca84fcd6a767329d3b9eea4","message":null,"user_id":1,"user_name":"Administrator","user_username":"root","user_email":"","user_avatar":"https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","project_id":3,"project":{"id":3,"name":"devops-hello-service","description":"","web_url":"http://76c03cb0fea1/devops/devops-hello-service","avatar_url":null,"git_ssh_url":"git@76c03cb0fea1:devops/devops-hello-service.git","git_http_url":"http://76c03cb0fea1/devops/devops-hello-service.git","namespace":"devops","visibility_level":0,"path_with_namespace":"devops/devops-hello-service","default_branch":"master","ci_config_path":null,"homepage":"http://76c03cb0fea1/devops/devops-hello-service","url":"git@76c03cb0fea1:devops/devops-hello-service.git","ssh_url":"git@76c03cb0fea1:devops/devops-hello-service.git","http_url":"http://76c03cb0fea1/devops/devops-hello-service.git"},"commits":[{"id":"236006b394466b614ca84fcd6a767329d3b9eea4","message":"Update .gitlab-ci.yml file","title":"Update .gitlab-ci.yml file","timestamp":"2021-08-24T01:39:35+00:00","url":"http://76c03cb0fea1/devops/devops-hello-service/-/commit/236006b394466b614ca84fcd6a767329d3b9eea4","author":{"name":"Administrator","email":"[email protected]"},"added":[],"modified":[],"removed":[]},{"id":"56cf4744926b013ac7ca1302e1214e44e90a8950","message":"Update .gitlab-ci.yml file","title":"Update .gitlab-ci.yml file","timestamp":"2021-08-24T01:37:29+00:00","url":"http://76c03cb0fea1/devops/devops-hello-service/-/commit/56cf4744926b013ac7ca1302e1214e44e90a8950","author":{"name":"Administrator","email":"[email protected]"},"added":[],"modified":[".gitlab-ci.yml"],"removed":[]},{"id":"0d9212b05a167d8c6e53f225402894456894ef1e","message":"Add new file","title":"Add new file","timestamp":"2021-08-24T01:36:04+00:00","url":"http://76c03cb0fea1/devops/devops-hello-service/-/commit/0d9212b05a167d8c6e53f225402894456894ef1e","author":{"name":"Administrator","email":"[email protected]"},"added":[".gitlab-ci.yml"],"modified":[],"removed":[]}],"total_commits_count":3,"push_options":{},"repository":{"name":"devops-hello-service","url":"git@76c03cb0fea1:devops/devops-hello-service.git","description":"","homepage":"http://76c03cb0fea1/devops/devops-hello-service","git_http_url":"http://76c03cb0fea1/devops/devops-hello-service.git","git_ssh_url":"git@76c03cb0fea1:devops/devops-hello-service.git","visibility_level":0}}
最后,如果你需要其他条件触发,还可以进行添加webhook(遇到多个分支去触发,多加一个webhook)
进入webhook添加页面的最下方,点击你所创建的webhook的 Edit按钮
可以查看到webhook的历史记录, 可以看到本次提交是否正常产生了webhook事件。
点击 View details
可以看到此webhook发送给对端Jenkins的数据信息,和请求状态。
如果此次请求由于xxx原因导致没有触发jenkins构建, 可以在这里点击 Resend Request
按钮进行重新发送请求,而不是再次提交代码。
如果Jenkins触发成功了之后,我们可以在Jenkins的构建日志中查看效果。 这些数据就是gitlab post传递过来的。
到此:你基本上已经知道了Gitlab如何触发Jenkins的了。(多看几遍,多练习几遍)
一个请求和响应的过程:
调用接口的方法
请求类型:
def webHookData = readJSON text: "${allData}"
String userName = webHookData.user_name
String userEmail = webHookData.user_email
pipeline {
agent any
stages {
stage('Hello') {
steps {
println("${webHookData}")
println(userName)
println(userEmail)
}
}
}
}
[Pipeline] readJSON
[Pipeline] node
Running on build-01 in /data/cicd/jenkinsagent/workspace/jenkins/webhook-01
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] echo
[object_kind:push, event_name:push, before:efce8922637921394bd9509dc275a009901173aa, after:0a6725102ba2cf695565eed029f1939029147aa4, ref:refs/heads/master, checkout_sha:0a6725102ba2cf695565eed029f1939029147aa4, message:null, user_id:2, user_name:devop, user_username:devop, user_email:[email protected], user_avatar:https://www.gravatar.com/avatar/dde905e7f79c53e01eadfc040c720816?s=80&d=identicon, project_id:4, project:[id:4, name:devops-hello-service, description:, web_url:http://76c03cb0fea1/dev/devops-hello-service, avatar_url:null, git_ssh_url:git@76c03cb0fea1:dev/devops-hello-service.git, git_http_url:http://76c03cb0fea1/dev/devops-hello-service.git, namespace:dev, visibility_level:0, path_with_namespace:dev/devops-hello-service, default_branch:master, ci_config_path:null, homepage:http://76c03cb0fea1/dev/devops-hello-service, url:git@76c03cb0fea1:dev/devops-hello-service.git, ssh_url:git@76c03cb0fea1:dev/devops-hello-service.git, http_url:http://76c03cb0fea1/dev/devops-hello-service.git], commits:[[id:0a6725102ba2cf695565eed029f1939029147aa4, message:Update Jenkinsfile, title:Update Jenkinsfile, timestamp:2021-08-30T00:37:27+00:00, url:http://76c03cb0fea1/dev/devops-hello-service/-/commit/0a6725102ba2cf695565eed029f1939029147aa4, author:[name:devop, email:[email protected]], added:[], modified:[Jenkinsfile], removed:[]], [id:0cbf76185c4b87558dbfcaa836c5ac8eb1e180f3, message:Update Jenkinsfile, title:Update Jenkinsfile, timestamp:2021-08-28T07:38:26+00:00, url:http://76c03cb0fea1/dev/devops-hello-service/-/commit/0cbf76185c4b87558dbfcaa836c5ac8eb1e180f3, author:[name:devop, email:[email protected]], added:[], modified:[Jenkinsfile], removed:[]], [id:efce8922637921394bd9509dc275a009901173aa, message:Update Jenkinsfile, title:Update Jenkinsfile, timestamp:2021-08-28T06:35:33+00:00, url:http://76c03cb0fea1/dev/devops-hello-service/-/commit/efce8922637921394bd9509dc275a009901173aa, author:[name:devop, email:[email protected]], added:[], modified:[Jenkinsfile], removed:[]]], total_commits_count:3, push_options:[:], repository:[name:devops-hello-service, url:git@76c03cb0fea1:dev/devops-hello-service.git, description:, homepage:http://76c03cb0fea1/dev/devops-hello-service, git_http_url:http://76c03cb0fea1/dev/devops-hello-service.git, git_ssh_url:git@76c03cb0fea1:dev/devops-hello-service.git, visibility_level:0]]
[Pipeline] echo
devop
[Pipeline] echo
[email protected]
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Request body:
{
"object_kind": "push",
"event_name": "push",
"before": "efce8922637921394bd9509dc275a009901173aa",
"after": "0a6725102ba2cf695565eed029f1939029147aa4",
"ref": "refs/heads/master",
"checkout_sha": "0a6725102ba2cf695565eed029f1939029147aa4",
"message": null,
"user_id": 2,
"user_name": "devop",
"user_username": "devop",
"user_email": "[email protected]",
"user_avatar": "https://www.gravatar.com/avatar/dde905e7f79c53e01eadfc040c720816?s=80&d=identicon",
"project_id": 4,
"project": {
"id": 4,
"name": "devops-hello-service",
"description": "",
"web_url": "http://76c03cb0fea1/dev/devops-hello-service",
"avatar_url": null,
"git_ssh_url": "git@76c03cb0fea1:dev/devops-hello-service.git",
"git_http_url": "http://76c03cb0fea1/dev/devops-hello-service.git",
"namespace": "dev",
"visibility_level": 0,
"path_with_namespace": "dev/devops-hello-service",
"default_branch": "master",
"ci_config_path": null,
"homepage": "http://76c03cb0fea1/dev/devops-hello-service",
"url": "git@76c03cb0fea1:dev/devops-hello-service.git",
"ssh_url": "git@76c03cb0fea1:dev/devops-hello-service.git",
"http_url": "http://76c03cb0fea1/dev/devops-hello-service.git"
},
"commits": [
{
"id": "0a6725102ba2cf695565eed029f1939029147aa4",
"message": "Update Jenkinsfile",
"title": "Update Jenkinsfile",
"timestamp": "2021-08-30T00:37:27+00:00",
"url": "http://76c03cb0fea1/dev/devops-hello-service/-/commit/0a6725102ba2cf695565eed029f1939029147aa4",
"author": {
"name": "devop",
"email": "[email protected]"
},
"added": [
],
"modified": [
"Jenkinsfile"
],
"removed": [
]
},
{
"id": "0cbf76185c4b87558dbfcaa836c5ac8eb1e180f3",
"message": "Update Jenkinsfile",
"title": "Update Jenkinsfile",
"timestamp": "2021-08-28T07:38:26+00:00",
"url": "http://76c03cb0fea1/dev/devops-hello-service/-/commit/0cbf76185c4b87558dbfcaa836c5ac8eb1e180f3",
"author": {
"name": "devop",
"email": "[email protected]"
},
"added": [
],
"modified": [
"Jenkinsfile"
],
"removed": [
]
},
{
"id": "efce8922637921394bd9509dc275a009901173aa",
"message": "Update Jenkinsfile",
"title": "Update Jenkinsfile",
"timestamp": "2021-08-28T06:35:33+00:00",
"url": "http://76c03cb0fea1/dev/devops-hello-service/-/commit/efce8922637921394bd9509dc275a009901173aa",
"author": {
"name": "devop",
"email": "[email protected]"
},
"added": [
],
"modified": [
"Jenkinsfile"
],
"removed": [
]
}
],
"total_commits_count": 3,
"push_options": {
},
"repository": {
"name": "devops-hello-service",
"url": "git@76c03cb0fea1:dev/devops-hello-service.git",
"description": "",
"homepage": "http://76c03cb0fea1/dev/devops-hello-service",
"git_http_url": "http://76c03cb0fea1/dev/devops-hello-service.git",
"git_ssh_url": "git@76c03cb0fea1:dev/devops-hello-service.git",
"visibility_level": 0
}
}