4 获取分支提交名称

4.1 触发器配置

触发器Post content parameters新添加配置

Jenkins版本控制系统集成(高级)_html

4.2 Jenkinsfile配置

Jenkins版本控制系统集成(高级)_触发器_02

4.3 构建输出

在代码v1分支修改并提交,触发构建

Jenkins版本控制系统集成(高级)_git_03

5 增加构建描述

5.1 触发器配置

触发器Post content parameters新添加配置

Jenkins版本控制系统集成(高级)_触发器_04

5.2 Jenkinsfile配置

Jenkins版本控制系统集成(高级)_html_05

5.3 构建输出

Jenkins版本控制系统集成(高级)_git_06

6 变更commit状态

6.1 概述

pipeline接口https://docs.gitlab.com/ee/api/commits.html
状态[pending,running,success,failed,canceled]
API: projects/${projectId}/statuses/${commitSha}?state=${status}
  • 1.
  • 2.
  • 3.

6.2 创建访问令牌

Jenkins版本控制系统集成(高级)_触发器_07

6.3 配置凭据

Jenkins版本控制系统集成(高级)_触发器_08

6.4 共享库配置

/src/org/devops/gitlab.groovy

package org.devops
//封装HTTP请求
def HttpReq(reqType,reqUrl,reqBody){
    def gitServer = "http://192.168.137.129/api/v4"
    withCredentials([string(credentialsId: 'gitlab-token', variable: 'gitlabToken')]) {
      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
}
//更改提交状态
def ChangeCommitStatus(projectId,commitSha,status){
    commitApi = "projects/${projectId}/statuses/${commitSha}?state=${status}"
    response = HttpReq('POST',commitApi,'')
    println(response)
    return response
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

Jenkins版本控制系统集成(高级)_触发器_09

6.5 触发器配置

触发器Post content parameters新添加配置

Jenkins版本控制系统集成(高级)_触发器_10

Jenkins版本控制系统集成(高级)_git_11

6.6 Jenkinsfile配置

Jenkins版本控制系统集成(高级)_git_12

Jenkins版本控制系统集成(高级)_html_13

6.7 构建输出

Jenkins版本控制系统集成(高级)_html_14

6.8 gitlab输出

Jenkins版本控制系统集成(高级)_git_15

Jenkins版本控制系统集成(高级)_触发器_16

6.9 报错处理

No such DSL method 'httpRequest' found among steps

jenkins安装插件HTTP Request

7 过滤push请求

Jenkins版本控制系统集成(高级)_html_17

有一些特殊的push请求如新建分支,这样也执行pipeline流水线显然不合适,所有需要过滤这一类特殊的push请求https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd/gitlab

Jenkins版本控制系统集成(高级)_触发器_18

可以看到before的值为40个0说明是新建一个分支,或者tag动作,通过这个值来限定不触发。 

push请求只有after和before的值都不是40个0的时候触发构建(为40个0的情况是删除分支或者新建分支)

7.1 触发器配置

触发器Post content parameters新添加配置

Jenkins版本控制系统集成(高级)_git_19

Jenkins版本控制系统集成(高级)_git_20

Jenkins版本控制系统集成(高级)_html_21

增加过滤规则

Jenkins版本控制系统集成(高级)_html_22

^push\s(?!0{40}).{40}\s(?!0{40}).{40}$
$object_kind $before $after
  • 1.
  • 2.

7.2 测试结果

新建分支不会触发构建

8 构建失败邮件通知

配置邮箱插件之前已经做过

8.1 共享库配置

/src/org/devops/toemail.groovy
package org.devops

//定义邮件内容
def Email(status,emailUser){
    emailext body: """
            <!DOCTYPE html> 
            <html> 
            <head> 
            <meta charset="UTF-8"> 
            </head> 
            <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> 
                <img src="http://192.168.1.200:8080/static/0eef74bf/images/headshot.png">
                <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   
                    <tr> 
                        <td><br /> 
                            <b><font color="#0B610B">构建信息</font></b> 
                        </td> 
                    </tr> 
                    <tr> 
                        <td> 
                            <ul> 
                                <li>项目名称:${JOB_NAME}</li>         
                                <li>构建编号:${BUILD_ID}</li> 
                                <li>构建状态: ${status} </li>                         
                                <li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    
                                <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> 
                            </ul> 
                        </td> 
                    </tr> 
                    <tr>  
                </table> 
            </body> 
            </html>  """,
            subject: "Jenkins-${JOB_NAME}项目构建信息 ",
            to: emailUser
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

8.2 gitlab用户配置邮箱

Jenkins版本控制系统集成(高级)_git_23

Jenkins版本控制系统集成(高级)_html_24

Jenkins版本控制系统集成(高级)_html_25

8.3 触发器配置

触发器Post content parameters新添加配置

Jenkins版本控制系统集成(高级)_git_26

8.4 Jenkinsfile配置

Jenkins版本控制系统集成(高级)_触发器_27

Jenkins版本控制系统集成(高级)_触发器_28

8.5 构建输出

Jenkins版本控制系统集成(高级)_git_29

8.6 邮箱消息

Jenkins版本控制系统集成(高级)_git_30

9 合并流水线

即如果一个分支最后一次提交执行流水线的状态必须成功才能合并分支

9.1 gitlab配置

Jenkins版本控制系统集成(高级)_html_31

9.2 合并输出

Jenkins版本控制系统集成(高级)_触发器_32

Jenkins版本控制系统集成(高级)_html_33

每一次合并也会触发流水线自动构建