在詹金斯作业中使用 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 分支名称?
詹金斯:hudson.plugins.git.GitException:命令“git fetch --tags --progress origin 返回状态码143: