Jenkins 不使用 git 参数插件检索 git 引用

Jenkins doesnt retrieve git references using git parameter plugin

您好,我正在尝试配置我们的 jenkins 构建服务器以使用 git 分支。

我的配置是这样的:

好吧,如果我点击带有参数的构建,我会得到一个像这样的空列表:

我已经在没有参数的情况下构建了这个项目并且它有效。在 Source-Code-Management 部分,我在没有 ssh 的情况下添加了带有正确信用信息的服务器。 (只有用户名和密码)

但是我在列表中没有 git 引用。我搜索了一下,发现如果您使用 ssh,这是一个常见问题,但我们不使用 ssh。我不想通过可扩展选择参数插件来解决问题。

那么这里的问题是什么?我不敢相信这在 jenkins 中很难配置...

我们使用最新的 jenkins 版本和 git 带有 maven id 的参数插件: org.jenkins-ci.tools:git-参数:0.4.0

解决方法。对我来说很好用。希望插件尽快修复。

  1. 创建新项目即"git_repo"。添加 Git 存储库。构建此项目一次。
  2. 在您需要 branch/tag 使用的项目中,只需从第一步添加 "file://" 带有工作区的存储库:示例 (file:///var/lib/jenkins/jobs/git_repo/workspace)

在这种情况下,我的项目可以获取构建项目所需的所有数据。

如果您在 Windows 上使用 Jenkins,Git 参数插件 0.4 可能无法工作并继续显示 "retrieving Git references"。

我认为原因是插件没有使用 Jenkins 的凭证,而是以系统登录用户身份运行 git 命令。您可以通过将 JenKins 的 Windows 服务的登录用户更改为已登录并将密码保存在 Windows 凭据中的真实用户来修复它。

我遇到了 "Retrieving Git references" 没有 Git 标签的相同问题,但这不是权限问题。我把它留在这里以防其他人偶然发现这个 link(Google 中的第一个问题)并且可能遇到与我相同的问题。

当我查看 Jenkins 日志时,我看到来自 Git 参数插件的错误 Java 数字格式错误 (java.lang.NumberFormatException)。这是因为我使用构建时间戳来创建我的标签,它最终是一个非常长的数值。插件必须将其识别为数字,然后尝试将其转换为 int(我假设稍后进行排序),但由于它太长而爆炸。要解决此问题,我必须删除所有标签并将构建更改为带有作业名称加上构建号的标签(例如,DEV-233)。在我这样做之后,标签列表正确填充。

我遇到了同样的问题,我遵循了一个讨论中的建议:从 Github (https://github.com/jenkinsci/git-parameter-plugin) 获取最新版本的插件 (0.4.1-SNAPSHOT),编译并安装它。

新版本的插件在 Linux 环境中作业的 SCM 配置中使用 SSH URL/Credentials。

我得到了相同的 "retrieving git references" 但没有分支。网上有几个解决方案。

  1. 运行 chron 作业创建分支列表,将它们保存到文件系统并读取它以显示。
  2. 运行 groovy 获取分支列表并显示的脚本。

我的解决方案(对我有用)是从 github 下载 git 参数插件的源代码,构建插件并移动到 jenkins/WEB-INF/plugins。开始显示 repo 上可用的分支列表。

步骤:

  1. git 克隆 https://github.com/jenkinsci/git-parameter-plugin.git
  2. cd git-参数-插件
  3. mvn clean package -DskipTests=true
  4. 将 git-parameter.hpi 从 git-parameter-plugin\target 复制到 jenkins/WEB-INF/plugins
  5. 重启詹金斯。

您现在应该可以看到所有分支。

这是我的 bitbucket 解决方案:(应该也可以对 gitlab/github 的 URL 进行少量修改)

您可以使用 Bitbucket Rest API 和 Scriptler 来完成: (这里以 "tags" 端点为例。它也适用于其他端点,例如 "branches")

  1. 转到管理 Jenkins -> Scriptler -> 添加新脚本

    您必须为 组织, 存储库, 用户 和密码。 最好的方法是使用 scriptler

  2. 中的 "Define script parameters" 选项

```

    String organization="${ORGANISATION}"
    String repository="${REPOSITORY}"
    String endpoint="tags"
    String baseUrl = "https://api.bitbucket.org"
    String version = "1.0"
    // Create authorization header using Base64 encoding
    //HERE YOU CAN GET THE AUTH CREDENTIALS OVER THE CREDENTIALSID INSTEAD 
    String userpass = "${USER}:${PASSWORD}"
    String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
    println basicAuth
    String url = [baseUrl, version, "repositories", organization, repository, endpoint].join("/")
    println "URL " + url
    // Create URL
    URL apiUrl = url.toURL()
    // Open connection
    URLConnection connection = apiUrl.openConnection()
    // Set authorization header
    connection.setRequestProperty("Authorization", basicAuth)
    InputStream inputStream = connection.getInputStream()
    HashMap tags = new groovy.json.JsonSlurper().parseText(inputStream.text)
    inputStream.close()
    Set keys= tags.keySet();
    List<String>  list=new ArrayList<String>()
    keys.each { key ->
        println key
        list.add(key)
    }
    return list

```

  1. 那么你应该添加 "Dynamic Choice Parameter (Scriptler)" 参数到你的工作和 select 你添加的脚本程序 前。注意:您必须安装 Dynamic+Parameter+Plug-in 之前