我们要使用一个詹金斯工作来构建应用程序。
如何配置单个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
所描述的解决方案如何配置单个Jenkins作业以进行 从主干或分支的释放过程?选择显示
我们希望拥有以下内容:
Selection 1:
选择2(自动基于选择1,例如针对app2):
使用活动选择参数和Groovy脚本。
创建参数APP以选择应用程序。Groovy脚本应返回选择列表,因此只需返回硬编码列表(或从文件或所需的任何位置读取它)
创建参数VERSION以选择版本。
svn list http://my-svn-repo/projects/tags/appX --username some_name--password some_password
* _Referenced parameters_ must be set to `APP`. Whenever the value of `APP` is updated, the Groovy script will re-evaluate the choice list using the updated values of referenced parameters.
这是用于复制和粘贴的脚本:
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
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
最后,调用另一个JenkinsjobBuild-application-core-job,它将执行实际的构建。将所有必要的参数传递给作业
JenkinsjobBuild-application-core-job
运行作业时,您将获得一个带有两个参数的屏幕,其中第二个参数始终取决于第一个参数的值而包含有效值
最后但并非最不重要的一点是:遵循标准是好的:)如果您遵循标准,那么您可以按照清单(如果您对詹金斯不太熟悉,只需在彼得的答案中添加一些注释。
Subversion插件默认安装在最新版本中(截至2015年9月)。
然后,应按以下方式配置项目: