如何使用特定参数结束jenkins构建

时间:2016-08-13 03:51:12

标签: jenkins groovy jenkins-groovy

我使用参数FRACTURE_NO = 15触发名为 testAUT 的构建。我使用相同的参数触发相同的构建。

我希望当发生这种情况时,早期版本会被杀死。我怎么能用Jenkins做到这一点?我希望能够使用与当前版本相同的参数结束构建。

1 个答案:

答案 0 :(得分:1)

如果您使用Groovy PluginJenkins Rest Api即可,请执行以下步骤:

  1. 安装Groovy插件。
  2. 转到作业的配置页面。
  3. 添加'fracture_no'构建参数,默认值为125.
  4. 在“常规”部分
  5. 中启用“必要时执行并发构建”
  6. 添加“执行Groovy脚本”构建步骤作为作业的第一步
  7. 将以下代码添加到groovy步骤
  8. def parameterName = "fracture_no";
    def jenkinsUrl = System.getenv('JENKINS_URL');
    def buildNumber = System.getenv('BUILD_NUMBER').toInteger();
    def jobUrl = jenkinsUrl + "job/" + System.getenv('JOB_NAME');
    def buildNumberUrl = jobUrl + "/" + buildNumber;
    def myParameter = System.getenv(parameterName);
    
    def projectXml = new XmlSlurper().parseText(new URL(jobUrl + "/api/xml").getText());
    projectXml.build.each {
      def previousBuildNumber = it.number.text().toInteger();
      if(previousBuildNumber < buildNumber)
      {
        def previousBuildNumberUrl = jobUrl + "/" + previousBuildNumber;
        def jobXml = new XmlSlurper().parseText(new URL(previousBuildNumberUrl + "/api/xml").getText());
        if(jobXml.building.text() == "true")
        {
          jobXml.action.parameter.each {
            if(it.name.text() == parameterName) {
              if(it.value.text() == myParameter) {
                def url = new URL(previousBuildNumberUrl + "/stop");
                def connection = url.openConnection();
                connection.setRequestMethod("POST");
                connection.connect();
                connection.content.text;
                println "Stopping " + previousBuildNumber;
              }
            }
          }
        }
      }
    }
    
    1. 添加另一个需要很长时间的构建步骤。如果您只想测试,请添加以下Windows批处理命令步骤,该步骤将休眠100秒 ping 127.0.0.1 -n 100 > nul
    2. 使用默认参数值125(或根据需要多次)启动作业两次。
    3. 应该停止除最新版本之外的所有内容。