如何从 jenkins 构建 post 自定义评论返回到 Github PR

How to post a custom comment back to a Github PR from jenkins build

我基本上是在研究如何使用 jenkins 多分支管道作业 post 对 GitHub PR 的评论。一切都对我有用,并且会触发 PR,并且对源分支的任何提交也会触发该分支的 PR 构建。变量也被替换得很好,但是脚本在对构建中的自定义注释执行 post 时以某种方式失败。这是我的示例声明 Jenkinsfile。

def PULL_REQUEST = env.CHANGE_ID
pipeline {
         agent {
          label "pod-custom"
        }
  stages {
      stage('Checkout') {
      steps {
        checkout scm
      }
    }
      stage('Test Plan') {
       steps {
    
          withCredentials([string(credentialsId: 'github-api', variable: 'GITHUB_TOKEN')]) {
      
            sh "curl -s -H \"Authorization: token ${GITHUB_TOKEN}\" -X POST -d '{\"body\": \"This is my first test comment from jenkins\",\"commit_id\": \"4d0f019b93c11f1fabc8313da4c461dbdbde1fd5\",\"path\": \"Jenkinsfile\",\"position\": 4}' \"https://github.***.com/api/v3/repos/***/${env.GIT_URL.tokenize("/")[-1].tokenize(".")[0]}/pulls/${PULL_REQUEST}/comments\""
  }
   }
       }
     }

  }

这是我看到的错误:-

Running shell script
+ curl -s -H 'Authorization: token ****' -X POST -d '{"body": "This is my first test comment from jenkins","commit_id": "4d0f019b93c11f1fabc8313da4c461dbdbde1fd5","path": "Jenkinsfile","position": 4}' https://github.***.com/api/v3/repos/***/***/pulls/4/comments

{
  "message": "Validation Failed",
  "errors": [
    {
      "resource": "PullRequestReviewComment",
      "code": "invalid",
      "field": "path"
    }
  ],
  "documentation_url": "https://developer.github.com/enterprise/2.14/v3/pulls/comments/#create-a-comment"
}

我想知道就此错误而言,GitHub API 寻找的是什么。我的用例只是我需要能够 post 对我正在构建的 PR 发表评论,如您所见,这个评论应该是对 PR 的直接评论,而不是 GitHub.

这里的任何help/suggestions将一如既往地不胜感激。

我可以通过以下 post 来解决这个问题:- Create comment on pull request。我想我不太理解 github 将每个 PR 视为一个问题,而不是相反,所以你可以通过 POST /repos/:owner/:[=23 来实现=]/:number/comments,正是我在这里寻找的。我可以使用以下方法测试它:-

def PULL_REQUEST = env.CHANGE_ID
withCredentials([string(credentialsId: 'github-api', variable: 'GITHUB_TOKEN')]) {
sh "curl -s -H \"Authorization: token ${GITHUB_TOKEN}\" -X POST -d '{\"body\": \"This is my first test comment from jenkins\"}' \"https://github.***.com/api/v3/repos/***/${env.GIT_URL.tokenize("/")[-1].tokenize(".")[0]}/issues/${PULL_REQUEST}/comments\""
}

这 post 在公关对话选项卡下 "This is my first test comment from jenkins" 编辑了评论 "This is my first test comment from jenkins" 就好了,这正是我需要的。