瀏覽代碼

Update Gradle gradleEnterprise plugin (develocity now) (#109443)

* Update Gradle gradleEnterprise plugin (develocity now)
* Fix imports in build scan script
* Fix build scan api usage
* Dependency cleanup and API fix
* Fix API update for BuildResult in Build scans
* Fix buildkite buildscan annotations based on gradle failures
Rene Groeschke 1 年之前
父節點
當前提交
02439e321d

+ 2 - 2
.ci/init.gradle

@@ -91,8 +91,8 @@ if (USE_ARTIFACTORY) {
 }
 
 gradle.settingsEvaluated { settings ->
-  settings.pluginManager.withPlugin("com.gradle.enterprise") {
-    settings.gradleEnterprise {
+  settings.pluginManager.withPlugin("com.gradle.develocity") {
+    settings.develocity {
       server = 'https://gradle-enterprise.elastic.co'
     }
   }

+ 153 - 142
build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle

@@ -12,168 +12,179 @@ import java.time.LocalDateTime;
 import org.elasticsearch.gradle.Architecture
 import org.elasticsearch.gradle.OS
 import org.elasticsearch.gradle.internal.info.BuildParams
-import org.gradle.initialization.BuildRequestMetaData
 
-buildScan {
-  URL jenkinsUrl = System.getenv('JENKINS_URL') ? new URL(System.getenv('JENKINS_URL')) : null
-  String buildKiteUrl = System.getenv('BUILDKITE_BUILD_URL') ? System.getenv('BUILDKITE_BUILD_URL') : null
+import java.lang.management.ManagementFactory
+import java.time.LocalDateTime
 
-  // Automatically publish scans from Elasticsearch CI
-  if (jenkinsUrl?.host?.endsWith('elastic.co') || jenkinsUrl?.host?.endsWith('elastic.dev') || System.getenv('BUILDKITE') == 'true') {
-    publishAlways()
-    buildScan.server = 'https://gradle-enterprise.elastic.co'
-  }
+develocity {
 
-  background {
-    tag OS.current().name()
-    tag Architecture.current().name()
+  buildScan {
+    URL jenkinsUrl = System.getenv('JENKINS_URL') ? new URL(System.getenv('JENKINS_URL')) : null
+    String buildKiteUrl = System.getenv('BUILDKITE_BUILD_URL') ? System.getenv('BUILDKITE_BUILD_URL') : null
 
-    // Tag if this build is run in FIPS mode
-    if (BuildParams.inFipsJvm) {
-      tag 'FIPS'
+    // Automatically publish scans from Elasticsearch CI
+    if (jenkinsUrl?.host?.endsWith('elastic.co') || jenkinsUrl?.host?.endsWith('elastic.dev') || System.getenv('BUILDKITE') == 'true') {
+      publishing.onlyIf { true }
+      server = 'https://gradle-enterprise.elastic.co'
     }
 
-    // Jenkins-specific build scan metadata
-    if (jenkinsUrl) {
-      // Disable async upload in CI to ensure scan upload completes before CI agent is terminated
-      uploadInBackground = false
-
-      String buildNumber = System.getenv('BUILD_NUMBER')
-      String buildUrl = System.getenv('BUILD_URL')
-      String jobName = System.getenv('JOB_NAME')
-      String nodeName = System.getenv('NODE_NAME')
-      String jobBranch = System.getenv('ghprbTargetBranch') ?: System.getenv('JOB_BRANCH')
-
-      // Link to Jenkins worker logs and system metrics
-      if (nodeName) {
-        link 'System logs', "https://ci-stats.elastic.co/app/infra#/logs?&logFilter=(expression:'host.name:${nodeName}',kind:kuery)"
-        buildFinished {
-          link 'System metrics', "https://ci-stats.elastic.co/app/metrics/detail/host/${nodeName}"
-        }
+
+    background {
+      tag OS.current().name()
+      tag Architecture.current().name()
+
+      // Tag if this build is run in FIPS mode
+      if (BuildParams.inFipsJvm) {
+        tag 'FIPS'
       }
 
-      // Parse job name in the case of matrix builds
-      // Matrix job names come in the form of "base-job-name/matrix_param1=value1,matrix_param2=value2"
-      def splitJobName = jobName.split('/')
-      if (splitJobName.length > 1 && splitJobName.last() ==~ /^([a-zA-Z0-9_\-]+=[a-zA-Z0-9_\-&\.]+,?)+$/) {
-        def baseJobName = splitJobName.dropRight(1).join('/')
-        tag baseJobName
-        tag splitJobName.last()
-        value 'Job Name', baseJobName
-        def matrixParams = splitJobName.last().split(',')
-        matrixParams.collect { it.split('=') }.each { param ->
-          value "MATRIX_${param[0].toUpperCase()}", param[1]
+      // Jenkins-specific build scan metadata
+      if (jenkinsUrl) {
+        // Disable async upload in CI to ensure scan upload completes before CI agent is terminated
+        uploadInBackground = false
+
+        String buildNumber = System.getenv('BUILD_NUMBER')
+        String buildUrl = System.getenv('BUILD_URL')
+        String jobName = System.getenv('JOB_NAME')
+        String nodeName = System.getenv('NODE_NAME')
+        String jobBranch = System.getenv('ghprbTargetBranch') ?: System.getenv('JOB_BRANCH')
+
+        // Link to Jenkins worker logs and system metrics
+        if (nodeName) {
+          link 'System logs', "https://ci-stats.elastic.co/app/infra#/logs?&logFilter=(expression:'host.name:${nodeName}',kind:kuery)"
+          buildFinished {
+            link 'System metrics', "https://ci-stats.elastic.co/app/metrics/detail/host/${nodeName}"
+          }
         }
-      } else {
-        tag jobName
-        value 'Job Name', jobName
-      }
 
-      tag 'CI'
-      link 'CI Build', buildUrl
-      link 'GCP Upload', "https://console.cloud.google.com/storage/browser/_details/elasticsearch-ci-artifacts/jobs/${URLEncoder.encode(jobName, "UTF-8")}/build/${buildNumber}.tar.bz2"
-      value 'Job Number', buildNumber
-      if (jobBranch) {
-        tag jobBranch
-        value 'Git Branch', jobBranch
-      }
+        // Parse job name in the case of matrix builds
+        // Matrix job names come in the form of "base-job-name/matrix_param1=value1,matrix_param2=value2"
+        def splitJobName = jobName.split('/')
+        if (splitJobName.length > 1 && splitJobName.last() ==~ /^([a-zA-Z0-9_\-]+=[a-zA-Z0-9_\-&\.]+,?)+$/) {
+          def baseJobName = splitJobName.dropRight(1).join('/')
+          tag baseJobName
+          tag splitJobName.last()
+          value 'Job Name', baseJobName
+          def matrixParams = splitJobName.last().split(',')
+          matrixParams.collect { it.split('=') }.each { param ->
+            value "MATRIX_${param[0].toUpperCase()}", param[1]
+          }
+        } else {
+          tag jobName
+          value 'Job Name', jobName
+        }
 
-      System.getenv().getOrDefault('NODE_LABELS', '').split(' ').each {
-        value 'Jenkins Worker Label', it
-      }
+        tag 'CI'
+        link 'CI Build', buildUrl
+        link 'GCP Upload',
+          "https://console.cloud.google.com/storage/browser/_details/elasticsearch-ci-artifacts/jobs/${URLEncoder.encode(jobName, "UTF-8")}/build/${buildNumber}.tar.bz2"
+        value 'Job Number', buildNumber
+        if (jobBranch) {
+          tag jobBranch
+          value 'Git Branch', jobBranch
+        }
 
-      // Add SCM information
-      def isPrBuild = System.getenv('ROOT_BUILD_CAUSE_GHPRBCAUSE') != null
-      if (isPrBuild) {
-        value 'Git Commit ID', System.getenv('ghprbActualCommit')
-        tag "pr/${System.getenv('ghprbPullId')}"
-        tag 'pull-request'
-        link 'Source', "https://github.com/elastic/elasticsearch/tree/${System.getenv('ghprbActualCommit')}"
-        link 'Pull Request', System.getenv('ghprbPullLink')
-      } else {
-        value 'Git Commit ID', BuildParams.gitRevision
-        link 'Source', "https://github.com/elastic/elasticsearch/tree/${BuildParams.gitRevision}"
-      }
-    } else if (buildKiteUrl) { //Buildkite-specific build scan metadata
-      // Disable async upload in CI to ensure scan upload completes before CI agent is terminated
-      uploadInBackground = false
-
-      def branch = System.getenv('BUILDKITE_PULL_REQUEST_BASE_BRANCH') ?: System.getenv('BUILDKITE_BRANCH')
-      def repoMatcher = System.getenv('BUILDKITE_REPO') =~ /(https:\/\/github\.com\/|git@github\.com:)(\S+)\.git/
-      def repository = repoMatcher.matches() ? repoMatcher.group(2) : "<unknown>"
-      def jobLabel = System.getenv('BUILDKITE_LABEL') ?: ''
-      def jobName = safeName(jobLabel)
-
-      tag 'CI'
-      link 'CI Build', "${buildKiteUrl}#${System.getenv('BUILDKITE_JOB_ID')}"
-      value 'Job Number', System.getenv('BUILDKITE_BUILD_NUMBER')
-      value 'Build ID', System.getenv('BUILDKITE_BUILD_ID')
-      value 'Job ID', System.getenv('BUILDKITE_JOB_ID')
-
-      value 'Pipeline', System.getenv('BUILDKITE_PIPELINE_SLUG')
-      tag System.getenv('BUILDKITE_PIPELINE_SLUG')
-
-      value 'Job Name', jobName
-      tag jobName
-      if (jobLabel.contains("/")) {
-        jobLabel.split("/").collect {safeName(it) }.each {matrix ->
-          tag matrix
+        System.getenv().getOrDefault('NODE_LABELS', '').split(' ').each {
+          value 'Jenkins Worker Label', it
         }
-      }
 
-      def uptime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000;
-      def metricsStartTime = LocalDateTime.now().minusSeconds(uptime.longValue()).minusMinutes(15).toString()
-      def metricsEndTime = LocalDateTime.now().plusMinutes(15).toString()
+        // Add SCM information
+        def isPrBuild = System.getenv('ROOT_BUILD_CAUSE_GHPRBCAUSE') != null
+        if (isPrBuild) {
+          value 'Git Commit ID', System.getenv('ghprbActualCommit')
+          tag "pr/${System.getenv('ghprbPullId')}"
+          tag 'pull-request'
+          link 'Source', "https://github.com/elastic/elasticsearch/tree/${System.getenv('ghprbActualCommit')}"
+          link 'Pull Request', System.getenv('ghprbPullLink')
+        } else {
+          value 'Git Commit ID', BuildParams.gitRevision
+          link 'Source', "https://github.com/elastic/elasticsearch/tree/${BuildParams.gitRevision}"
+        }
+      } else if (buildKiteUrl) { //Buildkite-specific build scan metadata
+        // Disable async upload in CI to ensure scan upload completes before CI agent is terminated
+        uploadInBackground = false
 
-      link 'Agent Metrics', "https://es-buildkite-agents.elastic.dev/app/metrics/detail/host/${System.getenv('BUILDKITE_AGENT_NAME')}?_a=(time:(from:%27${metricsStartTime}Z%27,interval:%3E%3D1m,to:%27${metricsEndTime}Z%27))"
-      link 'Agent Logs', "https://es-buildkite-agents.elastic.dev/app/logs/stream?logFilter=(filters:!(),query:(language:kuery,query:%27host.name:%20${System.getenv('BUILDKITE_AGENT_NAME')}%27),timeRange:(from:%27${metricsStartTime}Z%27,to:%27${metricsEndTime}Z%27))"
+        def branch = System.getenv('BUILDKITE_PULL_REQUEST_BASE_BRANCH') ?: System.getenv('BUILDKITE_BRANCH')
+        def repoMatcher = System.getenv('BUILDKITE_REPO') =~ /(https:\/\/github\.com\/|git@github\.com:)(\S+)\.git/
+        def repository = repoMatcher.matches() ? repoMatcher.group(2) : "<unknown>"
+        def jobLabel = System.getenv('BUILDKITE_LABEL') ?: ''
+        def jobName = safeName(jobLabel)
 
-      if (branch) {
-        tag branch
-        value 'Git Branch', branch
-      }
+        tag 'CI'
+        link 'CI Build', "${buildKiteUrl}#${System.getenv('BUILDKITE_JOB_ID')}"
+        value 'Job Number', System.getenv('BUILDKITE_BUILD_NUMBER')
+        value 'Build ID', System.getenv('BUILDKITE_BUILD_ID')
+        value 'Job ID', System.getenv('BUILDKITE_JOB_ID')
 
-      // Add SCM information
-      def prId = System.getenv('BUILDKITE_PULL_REQUEST')
-      if (prId != 'false') {
-        def prBaseUrl = (System.getenv('BUILDKITE_PULL_REQUEST_REPO') - ".git").replaceFirst("git://", "https://")
-        value 'Git Commit ID', System.getenv('BUILDKITE_COMMIT')
-        tag "pr/${prId}"
-        tag 'pull-request'
-        link 'Source', "${prBaseUrl}/tree/${System.getenv('BUILDKITE_COMMIT')}"
-        link 'Pull Request', "https://github.com/${repository}/pull/${prId}"
-      } else {
-        value 'Git Commit ID', BuildParams.gitRevision
-        link 'Source', "https://github.com/${repository}/tree/${BuildParams.gitRevision}"
-      }
+        value 'Pipeline', System.getenv('BUILDKITE_PIPELINE_SLUG')
+        tag System.getenv('BUILDKITE_PIPELINE_SLUG')
 
-      buildFinished { result ->
-
-        buildScanPublished { scan ->
-          // Attach build scan link as build metadata
-          // See: https://buildkite.com/docs/pipelines/build-meta-data
-          new ProcessBuilder('buildkite-agent', 'meta-data', 'set', "build-scan-${System.getenv('BUILDKITE_JOB_ID')}", "${scan.buildScanUri}")
-            .start()
-            .waitFor()
-
-          // Add a build annotation
-          // See: https://buildkite.com/docs/agent/v3/cli-annotate
-          def body = """<div class="mb3"><span class="p1 border rounded">${System.getenv('BUILDKITE_LABEL')}</span> :gradle: ${result.failure ? 'failed' : 'successful'} build: <a href="${scan.buildScanUri}"><code>gradle ${gradle.startParameter.taskNames.join(' ')}</code></a></div>"""
-          def process = [
-            'buildkite-agent',
-            'annotate',
-            '--context',
-            result.failure ? 'gradle-build-scans-failed' : 'gradle-build-scans',
-            '--append',
-            '--style',
-            result.failure ? 'error' : 'info'
-          ].execute()
-          process.withWriter { it.write(body) } // passing the body in as an argument has issues on Windows, so let's use stdin of the process instead
-          process.waitFor()
+        value 'Job Name', jobName
+        tag jobName
+        if (jobLabel.contains("/")) {
+          jobLabel.split("/").collect { safeName(it) }.each { matrix ->
+            tag matrix
+          }
         }
+
+        def uptime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000;
+        def metricsStartTime = LocalDateTime.now().minusSeconds(uptime.longValue()).minusMinutes(15).toString()
+        def metricsEndTime = LocalDateTime.now().plusMinutes(15).toString()
+
+        link 'Agent Metrics',
+          "https://es-buildkite-agents.elastic.dev/app/metrics/detail/host/${System.getenv('BUILDKITE_AGENT_NAME')}?_a=(time:(from:%27${metricsStartTime}Z%27,interval:%3E%3D1m,to:%27${metricsEndTime}Z%27))"
+        link 'Agent Logs',
+          "https://es-buildkite-agents.elastic.dev/app/logs/stream?logFilter=(filters:!(),query:(language:kuery,query:%27host.name:%20${System.getenv('BUILDKITE_AGENT_NAME')}%27),timeRange:(from:%27${metricsStartTime}Z%27,to:%27${metricsEndTime}Z%27))"
+
+        if (branch) {
+          tag branch
+          value 'Git Branch', branch
+        }
+
+        // Add SCM information
+        def prId = System.getenv('BUILDKITE_PULL_REQUEST')
+        if (prId != 'false') {
+          def prBaseUrl = (System.getenv('BUILDKITE_PULL_REQUEST_REPO') - ".git").replaceFirst("git://", "https://")
+          value 'Git Commit ID', System.getenv('BUILDKITE_COMMIT')
+          tag "pr/${prId}"
+          tag 'pull-request'
+          link 'Source', "${prBaseUrl}/tree/${System.getenv('BUILDKITE_COMMIT')}"
+          link 'Pull Request', "https://github.com/${repository}/pull/${prId}"
+        } else {
+          value 'Git Commit ID', BuildParams.gitRevision
+          link 'Source', "https://github.com/${repository}/tree/${BuildParams.gitRevision}"
+        }
+
+        buildFinished { result ->
+
+          buildScanPublished { scan
+            ->
+            // Attach build scan link as build metadata
+            // See: https://buildkite.com/docs/pipelines/build-meta-data
+            new ProcessBuilder('buildkite-agent', 'meta-data', 'set', "build-scan-${System.getenv('BUILDKITE_JOB_ID')}", "${scan.buildScanUri}")
+              .start()
+              .waitFor()
+
+            // Add a build annotation
+            // See: https://buildkite.com/docs/agent/v3/cli-annotate
+            def body = """<div class="mb3"><span class="p1 border rounded">${System.getenv('BUILDKITE_LABEL')}</span> :gradle: ${result.failures ? 'failed' : 'successful'} build: <a href="${scan.buildScanUri}"><code>gradle ${gradle.startParameter.taskNames.join(' ')}</code></a></div>"""
+            def process = [
+              'buildkite-agent',
+              'annotate',
+              '--context',
+              result.failures ? 'gradle-build-scans-failed' : 'gradle-build-scans',
+              '--append',
+              '--style',
+              result.failures ? 'error' : 'info'
+            ].execute()
+            process.withWriter { it.write(body) }
+            // passing the body in as an argument has issues on Windows, so let's use stdin of the process instead
+            process.waitFor()
+          }
+        }
+      } else {
+        tag 'LOCAL'
       }
-    } else {
-      tag 'LOCAL'
     }
   }
 }

+ 1 - 1
gradle/build.versions.toml

@@ -17,7 +17,7 @@ commons-codec = "commons-codec:commons-codec:1.11"
 commmons-io = "commons-io:commons-io:2.2"
 docker-compose = "com.avast.gradle:gradle-docker-compose-plugin:0.17.5"
 forbiddenApis = "de.thetaphi:forbiddenapis:3.6"
-gradle-enterprise = "com.gradle:gradle-enterprise-gradle-plugin:3.16.2"
+gradle-enterprise = "com.gradle:develocity-gradle-plugin:3.17.4"
 hamcrest = "org.hamcrest:hamcrest:2.1"
 httpcore = "org.apache.httpcomponents:httpcore:4.4.12"
 httpclient = "org.apache.httpcomponents:httpclient:4.5.14"

+ 3 - 3
gradle/verification-metadata.xml

@@ -741,9 +741,9 @@
             <sha256 value="48234cd74e35d91a31a683820a35b5b6d11b55527f32a5b162c6757408b95d7a" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="com.gradle" name="gradle-enterprise-gradle-plugin" version="3.16.2">
-         <artifact name="gradle-enterprise-gradle-plugin-3.16.2.jar">
-            <sha256 value="e06ca9b1bf0fef710dc74ec969e5c0b4553b92a46224326165ceac0e5c37e0d3" origin="Generated by Gradle"/>
+      <component group="com.gradle" name="develocity-gradle-plugin" version="3.17.4">
+         <artifact name="develocity-gradle-plugin-3.17.4.jar">
+            <sha256 value="e2b3f8a191b0b401b75c2c4542d3d1719814a4212e6920fae4f2f940678bfd99" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="com.h2database" name="h2" version="1.4.197">

+ 1 - 1
plugins/examples/settings.gradle

@@ -7,7 +7,7 @@
  */
 
 plugins {
-  id "com.gradle.enterprise" version "3.16.2"
+  id "com.gradle.develocity" version "3.17.4"
 }
 
 // Include all subdirectories as example projects

+ 1 - 1
settings.gradle

@@ -17,7 +17,7 @@ pluginManagement {
 }
 
 plugins {
-  id "com.gradle.enterprise" version "3.16.2"
+  id "com.gradle.develocity" version "3.17.4"
   id 'elasticsearch.java-toolchain'
 }