上面:增加获取hook参数,获取分支名称
问题1:看不出来是哪个分支构建的
做法:增加构建描述信息
流水线语法--->全局变量参考--->currentBuild
'currentBuild.description'
# 想知道:谁提交了,提交到哪个分支导致自动构建!
# 做法-->获取gitlab传递的json字符串中的user_username
# 说明-->在pipeline执行之前,就先进行变量的重新定义!
# 在jenkinsfile中添加信息
# 观察:在构建历史中观察
# gitlab中commit提交后也是有状态的
# 状态如下
# 进一步:提交流水线优化--->变更commite提交状态!
# 正常:gitlab-->CI,提交一次就会跑一次流水线,流水线成功与否就会有一个标志
# 说明:11版本之前gitlab是支持jenkins的,所以早前能把状态匹配过来,现在不支持了!
# 需求:gitlab没有提交,都有一个状态,证明提交成功与否!
# 在帮助中找gitlab API
Projects --->跳转到API --->选择Commits
# 获取一个commite的状态
GET /projects/:id/repository/commits
# 发送一个commite的状态
POST /projects/:id/statuses/:sha
# 说明:流水线太单薄了,应该有构建成功干啥,构建失败干啥
参考模板
# jenkins构建后根据对应的状态对号入座
进一步:在jenkinsfile中定义构建之后的操作,根据构建的结果,执行对应的代码
测试:gitlab侧提交,然后看jenkins构建的结果
或者rebuild,需要先安装插件
进入终极测试
(1)创建一个sharelib gitlab.groovy,定义两个方法
package org.devops
//(1)封装HTTP请求
def HttpReq(reqType,reqUrl,reqBody){
//1) Gitlab Api地址
def gitServer = "http://180.xx.107.87/api/v4"
//2) gitlab上创建一个凭据,存在给jenkins上,凭据名字(gitlab-token),赋值给gitlabToken变量
withCredentials([string(credentialsId: 'gitlab-token', variable: 'gitlabToken')]) {
// 发送HTTP请求-->请求类型、等等信息-->请求的时候加到Header里面
result = httpRequest customHeaders: [[maskValue: true, name: 'PRIVATE-TOKEN', value: "${gitlabToken}"]],
httpMode: reqType,
contentType: "APPLICATION_JSON",
consoleLogResponseBody: true,
ignoreSslErrors: true,
requestBody: reqBody,
url: "${gitServer}/${reqUrl}"
//quiet: true
}
return result
}
//(2)更改提交状态-->利用HTTP的请求
def ChangeCommitStatus(projectId,commitSha,status){
//参照:curl --request POST --header "PRIVATE-TOKEN: <your_access_token>"
"https://gitlab.example.com/api/v4/projects/17/statuses/18f3e63d05582537db6d183d9d557be09e1f90c8?state=success"
//1) 定义CommitApi
commitApi = "projects/${projectId}/statuses/${commitSha}?state=${status}"
//2) 发送HTTP的POST请求
response = HttpReq("POST",commitApi,'').content
println("${response}")
}
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/17/statuses/18f3e63d05582537db6d183d9d557be09e1f90c8?state=success"
# 编辑:更改提交状态,然后HTTP发送请求
# 解释:在gitlab上创建了一个token,然后存在jenkins中,把凭据的数值赋值给这个变量,最后请求的时候加到head里面!
# 做法:jenkins中添加两个变量
# (1)项目id
# (2)commit号
报错信息
# 进一步在jenkins中把gitlab产生的token相关信息添加到凭据里面,注意凭据的类型(txt)
# 报错原因-->凭据类型与要求的不一致!
注意:凭据类型选择Secret text,将'gitlab生成的凭据(token)写到secret中',同时'id'一定要为gitlab-token
查看
jenkins查看
# -->进一步:查看实验效果
对比--->15s前后查看
# 注意:刷新gitlab的页面
原理说明:实际上调用的还是gitlab,只是把jenkins当做gitlab的CI,让gitlab以为:我提交代码了,我跑了gitlab CI的一个流水线,实际上跑了jenkins流水线,执行之后把gitlab的状态改变了!
# 后续说明
说明:最终的测试结果是--->在'gitlab可以看到相应的展示结果'
说明:库里面'封装了两个方法'(gitlab.groovy)
后续:gitlab CI调用的是runner