从Gitlab有效负载获取分支名称 - Jenkins

时间:2015-07-01 09:08:04

标签: git jenkins gitlab

我在Jenkins中使用参数化作业,我将GIT-REPO作为参数发送,我在Gitlab存储库webhook中定义了这个参数。 例如,如果我创建名为'test'的Jenkins作业,那么我在Gitlab存储库中添加以下钩子:

http://jenkins-server/job/test/buildWithParameters?GITREPO=git@gitlab.com/test-repo.git&SOMEOTHERPARAMETER=somevalue

现在,我想构建触发钩子的分支。 我怎样才能做到这一点? Gitlab Hook插件可能不起作用,因为我使用单个参数化作业。

2 个答案:

答案 0 :(得分:0)

Jenkins项目:

将字符串参数定义为gitlabTargetBranch,您可以使用* / $ gitlabTargetBranch

在SCM中更新此变量

答案 1 :(得分:0)

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
}

因此,您无需在Webhook URL中添加任何查询参数(GIT-REPO或其他任何参数)。而且,无论您的Jenkins作业是否已参数化,Jenkins GitLab plugin都会在Jenkins Global Variable env 中提供此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 中读取webhook负载字段>:

params.MY_PARAM_NAME
env.gitlabSourceRepoURL

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