将 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?显示供选择:
- 树干
- branches/app1
- branches/app2
- branches/app3
- tags/app1
- tags/app2
- tags/app3
我们想要的是:
选择 1:
- app1
- app2
- app3
选择 2(自动基于选择 1,例如对于 app2):
- 树干
- BRANCH_D
- BRANCH_E
- BRANCH_F
- TAG_D
- TAG_E
- TAG_F
您可以使用下面的一个或多个插件。
1 - Dynamic Extended Choice Paramenter
这似乎正是你想要的,但我从来没有用过这个。
2 - Dynamic Parameter 在此您可以配置一个脚本来读取所有应用程序、分支或主干,并将其转换为您的工作的选择选项,或者只添加一个静态选项列表。
使用 Active Choice Parameter 和 Groovy 脚本。
- 创建参数
APP
到 select 应用程序。 Groovy 脚本预计 return select 离子列表,因此只需 return hard-coded 列表(或从文件或您从任何地方读取它希望):
创建参数 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
- 在 Build Triggers 部分,设置另一个变量(为了更好的可读性):
BASE_SVN_URL=http://my-svn-repo/projects
- 现在您已准备好所有变量,您可以将它们打印到 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
- 最后,调用另一个 Jenkins 作业
Build-application-core-job
,它将执行实际构建。传递作业所有必要的参数:
- 当你 运行 你的工作时,你会看到一个有两个参数的屏幕,其中第二个参数始终包含有效值,具体取决于第一个参数的值:
- 最后但同样重要的是:遵循标准是好的 :) 如果您遵循标准,您可以使用几乎开箱即用的 List Subversions 标签(以及更多) 插件在
中描述
我们想使用单个 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?显示供选择:
- 树干
- branches/app1
- branches/app2
- branches/app3
- tags/app1
- tags/app2
- tags/app3
我们想要的是:
选择 1:
- app1
- app2
- app3
选择 2(自动基于选择 1,例如对于 app2):
- 树干
- BRANCH_D
- BRANCH_E
- BRANCH_F
- TAG_D
- TAG_E
- TAG_F
您可以使用下面的一个或多个插件。
1 - Dynamic Extended Choice Paramenter 这似乎正是你想要的,但我从来没有用过这个。
2 - Dynamic Parameter 在此您可以配置一个脚本来读取所有应用程序、分支或主干,并将其转换为您的工作的选择选项,或者只添加一个静态选项列表。
使用 Active Choice Parameter 和 Groovy 脚本。
- 创建参数
APP
到 select 应用程序。 Groovy 脚本预计 return select 离子列表,因此只需 return hard-coded 列表(或从文件或您从任何地方读取它希望):
创建参数
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
- 在 Build Triggers 部分,设置另一个变量(为了更好的可读性):
BASE_SVN_URL=http://my-svn-repo/projects
- 现在您已准备好所有变量,您可以将它们打印到 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
- 最后,调用另一个 Jenkins 作业
Build-application-core-job
,它将执行实际构建。传递作业所有必要的参数:
- 当你 运行 你的工作时,你会看到一个有两个参数的屏幕,其中第二个参数始终包含有效值,具体取决于第一个参数的值:
- 最后但同样重要的是:遵循标准是好的 :) 如果您遵循标准,您可以使用几乎开箱即用的 List Subversions 标签(以及更多) 插件在 中描述