【问题标题】:how to get repo name in Jenkins pipeline如何在 Jenkins 管道中获取 repo 名称
【发布时间】:2017-08-15 00:33:02
【问题描述】:

我正在使用使用 Groovy 样式脚本的 Jenkins Scripted Pipeline,并创建了一个 Jenkinsfile 来描述该管道。我需要创建文件夹名称与 git repo 名称相同的工作区,然后签出工作区文件夹中的代码。 我的问题是,在执行checkout scm 之前,有没有办法知道 git repo 名称或 git repo url?

【问题讨论】:

  • 快速澄清一下,Jenkins 脚本化管道是指在 Jenkins 管道定义中编码的 Jenkinsfile 还是来自 SCM 的 Jenkinsfile?
  • scm 变量,它可能有一些相关信息。你需要创建工作区文件夹对我来说有点奇怪。
  • @manish-joshi - 我将 Jenkinsfile 保存在仓库中。
  • @StephenKing,我需要按特定顺序排列工作区文件夹,因为 Go (golang) 有我需要遵循的特定约定才能使依赖项正常工作。

标签: jenkins jenkins-pipeline


【解决方案1】:
String determineRepoName() {
    return scm.getUserRemoteConfigs()[0].getUrl().tokenize('/')[3].split("\\.")[0]
}

这个相对难看的代码是我用来获取 repoName 的。关键是repo的URL存放在:

scm.getUserRemoteConfigs()[0].getUrl()

从那里你需要做一些字符串操作来得到你想要的。


更新:

String determineRepoName() {
    return scm.getUserRemoteConfigs()[0].getUrl().tokenize('/').last().split("\\.")[0]
}

这也适用于具有更深层次结构的存储库(https://domain/project/subproject/repo 或 ssh git repo,它不包含开头的两个 //。

【讨论】:

  • 我收到了这个错误org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.plugins.git.GitSCM getUserRemoteConfigs
  • 我使用来自stackoverflow.com/a/38255364/2018909 的提示来批准脚本异常,并且能够获取 repo 名称。谢谢@herm
  • 我刚刚做了.tokenize('/.')[-2],这似乎更简洁地得到了相同的结果。
  • 如果您的存储库名称包含点,您可能需要使用String determineRepoName() { return scm.getUserRemoteConfigs()[0].getUrl().tokenize('/').last().split("\\.git")[0] }
【解决方案2】:

也许是一个愚蠢的答案,但是否可以使用环境 Jenkins 环境变量env.BITBUCKET_REPOSITORY

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多