• 如何在Jenkins pipeline中获取当前SVN版本号?


    我正在使用Jenkins 1.596,Workflow 1.3和Svn插件2.5。 我正在尝试在工作流程脚本中获取svn修订版号。

    我的工作流脚本部分为:

    node {
       checkout scm: [ $class:"SubversionSCM", locations: [[ remote:'https://secure3.svnrepository.com/somerepo/trunk', credentialsId: cid]] ]
       stage 'build'
       dir('trunk') {
          def revision = 'svn info'.execute().in.text.split('\
    ').find { it.startsWith('Revision') }.split(':')[1].trim()
          println revision
          def svnHome = tool 'Svn'
          sh"$svnHome/bin/svn info"
          def mvnHome = tool 'Maven'
          sh"export JAVA_HOME=/var/jenkins_home/java; $mvnHome/bin/mvn --version"
          sh"export JAVA_HOME=/var/jenkins_home/java; $mvnHome/bin/mvn clean deploy"
    }

    在这里,您会看到两次尝试:

    第一个尝试打印" java.io.IOException:无法运行程序" svn":error = 2,没有这样的文件或目录",

    第二个提示"没有找到名为Svn的工具"(我也尝试了" 颠覆")。 尝试def revision = System.getenv('SVN_REVISION')打印"空"。

    知道我该怎么做吗?


    这是一个已知的错误:https://issues.jenkins-ci.org/browse/JENKINS-32744。

    我遇到了同样的问题(未加载环境变量)。
    您可以从路径中名为" revision.txt"的文件获取修订号:" C:\ Program Files(x86)\ Jenkins \ jobs \ $ {pipelineTaskName} \ builds \ $ {buildNumber}"。


    由于我在Internet上找到了一个不错的脚本(我不记得在哪里),并且我们使用了Groovy脚本,因此我想分享这个对我非常有用的解决方案:

    def url ="ENTER HERE YOUR SVN URL"
    def SVN_REVISION ="svn info --show-item last-changed-revision $url".execute().text
    echo "$SVN_REVISION" /*should work now*/

    如果是已经在版本控制的目录里了,如:D:\_job\TestJava\trunk\,可以直接使用:

    很抱歉,您无法使用此线程,但我希望这对某些人有用。

    使用这些变量时,请不要忘记使用双引号。这对我来说很难找到。 :-/


    有一种方法可以使用每个SVN模块的变量来完成。请参阅下面的答案
    https://stackoverflow.com/a/24956967/5842403
    基本上,您使用$ SVN_REVISION_x变量,其中" x"是svn URL模块的计数器。您可以回显该变量并将其作为工件放入文件中。


    No such file or directory错误表示错误的含义:Subversion未安装在您的构建从站上。

    您似乎已经明白了,并尝试使用tool安装Subversion来解决此问题。但是Jenkins Subversion插件没有Subversion的工具定义。它始终使用SVNKit(一个进程内(Java)库)。所以这行不通。

    (通过Mercurial插件始终运行hg可执行文件的方式,Git插件可以使用git可执行文件或嵌入式JGit库。这两种方法都可以用来定义工具安装,但不能定义特殊的(自动)安装程序,因此对于这种情况,它们不会有太大帮助。您也可以运行sh 'sudo apt-get install subversion'。)

    假设您安装Subversion以便svn位于您的$PATH中,那么下一个问题是,从GDK中使用String.execute()通常也不能在工作流中使用。这是因为流脚本是在Jenkins主进程内部运行的,而不是在从属进程上运行的。您必须使用sh步骤(或Windows从属服务器上的bat)运行外部命令。至于从他们那里获得输出,JENKINS-26133描述了当前的习惯用法。

    JDK中的String.find当前将不起作用:JENKINS-26481。请改用Java Platform方法,或者使用任何不需使用闭包的方法。

    出于与String.execute()不适当的原因类似的原因,System.getenv将无法获得为工作流构建定义的"环境变量":这只会加载在Jenkins主进程上设置的环境变量,固定于Jenkins启动时。您正在考虑的变量仅在分叉进程(sh / bat)上设置;或者您可以使用env.VARIABLE语法从Groovy访问它们。

    您真正想开始的是直接访问SVN_REVISION,而不必自己运行svn info。跟踪为JENKINS-26100。

    出处:https://www.codenong.com/29191399/

  • 相关阅读:
    04、图的基本考点
    06、排序【应用篇】
    07、顺序表编程考点
    08、单链表编程考点
    04、css position 属性
    03、css float 浮动属性
    02、线性表基础考点
    软件工程博客---小学期--日报6
    软件工程博客---小学期--日报5(含周末)
    软件工程博客---小学期--日报4
  • 原文地址:https://www.cnblogs.com/mq0036/p/16185258.html
Copyright © 2020-2023  润新知