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

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

也许像${GIT_REPO_NAME}

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

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

谢谢!

【问题讨论】:

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

标签: git jenkins


【解决方案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
        猜你喜欢
        • 2014-03-29
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        相关资源
        最近更新 更多