如何在 Jenkins 作业中获取 MR 的所有 GitLab 评论

Posted

技术标签:

【中文标题】如何在 Jenkins 作业中获取 MR 的所有 GitLab 评论【英文标题】:how to fetch all GitLab comments of an MR in a Jenkins job 【发布时间】:2021-12-21 01:29:09 【问题描述】:

在 GitLab MR 中,我们可以添加 cmets,我们还可以添加功能以在 Jenkins 管道的不同阶段发送自动 cmets。

如果我有特定 MR 的 MR-ID,并且我想获取在该特定 MR 上完成的所有 MR cmets,那么我该如何在 Jenkins-Groovy 环境中进行呢?是否有环境变量可以帮助我?

【问题讨论】:

【参考方案1】:

一般情况下,您需要使用GitLab API。

考虑到Comments on merge requests 是通过注释完成的,您将使用List all merge request notes

GET /projects/:id/merge_requests/:merge_request_iid/notes
GET /projects/:id/merge_requests/:merge_request_iid/notes?sort=asc&order_by=updated_at

Jenkins 没有提供专门的环境变量,除了您将传递给 Job 的参数,例如项目 ID 和 MR ID。

你可以看到Groovy examples这样Jenkinsfile:

stage ("Merge Pull Request") 
    // GET PULL REQUEST ID
    sh "curl -H \"PRIVATE-TOKEN: $approval_token\" \"https://gitlab.com/api/v4/projects/$projectID/merge_requests\" --output resultMerge.json"
    def jsonMerge = readJSON file: "resultMerge.json"                    
    echo "Request from: $jsonMerge[0].author.name"
    // STATUS VALIDATION
    if (jsonMerge[0].state == "opened") 
        // GET ALL COMMENTS ON PULL REQUEST
        sh "curl -H \"PRIVATE-TOKEN: $approval_token\" \"https://gitlab.com/api/v4/projects/$projectID/merge_requests/$jsonMerge[0].iid/notes\" --output comment.json"
        def commentJson = readJSON file: "comment.json"
        def checking = false
        // LOOP ALL COMMENT TO GET APPROVAL
        commentJson.each  res ->
            // CHECK IF CURRENT INDEX HAS SYSTEM FALSE 
            if (!res.system && !checking) 
                // IF COMMENT HAS VALUE: APPROVED AND AUTHOR IS VALID
                if (res.body == "Approved" && approval.contains(res.author.username)) 
                    addGitLabMRComment(comment: "Pull Request Approved by Jenkins")
                    acceptGitLabMR(useMRDescription: true, removeSourceBranch: false)
                 else 
                    currentBuild.result = 'ABORTED'
                    error("Sorry, your approval is not valid")
                
                checking = true
            
        
     else 
        error("Pull Request $jsonMerge[0].title $jsonMerge[0].iid is already $jsonMerge[0].state. Please Create a new Pull Request")
    
    ...

【讨论】:

抱歉@VonC 我是 *** 的新手,不知道我们可以接受并支持答案。感谢分享链接。我也知道将来该怎么做。 @Aayush 没问题:不要忘记重新查看您过去的问题:其中一些可能有值得支持/接受勾选的答案。

以上是关于如何在 Jenkins 作业中获取 MR 的所有 GitLab 评论的主要内容,如果未能解决你的问题,请参考以下文章

如何在MR作业中配置映射以批量执行?

如何在jenkins中启动另一个作业时获取内部错误消息

Jenkins Pipeline作业获取另一个jenkins作业的构建状态。

如何在詹金斯中获取管道作业的 URL

当 jenkins 作业作为“执行 Maven 发布”运行时,如何在 shell 步骤中获取参数 MVN_RELEASE_VERSION 的值?

如何从 jenkins 作业的 scm 轮询中排除 jenkins 文件