0

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

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

4

1 回答 1

1

如果您可以使用Groovy PluginJenkins Rest Api,请按照以下步骤操作。

  1. 安装 Groovy 插件。
  2. 转到作业的配置页面。
  3. 添加默认值为 125 的“fracture_no”构建参数。
  4. 在“常规”部分启用“必要时执行并发构建”
  5. 添加“执行 Groovy 脚本”构建步骤作为作业的第一步
  6. 将以下代码添加到 groovy 步骤

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. 添加另一个需要很长时间的构建步骤。如果您只想测试,则添加以下休眠 100 秒的 Windows 批处理命令步骤。
    ping 127.0.0.1 -n 100 > nul
  2. 使用默认参数值 125 启动工作两次(或任意多次)。
  3. 应该停止除最新版本之外的所有内容。
于 2016-08-14T09:04:42.650 回答