繁体   English   中英

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

[英]Getting branch name from Gitlab payload - Jenkins

我在 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 插件可能无法正常工作。

GitLab 使用请求正文中的 JSON 有效负载调用 Webhook URL,该有效负载包含有关导致 Webhook 调用的 GitLab 事件的大量信息。 例如, GitLab webhook推送事件有效负载中包含以下信息,包括存储库名称(注意“存储库”字段):

{
  "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 插件都会在Jenkins 全局变量env 中提供此 webhook 有效负载信息。 可用的env变量如下,它们确实包含存储库信息:

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 全局变量参数读取 Jenkins 作业参数一样,您可以从Jenkins 全局变量env读取 webhook 有效负载字段:

params.MY_PARAM_NAME
env.gitlabSourceRepoURL

希望以上信息能帮助您解决问题。

詹金斯项目:

将字符串参数定义为 gitlabTargetBranch,您可以在 SCM 中使用 */$gitlabTargetBranch 更新此变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM