从Jenkins的gitlab webhook中读取json有效负载

时间:2014-07-29 18:59:55

标签: jenkins gitlab

我按照这个tutorial设置Jenkins作业,以便在推送到gitlab存储库时运行。我测试了webhook,我可以看到工作被触发了。但是,我没有在有效载荷中看到任何内容。

只是想知道,如果有人试图读取从gitlab webhook收到的有效载荷吗?

3 个答案:

答案 0 :(得分:5)

只要Gitlab仓库中发生任何事件,

Jenkins Gitlab Plugin就会向{Jenkins}发送these POST parameters

您可以在Jenkins控制台中添加priority_queue,以获取所有Gitlab参数导出到Jenkins环境的内容。然后,您可以打印或使用所需的变量。

例如

env

答案 1 :(得分:0)

是的,我做到了。它适用于某些场景。

如果使用/ gitlab / buildnow,则可以访问有效负载对象。他们都是。 但你必须在&#34下命名它们;这个版本是参数化的#34;。 然后,您可以按名称访问它们,例如$ {AUTHOR_NAME}。

Doc:https://github.com/elvanja/jenkins-gitlab-hook-plugin#parameterized-projects

但是请注意,如果你使用/ gitlab / notifycommit,它将无法工作,因为在触发jenkins和实际启动作业之间存在间隙(轮询)。这种情况下的所有有效载荷数据都是空的。

但要小心使用/ gitlab / buildnow,因为无法控制是否要构建,就像Maven提交一些文件一样,并且不应该触发构建。

我所做的是在Python中编写一个小工具来接收所有gitlab通知,这个工具可以回复GitLab和Jenkins,解雇(或不)工作,并收集回状态。

我的出发点: How do I receive Github Webhooks in Python(最后的答案,而不是选择的答案)。

我2天前开始开发它。它已经完成了,但我仍然在验证它。

答案 2 :(得分:0)

您提到的tutorial讨论了GitHub Webhooks。 GitLab和GitHub是两个单独的产品。因此,GitHub Webhooks的文档或链接不适用于GitLab Webhooks。

GitLab在请求正文中使用JSON负载调用webhook URL,该负载中包含有关导致Webhook调用的GitLab事件的大量信息。例如,GitLab webhook push event payload中包含以下信息:

{
  "object_kind": "push",
  "before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
  "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
  "ref": "refs/heads/master",
  "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
  "user_id": 4,
  "user_name": "John Smith",
  "user_username": "jsmith",
  "user_email": "john@example.com",
  "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
  "project_id": 15,
  "project":{
    "id": 15,
    "name":"Diaspora",
    "description":"",
    "web_url":"http://example.com/mike/diaspora",
    "avatar_url":null,
    "git_ssh_url":"git@example.com:mike/diaspora.git",
    "git_http_url":"http://example.com/mike/diaspora.git",
    "namespace":"Mike",
    "visibility_level":0,
    "path_with_namespace":"mike/diaspora",
    "default_branch":"master",
    "homepage":"http://example.com/mike/diaspora",
    "url":"git@example.com:mike/diaspora.git",
    "ssh_url":"git@example.com:mike/diaspora.git",
    "http_url":"http://example.com/mike/diaspora.git"
  },
  "repository":{
    "name": "Diaspora",
    "url": "git@example.com:mike/diaspora.git",
    "description": "",
    "homepage": "http://example.com/mike/diaspora",
    "git_http_url":"http://example.com/mike/diaspora.git",
    "git_ssh_url":"git@example.com:mike/diaspora.git",
    "visibility_level":0
  },
  "commits": [
    {
      "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
      "message": "Update Catalan translation to e38cb41.",
      "timestamp": "2011-12-12T14:27:31+02:00",
      "url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
      "author": {
        "name": "Jordi Mallach",
        "email": "jordi@softcatala.org"
      },
      "added": ["CHANGELOG"],
      "modified": ["app/controller/application.rb"],
      "removed": []
    },
    {
      "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
      "message": "fixed readme",
      "timestamp": "2012-01-03T23:36:29+02:00",
      "url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
      "author": {
        "name": "GitLab dev user",
        "email": "gitlabdev@dv6700.(none)"
      },
      "added": ["CHANGELOG"],
      "modified": ["app/controller/application.rb"],
      "removed": []
    }
  ],
  "total_commits_count": 4
}

Jenkins GitLab pluginJenkins Global Variable en 中提供此Webhook有效负载信息。 available env variables如下:

gitlabBranch
gitlabSourceBranch
gitlabActionType
gitlabUserName
gitlabUserEmail
gitlabSourceRepoHomepage
gitlabSourceRepoName
gitlabSourceNamespace
gitlabSourceRepoURL
gitlabSourceRepoSshUrl
gitlabSourceRepoHttpUrl
gitlabMergeRequestTitle
gitlabMergeRequestDescription
gitlabMergeRequestId
gitlabMergeRequestIid
gitlabMergeRequestState
gitlabMergedByUser
gitlabMergeRequestAssignee
gitlabMergeRequestLastCommit
gitlabMergeRequestTargetProjectId
gitlabTargetBranch
gitlabTargetRepoName
gitlabTargetNamespace
gitlabTargetRepoSshUrl
gitlabTargetRepoHttpUrl
gitlabBefore
gitlabAfter
gitlabTriggerPhrase

就像您在作业管道脚本中从Jenkins Global Variable params 中读取Jenkins作业参数一样,您可以从Jenkins Global Variable env

echo "My Jenkins job parameter is ${params.MY_PARAM_NAME}"
echo "One of Jenkins job webhook payload field is ${env.gitlabTargetBranch}"

希望,以上信息有助于解决您的问题。