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

Jenkins不会使用git参数插件检索git引用,git,jenkins,jenkins-plugins,Git,Jenkins,Jenkins Plugins,您好,我正在尝试配置jenkins build服务器以使用git分支 我的配置如下所示: 如果我点击build with parameters,我会得到一个空列表,如下所示: 我已经建立了这个项目没有参数,它的工作。在源代码管理部分,我添加了我们的服务器,没有ssh,具有正确的信誉。(仅用户名和密码) 但是我在列表中没有得到git引用。我在谷歌上搜索了一下,发现如果您使用ssh,但我们不使用ssh,这是一个常见的问题。我不想通过可扩展的选择参数插件来解决问题 那么这里的问题是什么?我不敢相信

您好,我正在尝试配置jenkins build服务器以使用git分支

我的配置如下所示:

如果我点击build with parameters,我会得到一个空列表,如下所示:

我已经建立了这个项目没有参数,它的工作。在源代码管理部分,我添加了我们的服务器,没有ssh,具有正确的信誉。(仅用户名和密码)

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

那么这里的问题是什么?我不敢相信这在詹金斯很难配置

我们使用最新的jenkins版本和git参数插件,其maven id为:
org.jenkins ci.tools:git参数:0.4.0。对我来说很好。希望插件能很快修复

  • 创建新项目,即“吉特回购”。添加Git存储库。构建此项目一次
  • 在需要使用分支/标记的项目中,只需添加“file://”存储库和步骤1中的工作区:示例(file:///var/lib/jenkins/jobs/git_repo/workspace)

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

    如果您在Windows上使用Jenkins,Git参数插件0.4可能不起作用,并一直显示“检索Git引用”

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

    我也遇到过同样的问题,即“检索Git引用”时没有Git标记,但这不是权限问题。我把这个放在这里,以防其他人偶然发现这个链接(谷歌第一个出现这个问题的链接),并且可能和我有同样的问题


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

    我也遇到了同样的问题,我遵循了讨论中的建议:从Github()获取插件的最新版本(0.4.1-SNAPSHOT),编译并安装它

    该插件的新版本在Linux环境中与作业的SCM配置中的SSH URL/凭据一起工作。

    我得到了相同的“检索git引用”,但没有分支。网络上有两种解决方案

  • 运行chronjob,它创建分支列表,将它们保存到文件系统中,并将其读取以显示
  • 运行groovy脚本获取分支列表并显示
  • 我的解决方案(对我有效)是从github下载git参数插件的源代码,构建插件,然后转到jenkins/WEB-INF/plugins。开始显示回购协议上可用的分支机构列表

    步骤:

  • git克隆
  • cd git参数插件
  • mvn清洁包-DskipTests=true
  • 将git-parameter.hpi从git-parameter-plugin\target复制到jenkins/WEB-INF/plugins
  • 重新启动詹金斯
    您现在应该可以看到所有分支

    这是我针对bitbucket的解决方案:(只需对gitlab/github的URL稍加修改即可)

    您可以使用Bitbucket Rest API和Scriptler执行此操作: (例如,这里使用“标记”端点。它也适用于其他端点,如“分支”)

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

    你必须设置你的价值观 组织 存储库, 使用者 和密码。 最好的方法是使用scriptler中的“定义脚本参数”选项

  • ```

    String-organization=“${organization}”
    字符串repository=“${repository}”
    String endpoint=“标记”
    字符串baseUrl=”https://api.bitbucket.org"
    字符串版本=“1.0”
    //使用Base64编码创建授权标头
    //在这里,您可以通过CREDENTIALSID获取身份验证凭据
    字符串userpass=“${USER}:${PASSWORD}”
    String basicAuth=“Basic”+javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
    普林顿基考斯酒店
    字符串url=[baseUrl,版本,“存储库”,组织,存储库,端点].join(“/”)
    println“URL”+URL
    //创建URL
    URL apiUrl=URL.toURL()
    //开放连接
    URLConnection=apirl.openConnection()
    //设置授权标头
    connection.setRequestProperty(“授权”,basicAuth)
    InputStream InputStream=连接。getInputStream()
    HashMap tags=new groovy.json.JsonSlurper().parseText(inputStream.text)
    inputStream.close()
    Set keys=tags.keySet();
    列表=新的ArrayList()
    keys.each{key->
    println键
    列表。添加(键)
    }
    返回列表
    
    ```

  • 然后您应该添加“动态选择参数(Scriptler)” 参数,并选择已添加的scriptler 之前注意:您必须安装 以前

  • 是否可以从jenkins服务器访问git repo。。当我使用代理与github repositoriesHi DevD通信时,我也遇到了同样的问题。感谢您的帮助。我非常确定git repo可以从jenkins服务器访问,因为我可以使用字符串参数branch来解决问题,它使用$branch变量选择要构建的分支。这个解决方案可行,但这不是我们想要的。如果我试着用g
        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