Adds the ability to specify startup options

So we can inject --host_jvm_args=-Dbazel.DigestFunction=... to test
remote caching/execution.

Change-Id: I2cf3500c4d98f42c4112a4a9c66c85e2bfdd2f6a
diff --git a/docs/owner.md b/docs/owner.md
index 736631f..3d55a00 100644
--- a/docs/owner.md
+++ b/docs/owner.md
@@ -206,6 +206,7 @@
 * `build_opts`: list of options to add to the bazelrc as `build`
  options, note that they impact testing too.
 * `test_opts`: list of options to add to the bazelrc as `test` options.
+* `startup_opts`: list of options to add to the bazelrc as `startup` options.
 
 
 ## Bazel bootstrap
diff --git a/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy b/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy
index 89467d2..8449a76 100644
--- a/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy
+++ b/jenkins/lib/src/build/bazel/ci/BazelUtils.groovy
@@ -90,6 +90,7 @@
   // Write a RC file to consume by the other step
   def writeRc(build_opts = [],
               test_opts = [],
+              startup_opts = [],
               extra_bazelrc = "") {
     def rc_file_content = [
       "common --color=yes",
@@ -98,6 +99,7 @@
     ]
     rc_file_content.addAll(build_opts.collect { "build ${it}" })
     rc_file_content.addAll(test_opts.collect { "test ${it}" })
+    rc_file_content.addAll(startup_opts.collect { "startup ${it}" })
     // Store the BEP events on a json file.
     // TODO(dmarting): We should archive it and generate a good HTML report instead of
     // the hard to read jenkins dashboard.
diff --git a/jenkins/lib/vars/bazelCiConfiguredJob.groovy b/jenkins/lib/vars/bazelCiConfiguredJob.groovy
index bf26d98..98be1df 100644
--- a/jenkins/lib/vars/bazelCiConfiguredJob.groovy
+++ b/jenkins/lib/vars/bazelCiConfiguredJob.groovy
@@ -49,6 +49,7 @@
                           configuration: params.get("configure", []),
                           build_opts: params.get("build_opts", []),
                           test_opts: params.get("test_opts", []),
+                          startup_opts: params.get("startup_opts", []),
                           bazel_version: config.bazel_version + conf.get("variation", ""),
                           extra_bazelrc: config.extra_bazelrc,
                           build_tag_filters: params.get("build_tag_filters", []),
diff --git a/jenkins/lib/vars/bazelCiJob.groovy b/jenkins/lib/vars/bazelCiJob.groovy
index b88d392..2b620df 100644
--- a/jenkins/lib/vars/bazelCiJob.groovy
+++ b/jenkins/lib/vars/bazelCiJob.groovy
@@ -41,6 +41,7 @@
   config["configuration"] = config.get("configuration", [])
   config["build_opts"] = config.get("build_opts", [])
   config["test_opts"] = config.get("test_opts", [])
+  config["startup_opts"] = config.get("startup_opts", [])
   config["extra_bazelrc"] = config.get("extra_bazelrc", "")
   config["build_tag_filters"] = config.get("build_tag_filters", [])
   config["test_tag_filters"] = config.get("test_tag_filters", [])
@@ -86,6 +87,7 @@
           bazelJob(binary: bazel,
                    build_opts: build_options,
                    test_opts: test_options,
+                   startup_opts: config.startup_opts,
                    extra_bazelrc: extrarc,
                    targets: config.targets,
                    tests: config.tests,
diff --git a/jenkins/lib/vars/bazelJob.groovy b/jenkins/lib/vars/bazelJob.groovy
index ed24bcd..37d4343 100644
--- a/jenkins/lib/vars/bazelJob.groovy
+++ b/jenkins/lib/vars/bazelJob.groovy
@@ -35,6 +35,7 @@
   config["configuration"] = config.get("configuration", [])
   config["build_opts"] = config.get("build_opts", [])
   config["test_opts"] = config.get("test_opts", [])
+  config["startup_opts"] = config.get("startup_opts", [])
   config["extra_bazelrc"] = config.get("extra_bazelrc", "")
   config["stage_name"] = config.get("stage_name", "")
 
@@ -45,7 +46,7 @@
 
   // And now the various stage
   def stage_prefix = config.stage_name.isEmpty() ? "" : "[${config.stage_name}] "
-  utils.writeRc(config.build_opts, config.test_opts, config.extra_bazelrc)
+  utils.writeRc(config.build_opts, config.test_opts, config.startup_opts, config.extra_bazelrc)
   stage("${stage_prefix}Bazel version") {
     utils.bazelCommand("version")
   }