在詹金斯作业中使用 git repo 名称作为 ENV 变量

Posted

技术标签:

【中文标题】在詹金斯作业中使用 git repo 名称作为 ENV 变量【英文标题】:use git repo name as ENV variable in jenkins job 【发布时间】:2014-09-25 02:49:41 【问题描述】:

我正在尝试找出一种方法来将 jenkins 作业中的远程 git 项目名称作为 env 变量。当 jenkins 克隆 repo 时,我想使用项目名称作为“本地子目录名称”。有没有办法做到这一点?

也许像$GIT_REPO_NAME

我知道有$GIT_REPO_URL 并且它包含项目名称,但我需要能够在本地子目录字段中使用它。

如果有人对此有更好的解决方案,我会全力以赴。

谢谢!

【问题讨论】:

你试过这个链接吗? ***.com/questions/10625259/… 我刚刚在浏览时看到,不幸的是,预构建步骤在预 scm 步骤之前运行,所以我无法使用我需要的 GIT_URL。 【参考方案1】:

这是一个简单的单行:

env.GIT_REPO_NAME = env.GIT_URL.replaceFirst(/^.*\/([^\/]+?).git$/, '$1')

/^.*\/([^\/]+?).git$/ 是一个正则表达式,它只创建对 repo 名称的反向引用。

【讨论】:

非常好!这应该是默认内置的! 你能解释一下 value '$1' 的含义吗?或解释更多命令 $1 是对上述正则表达式中([^\/]+?) 找到的值的反向引用。您可以在此处阅读正则表达式:regular-expressions.info。这只是来自 git url 的 repo 的名称。【参考方案2】:

不确定这是否适用于您的特定用例,但我想我会提供它以防万一:

默认情况下,Jenkins 会将 git 存储库克隆到作业 workspace 的根目录中。然后,您可以使用 Jenkins 设置的内置 $WORKSPACE 引用任何脚本中的 git 根目录,我发现使用起来非常简单。

【讨论】:

【参考方案3】:

这就是我所做的:

在构建流程中使用 DSL,我在一个变量中获取 GIT_URL,如下所示:

"def projectName = build.environment.get("GIT_URL").replaceAll('https://github.com/', '').replaceAll('.git', '')"

在这种情况下,我使用了一个额外的replaceAll('/','-'),因为我想将组织名称保留在 projectName 中。

否则,您可以使用额外的replaceAll 将其删除,或者使用.substring(x,y) 字符串函数获取子字符串。

最后,您可以将 projectName 存储在 Jenkins 参数中,以便将该值传播到由流程触发的其他构建。

您也可以使用 projectName 值设置 Env 变量,但我不会使用此方法,因为您使用 jenkins 用户设置它。

希望这会有所帮助。

【讨论】:

【参考方案4】:

这是我用于 Github 组织构建的内容:

def projectName() 
  // Handle branch builds
  if (env.JOB_BASE_NAME == java.net.URLEncoder.encode(env.BRANCH_NAME)) 
    jobNameSplit = env.JOB_NAME.split("/")
    switch (jobNameSplit.size()) 
      case 1:
        // project name == branch name ¯\_(ツ)_/¯
        break
      case 2:
      case 3:
        return jobNameSplit[1]
        break
      default:
        throw Error("unable to get job name")
        break
    
  
  return env.JOB_BASE_NAME

它默认为作业名称,因此即使您不使用 github 组织插件,但使用与您的 git repo 名称匹配的作业名称,您也应该准备就绪。

【讨论】:

【参考方案5】:

^.*?(?::\/\/.*?\/|:)(.*).git$ 如果您想获得完整的 repo 路径owner/repo_name,请将此模式用于 http 和 ssh

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于在詹金斯作业中使用 git repo 名称作为 ENV 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Web 挂钩 URL 中动态传递 git 分支名称?

詹金斯克隆问题。用户可以编辑原始作业的配置

Jenkins工作区目录最终有@#?

詹金斯:hudson.plugins.git.GitException:命令“git fetch --tags --progress origin 返回状态码143:

在詹金斯管道中复制工件

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