门禁-jenkins的构建状态同步到gitlab提交流水线

API接口文档

https://docs.gitlab.cn/jh/api/commits.html
在这里插入图片描述

配置pipline流水线

生成http请求代码:
使用HttpRequest插件生成
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

- sharelibs内容

//这是share libs里的
package devops

def httpReq(reqType, reqUrl, reqBody, accessToken){
    def gitServer = "https://jihulab.com/api/v4"
    result = httpRequest consoleLogResponseBody: true, 
                httpMode: 'POST',
                requestBody: reqBody,
                url: "${gitServer}/${reqUrl}",
                wrapAsMultipart: false,
                customHeaders: [
                    [maskValue: false, name: 'contentType', value: 'APPLICATION_JSON'],
                    [maskValue: true, name: 'Authorization', value: "Bearer ${accessToken}"]
                ]

    return result
    
}

def changeCommitStatus(projectId, status, commitSha, accessToken){
    commitApi = "projects/${projectId}/statuses/${commitSha}?state=${status}"
    respones = httpReq("POST", commitApi, '', accessToken)
    println respones

}

- jenkinsfile内容

// 这是jenkinsfile里边的
@Library('jenkinslibs') _
def tools = new devops.tools()
def sonar = new devops.sonarQube()
def gitlab = new devops.gitlab()

if ("${runOpts}" == "GitlabPush"){
    branch = branch - "refs/heads/"
    currentBuild.description = "Trigger by ${url} ${branch}"
    def status = "running"
    env.accessToken = env.accessToken
    gitlab.changeCommitStatus(projectId, status, commitSha, env.accessToken)
}

pipeline {
    agent {
        label {
            label 'vm-node'
            retries 10
        }
    }
    environment {
        CodePath = "${WORKSPACE}/code"
    }
    stages {
        stage('download code') { 
            steps {
                checkout(
                    scmGit(branches: [[name: '*/master']], 
                    extensions: [cleanAfterCheckout(deleteUntrackedNestedRepositories: true), 
                    [$class: 'RelativeTargetDirectory',
                    relativeTargetDir: '$WORKSPACE/code/${GIT_REPOSITORY_NAME}']], 
                    userRemoteConfigs: [[credentialsId: 'f58233b3-bdb3-4fd4-82d6-4cea03d75971',
                    url: 'https://codeup.aliyun.com/64257bf308203590adcc93bf/QMUI-Android.git']])
                )
            }
        }
        stage('QA') { 
            steps {
                dir("${CodePath}"){
                    script{
                        tools.printVar("sonar scanner! ${PATH}", 'red')
                        //sonar.Scanner("${projectName}", "${projectName}", "${WORKSPACE}/code/gradle/wrapper")
                    }
                }

            }
        }
        stage('Deploy') { 
            steps {
                script{
                    tools.printVar("ni hao shara library!", 'red')
                    
                }
            }
        }
    }
    post {
        always {
            script{
                println("running")
            }
        }
        aborted {
            script{
                println("aborted")
                gitlab.changeCommitStatus(projectId, "aborted", commitSha, env.accessToken)
            }
        }
        success {
            script{
                println("success")
                gitlab.changeCommitStatus(projectId, "success", commitSha, env.accessToken)
            }
        }
        failure {
            script{
                println("failure")
                gitlab.changeCommitStatus(projectId, "failure", commitSha, env.accessToken)
            }
        }
    }

}

jenkins中的配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试和验证
在这里插入图片描述
在这里插入图片描述
结论:可以再优化以下,作为merge请求的门禁。缺点是不好根据状态找到jenkins记录
文章中提到的accessToken获取方法见:https://blog.csdn.net/weixin_44014460/article/details/139195724

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值