将 Jenkins 作业配置为 select 应用程序和来自 SVN 的 trunk/tags/branches

Configure a Jenkins job to select an application and trunk/tags/branches from SVN

我们想使用单个 Jenkins 作业来构建应用程序。

来自How to configure a single Jenkins job to make the release process from trunk or branches?的解决方案有效,因为我们的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

所描述的解决方案How to configure a single Jenkins job to make the release process from trunk or branches?显示供选择:

我们想要的是:

选择 1:

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

您可以使用下面的一个或多个插件。

1 - Dynamic Extended Choice Paramenter 这似乎正是你想要的,但我从来没有用过这个。

2 - Dynamic Parameter 在此您可以配置一个脚本来读取所有应用程序、分支或主干,并将其转换为您的工作的选择选项,或者只添加一个静态选项列表。

使用 Active Choice Parameter 和 Groovy 脚本。

  1. 创建参数 APP 到 select 应用程序。 Groovy 脚本预计 return select 离子列表,因此只需 return hard-coded 列表(或从文件或您从任何地方读取它希望):

  1. 创建参数 VERSION 到 select 版本。

    • 现在使用Active Choice Reactive Parameter,这样你就可以对参数APP的变化做出反应了。
    • Groovy 脚本逐渐构建了 select 可用的选择列表。首先是 t运行k,然后是标签,然后是分支。
    • 数据是使用command-linesvn list的形式得到的

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

    • 引用的参数必须设置为APP。每当更新 APP 的值时,Groovy 脚本将 re-evaluate 使用引用参数的更新值的选择列表。

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

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
  1. Build Triggers 部分,设置另一个变量(为了更好的可读性):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 "================================================"

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

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

  1. 当你 运行 你的工作时,你会看到一个有两个参数的屏幕,其中第二个参数始终包含有效值,具体取决于第一个参数的值:

  1. 最后但同样重要的是:遵循标准是好的 :) 如果您遵循标准,您可以使用几乎开箱即用的 List Subversions 标签(以及更多) 插件在
  2. 中描述