如何在Jenkins工作流程插件中获取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('\n').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')打印“空”。

知道我该怎么做吗?

回答:

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

您似乎已经明白了,并尝试通过使用toolSubversion 来解决它。但是Jenkins

Subversion插件没有Subversion的工具定义。它始终使用SVNKit(一个进程内(Java)库)。所以这行不通。

(通过Mercurial插件始终运行hg可执行文件的方式,Git插件可以使用git可执行文件或嵌入式JGit库。这两种方法都允许您定义工具安装,但

定义特殊的(自动)安装程序,因此它们不会对于这种情况有很大帮助。您也可以很好地运行sh 'sudo apt-get install

subversion'。)

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

String.find来自JDK的代码目前无法使用:JENKINS-26481。请改用Java Platform方法,或者使用任何不需使用闭包的方法。

出于类似于“为什么String.execute()不合适”的原因,System.getenv将无法获得为工作流程构建定义的“环境变量”:这只会加载在Jenkins主流程上设置的环境变量,并在Jenkins启动时进行固定。您正在考虑的变量仅在分支进程(sh/

bat)上设置;或者您可以使用env.VARIABLE语法从Groovy访问它们。

您真正想开始的是直接访问而SVN_REVISION无需运行svn

info自己。跟踪为JENKINS-26100。

以上是 如何在Jenkins工作流程插件中获取SVN版本号? 的全部内容, 来源链接: utcz.com/qa/434276.html

回到顶部