配置Jenkins作业以从SVN选择应用程序和中继/标签/分支

Mar*_*nda 4 svn hudson build jenkins jenkins-plugins

我们要使用一个Jenkins作业来构建应用程序。

如何配置单个Jenkins作业以从主干或分支进行释放过程中的解决方案没有工作,因为我们的SVN结构是不同的(从历史的原因,我们不能改变它):

http://my-svn-repo/projects/
????branches
?   ????app1
?   ?   ????BRANCH_A
?   ?   ????BRANCH_B
?   ?   ????BRANCH_C
?   ????app2
?   ?   ????BRANCH_D
?   ?   ????BRANCH_E
?   ?   ????BRANCH_F
?   ????app3
?       ????BRANCH_G
?       ????BRANCH_H
?       ????BRANCH_I
????tags
?   ????app1
?   ?   ????BRANCH_D
?   ?   ????BRANCH_E
?   ?   ????BRANCH_F
?   ????app2
?   ?   ????TAG_D
?   ?   ????TAG_E
?   ?   ????TAG_F
?   ????app3
?       ????TAG_G
?       ????TAG_H
?       ????TAG_I
????trunk
    ????app1
    ????app2
    ????app3
Run Code Online (Sandbox Code Playgroud)

所描述的解决方案如何配置单个Jenkins作业以进行从主干或分支的释放过程?选择显示:

  • 树干
  • 分支机构/ app1
  • 分支机构/ app2
  • 分支机构/ app3
  • 标签/ app1
  • 标签/ app2
  • 标签/ app3

我们希望拥有以下内容:

选择1:

  • app1
  • app2
  • app3

选择2(自动基于选择1,例如针对app2):

  • 树干
  • BRANCH_D
  • 领域
  • BRANCH_F
  • TAG_D
  • TAG_E
  • TAG_F

Hon*_*dek 5

使用活动选择参数和Groovy脚本。

  1. 创建参数APP以选择应用程序。Groovy脚本应返回选择列表,因此只需返回硬编码列表(或从文件或所需的任何位置读取它):

在此处输入图片说明

  1. 创建参数VERSION以选择版本。

    • 现在使用Active Choice Reactive Parameter,因此您可以对参数APP的更改做出反应。
    • Groovy脚本逐渐建立可供选择的选项列表。首先是中继线,然后是标签,然后是分支。
    • 使用命令行svn列表以以下形式获取数据:

    svn list http://my-svn-repo/projects/tags/appX --username some_name --password some_password

    • 引用的参数必须设置为APP。每当的值APP更新时,Groovy脚本都会使用参考参数的更新值来重新评估选择列表。

在此处输入图片说明

这是用于复制和粘贴的脚本:

def svnBaseUrl = 'http://my-svn-repo/projects/'
def versions = ['trunk/' + APP]

def svnTagsUrl = svnBaseUrl + 'tags/' + APP
def command = ['svn', 'list', svnTagsUrl,'--username', 'some_name', '--password', 'some_password']
def proc = command.execute()
proc.waitForOrKill(10000)
if ( proc.exitValue() == 0 ) {
  proc.text.eachLine { versions.add('tags/' + APP + '/' + it) }
}

def svnBranchesUrl = svnBaseUrl + 'branches/' + APP
command = ['svn', 'list', svnTagsUrl,'--username', 'some_name', '--password', 'some_password']
proc = command.execute()
proc.waitForOrKill(10000)
if ( proc.exitValue() == 0 ) {
  proc.text.eachLine { versions.add('branches/' + APP + '/' + it) }
}

return versions
Run Code Online (Sandbox Code Playgroud)
  1. 在“ 构建触发器”部分中,设置另一个变量(以提高可读性):BASE_SVN_URL=http://my-svn-repo/projects

在此处输入图片说明

  1. 现在您已经准备好所有变量,可以将它们打印到Jenkins作业控制台:

在此处输入图片说明

用于复制和粘贴的脚本:

#!/bin/bash
echo "================================================"
echo "Parameters for the build:"
echo "Application:  $APP"
echo "Base SVN URL: ${BASE_SVN_URL}"
echo "Version:      ${VERSION}"
echo "SVN URL:      ${BASE_SVN_URL}/${VERSION}"
echo "================================================"
Run Code Online (Sandbox Code Playgroud)

在测试过程中,您可以在脚本的末尾添加一行以立即终止您的作业,并只看到以下值:

exit 1
Run Code Online (Sandbox Code Playgroud)
  1. 最后,调用另一个Jenkins job Build-application-core-job,它将执行实际的构建。将所有必要的参数传递给作业:

在此处输入图片说明

  1. 运行作业时,您将获得一个带有两个参数的屏幕,其中第二个参数始终取决于第一个参数的值来包含有效值:

在此处输入图片说明

  1. 最后但并非最不重要的一点是:遵循标准是好的:)如果您遵循标准,那么您可以像/sf/answers/2283590781/所述,几乎使用开箱即用的List Subversions标签(及更多)插件。