我们希望使用单个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):
答案 0 :(得分:5)
使用Active Choice Parameter和Groovy脚本。
APP
以选择应用程序。 Groovy脚本应该返回选择列表,因此只需返回硬编码列表(或从文件或任何你想要的地方读取它):创建参数VERSION
以选择版本。
svn list http://my-svn-repo/projects/tags/appX --username some_name --password some_password
APP
。每当更新APP
的值时,Groovy脚本将使用引用参数的更新值重新评估选项列表。 以下是copy& amp;的脚本粘贴:
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
BASE_SVN_URL=http://my-svn-repo/projects
复制脚本&粘贴:
#!/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 :(得分:0)
您可以使用下面插件的一个或一个展位。
1 - Dynamic Extended Choice Paramenter 这似乎正是你想要的,但我从来没有使用过这个。
2 - Dynamic Parameter在此,您可以配置脚本以读取所有应用程序,分支或中继,并在您的作业的选项选项上进行转换,或者只添加静态选项列表。