Jenkins Git Parameter插件无法读取标签 [英] Jenkins Git Parameter plugin cannot fetch tags

查看:485
本文介绍了Jenkins Git Parameter插件无法读取标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  • Jenkins版本:1.593

  • Git参数插件:0.4.0

  • GIT客户端插件:1.16 .1



我使用一个专用的git存储库,可以通过ssh访问。



我的构建是参数化的。
git参数是 TAG_TO_BUILD ,构建的分支是 refs / tags / $ {TAG_TO_BUILD}



完成工作空间的初始构建后,当我使用参数开始构建时,出现 noWorkspaceError

在Jenkins日志中,我有

  2015年2月16日下午2点17分34秒WARNING org.eclipse .jetty.util.log.JavaUtilLog警告
服务http://foo/view/bar/job/baz/descriptorByName/net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition/fillValueItems $ b $时发生错误在sun.reflect.NativeMethodAccessorImpl.invoke在sun.reflect.NativeMethodAccessorImpl.invoke0 b java.lang.reflect.InvocationTargetException
(本机方法)
(NativeMethodAccessorImpl.java:57)
在阳光下。反射.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.kohsuke.stapler.Function $ InstanceFunction.invoke(功能。
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
在org.kohsuke.stapler.MetaClass $ 1.doDispatch(MetaClass.java:121)
在org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
在org.kohsuke.stapler。 Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass $ 6.doDispatch(MetaClass.java :249)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
at org.kohsuke.stapler.MetaClass $ 6.doDispatch(MetaClass.java:249)
at org.kohsuke.stapler.NameBasedDispatcher .dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746 )
在org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
在org.kohsuke.stapler.MetaClass $ 6.doDispatch(MetaClass.java:249)
在org .kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
在org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
在org.kohsuke.stapler.Stapler.invoke (Stapler.java:876)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
at org。 eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1494)
在hudson.util.PluginServletFilter $ 1.doFilter(PluginServletFilter.java:96)
在com.smartcodeltd.jenkinsci.plugin .assetbundler.filters.LessCSS.doFilter(LessCSS.java:46)
at hudson.util.PluginServletFilter $ 1.doFilter(PluginSe rvletFilter.java:99)美元,org.jenkinsci.plugins.modernstatus.ModernStatusFilter.doFilter(ModernStatusFilter.java:52 B $ B)
在hudson.util.PluginServletFilter $ 1.doFilter(PluginServletFilter.java:99)
。在在哈德森org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1482)
hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
。 security.csrf.CrumbFilter.doFilter(CrumbFilter.java:85)
。在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1482)
。在hudson.security.ChainedServletFilter $ 1 .doFilter(ChainedServletFilter.java:84)
at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
at hudson.security.ChainedServletFilte r $ 1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter。的java:在org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142 87)

。在hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)
at jenkins.security.BasicHeaderProcessor.doFilter (BasicHeaderProcessor.java:93)
at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)$ b $ h at hudson.security.HttpSession ContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
at hudson.security.ChainedServletFilter $ 1.doFilter(ChainedServletFilter.java:87)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
at org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1482)
at org。 kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)维持在hudson.util org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1482)

。 CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
at org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1482)
at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter( DiagnosticThreadNameFilter.java:30)
在org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(Se rvletHandler.java:1474)
在org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
在org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler。 java:137)
在org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
在org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
在org.eclipse.jetty.server.Server.handle(Server.java:370)在org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)

在org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
在org.eclipse.jetty.server.AbstractHttpConnection $ RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
在org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
。在组织.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty .io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint $ 1.run(SelectChannelEndPoint.java:52)
在winstone.BoundedExecutorService $ 1 .run(BoundedExecutorService.java:77)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadP oolExecutor $ Worker.run(ThreadPoolExecutor.java:615)$ b $在java.lang.Thread.run(Thread.java:745)
引起:hudson.plugins.git.GitException:命令git - c core.askpass = true fetch --tags --progress git @ foo:foobar / foobaz.git + refs / heads / *:refs / remotes / origin / *返回状态码128:
stdout:
stderr:权限被拒绝,请重试。
权限被拒绝,请重试。
权限被拒绝(公钥,密码)。
致命:远程终端意外挂起

,位于org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1591)
at org.jenkinsci.plugins。 gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1379)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access $ 300(CliGitAPIImpl.java:86)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl在net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.generateContents $ 1.execute(CliGitAPIImpl.java:324)
(GitParameterDefinition.java:314)
。在net.uaznia.lukanus.hudson。 plugins.gitparameter.GitParameterDefinition $ DescriptorImpl.doFillValueItems(GitParameterDefinition.java:536)
... 85 more

我使用ssh用户名和私钥证书,私钥直接输入。我可以肯定的是,关键是正确的,因为这项工作可以建立在没有参数的情况下。



因此,看起来这个命令取得标签borks,不知道为什么: git -c core.askpass = true fetch --tags --progress git @ foo:foobar / foobaz.git + refs / heads / *:refs / remotes / origin / *
如果我在本地机器上执行这个命令,并且指向我自己的私钥的〜/ .ssh / config 文件,那么该命令不会出错。



有关故障排除的任何提示?我无法以jenkins用户的身份登录到Jenkins服务器,因为它是托管服务器,因此不在桌面上。

解决方案

我无法得到这个工作。它被证实是一个SSH问题(请参阅对问题的评论),并且我没有权限访问jenkins用户,因此我无法创建〜/ .ssh / config 为它。



我用另一种方式解决了问题:





  def feedUrl ='URL_TO_PHP_SCRIPT'
def gettags = new URL(feedUrl).getText()
def tags = []
def t1 = []
gettags.eachLine {tags.add(it)}
for (i in tags)
t1.add(i.split()[1] .replaceAll('\\ ^ \\ {\\}','')。replaceAll('refs / tags /',''))
t1 = t1.unique()。sort()。reverse()
return t1




  • Jenkins可访问的服务器上的PHP脚本(碰巧是同一台服务器,但nginx作为jenkins的不同用户运行,而且我具有shell访问权限,因此可以创建〜/ .ssh / config ):


 <?php 
exec('git ls-remote -t​​ GIT_URL',$ output);
print(preg_replace('/ [a-z0-9] * \trends\ / heads\ //','',implode(\\\
,$ output)));
?>




  • 〜/ .ssh / config <

















    $

     主机GIT_SERVER 
    IdentityFile PATH_TO_SSH_PRIVATE_KEY
    IdentitiesOnly是




    • 将相应的SSH公钥添加到Git服务器。


    缺点这个设置是非常巧妙的。只要使用Git Parameter插件会更加优雅,但对我来说这很不幸。



    我的主要优点是可以测试每个单独的部件:


    1. shell中的 git ls-remote 命令:输出SHA和标签引用。
    2. php getgittags.php 将所有标签的列表输出到shell。

    3. 浏览到getgittags.php并验证我获得了相同的标签列表。

    4. 可扩展选择参数具有立即运行脚本按钮,允许您在保存之前进行测试
    5. 最后,开始一个参数化的构建。



    6. 我从这些StackOverflow答案:




      • Jenkins version: 1.593
      • Git Parameter Plug-In: 0.4.0
      • GIT client plugin: 1.16.1

      I use a private git repository, accessible over ssh.

      My build is parameterized. The git parameter is TAG_TO_BUILD, the branch to build is refs/tags/${TAG_TO_BUILD}

      After the initial build of the workspace, when I start a build with parameters, I get noWorkspaceError.

      In the Jenkins log I have

      Feb 16, 2015 2:17:34 PM WARNING org.eclipse.jetty.util.log.JavaUtilLog warn
      Error while serving http://foo/view/bar/job/baz/descriptorByName/net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition/fillValueItems
      java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:606)
          at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
          at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
          at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
          at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
          at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
          at com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.doFilter(LessCSS.java:46)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:99)
          at org.jenkinsci.plugins.modernstatus.ModernStatusFilter.doFilter(ModernStatusFilter.java:52)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:99)
          at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:85)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
          at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
          at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
          at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
          at org.eclipse.jetty.server.Server.handle(Server.java:370)
          at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
          at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
          at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
          at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
          at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
          at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
          at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
          at java.lang.Thread.run(Thread.java:745)
      Caused by: hudson.plugins.git.GitException: Command "git -c core.askpass=true fetch --tags --progress git@foo:foobar/foobaz.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
      stdout: 
      stderr: Permission denied, please try again.
      Permission denied, please try again.
      Permission denied (publickey,password).
      fatal: The remote end hung up unexpectedly
      
          at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1591)
          at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1379)
          at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:86)
          at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:324)
          at net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.generateContents(GitParameterDefinition.java:314)
          at net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition$DescriptorImpl.doFillValueItems(GitParameterDefinition.java:536)
          ... 85 more
      

      I am using ssh username with private key credentials, the private key is entered directly. I can be certain that the key is correct, because the job can be built without parameters.

      So it seems that the fetching of tags borks on this command but I don't know why: git -c core.askpass=true fetch --tags --progress git@foo:foobar/foobaz.git +refs/heads/*:refs/remotes/origin/* If I execute this command on my local machine, with a ~/.ssh/config file that points to my own private key, then that command does not error out.

      Any hints on troubleshooting? I cannot log in on the Jenkins server as the jenkins user because it is a hosted server, so that's off the table.

      解决方案

      I could not get this to work. It's confirmed to be a SSH issue (see comment on question), and I don't have access to the jenkins user so I can't create a ~/.ssh/config for it.

      I solved it in another way:

      .

      def feedUrl = 'URL_TO_PHP_SCRIPT'
      def gettags = new URL(feedUrl).getText()
      def tags = []
      def t1 = []
      gettags.eachLine {tags.add(it)}
      for(i in tags)
          t1.add(i.split()[1].replaceAll('\\^\\{\\}','').replaceAll('refs/tags/', ''))
      t1 = t1.unique().sort().reverse()
      return t1
      

      • PHP script on a server that is accessible to Jenkins (happens to be the same server but with nginx running as a different user as jenkins, and I do have shell access so I can create a ~/.ssh/config):

      .

      <?php
      exec('git ls-remote -t GIT_URL', $output);
      print(preg_replace('/[a-z0-9]*\trefs\/heads\//','',implode("\n", $output)));
      ?>
      

      • ~/.ssh/config on the user account that runs the webserver:

      .

      Host    GIT_SERVER
          IdentityFile    PATH_TO_SSH_PRIVATE_KEY
          IdentitiesOnly  yes
      

      • The corresponding SSH public key was added to the Git server.

      The disadvantage of this setup is that it is very cludgy. Just using the Git Parameter plugin would have been a lot more elegant, but that is unfortunately broken for me.

      The main advantage for me is that I could test every individual part of it:

      1. The git ls-remote command in a shell: outputs SHAs and tag references.
      2. php getgittags.php outputs the list of all tags to the shell.
      3. Browse to getgittags.php and verify I got the same tag list.
      4. The Extensible Choice Parameter has a "Run the Script Now" button, allowing you to test before you save your changes.
      5. Finally, start a parameterized build.

      I took ideas from these StackOverflow answers:

      这篇关于Jenkins Git Parameter插件无法读取标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆