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

时间:2017-01-09 13:59:51

标签: svn jenkins build jenkins-plugins hudson

我们希望使用单个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?显示了选择:

  • 躯干
  • 分支机构/ app1的
  • 分支机构/ APP2
  • 分支机构/ APP3
  • 标签/ app1的
  • 标签/ APP2
  • 标签/ APP3

我们希望拥有以下内容:

选择1:

  • APP1
  • APP2
  • APP3

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

  • 躯干
  • BRANCH_D
  • BRANCH_E
  • BRANCH_F
  • TAG_D
  • TAG_E
  • TAG_F

2 个答案:

答案 0 :(得分:5)

使用Active Choice Parameter和Groovy脚本。

  1. 创建参数APP以选择应用程序。 Groovy脚本应该返回选择列表,因此只需返回硬编码列表(或从文件或任何你想要的地方读取它):
  2. enter image description here

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

      • 现在使用 Active Choice Reactive 参数,这样您就可以对参数APP的更改作出反应。
      • Groovy脚本逐渐构建可选择的选项列表。第一个主干,然后是标签,然后是分支。
      • 使用命令行svn list
      • 的形式获取数据

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

      • 参考参数必须设置为APP。每当更新APP的值时,Groovy脚本将使用引用参数的更新值重新评估选项列表。
    2. enter image description here

      以下是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
      
      1. 构建触发器部分中,设置另一个变量(为了更好的可读性):BASE_SVN_URL=http://my-svn-repo/projects
      2. enter image description here

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

          复制脚本&粘贴:

          #!/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。通过工作所有必要的参数:
          2. enter image description here

            1. 当您运行作业时,您将获得一个包含两个参数的屏幕,其中第二个参数将始终包含有效值,具体取决于第一个参数的值:
            2. enter image description here

              1. 最后但并非最不重要:遵循标准是好的:)如果你遵循标准,你可以使用 List Subversions标签(和更多)插件几乎开箱即用,如{{3 }}

答案 1 :(得分:0)

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

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

2 - Dynamic Parameter在此,您可以配置脚本以读取所有应用程序,分支或中继,并在您的作业的选项选项上进行转换,或者只添加静态选项列表。