Next Release Preview

Please make a pull request to describe any changes you wish to highlight in the next release of Spinnaker. These notes will be prepended to the release changelog.

Coming Soon in Release 1.35

Version 1.31 of Spinnaker introduced two features that were disabled by default:

echo: pipelineCache.filterFront50Pipelines

orca: front50.useTriggeredByEndpoint

Both of these features are now enabled by default.

Java 17

All Spinnaker services are now compiled by JDK 17, transpiling to Java 11 bytecode. Published images run JRE 17. In 1.36, compilation will switch to Java 17 bytecode, completing our migration to Java 17. Please continue to report issues by opening an issue in the spinnaker repository .

Note that JDK 17 enforces Strong Encapsulation . Evaluation of some SpEL expressions uses reflection that the JDK no longer permits by default, for example:

${ {"foo": "bar"}.toString() }

For this evaluation to succeed, add --add-opens=java.base/java.util=ALL-UNNAMED to JAVA_OPTS for orca and echo.

Spring Boot 2.7.18

As part of the continued effort to upgrade Spring Boot, Spinnaker 1.35.0 now uses Spring Boot 2.7.18, an upgrade from Spinnaker 1.34.0`s use of Spring Boot 2.6.15. Spring Boot 2.7 considers session data cached by Spring Boot 2.6 invalid. Therefore, users with cached sessions will be unable to log in until the invalid information is removed from the cache. Open browser windows to Spinnaker are unresponsive after the deployment until they’re reloaded. Executing:

$ redis-cli keys "spring:session*" | xargs redis-cli del

on Gate’s redis instance removes the cached session information.

Spring Boot 2.7 brings with it the following changes:

  • Groovy upgrade from 3.0.17 to 3.0.19
  • Replaces mysql connector coordinate from mysql:mysql-connector-java to com.mysql:mysql-connector-j with version 8.0.33.
  • Changes to Auto-configuration

RetrofitExceptionHandler Removed

https://github.com/spinnaker/orca/pull/4716 removed RetrofitExceptionHandler from orca. There’s an ongoing effort to upgrade to retrofit2. One step along the way is to adjust error handling code based on RetrofitError (a retrofit1 class not available in retrofit2) to use SpinnakerServerException and its children, by using SpinnakerRetrofitErrorHandler . That’s been done in orca, so there isn’t any code left to throw RetrofitError exceptions. If your instance of Spinnaker has plugins or other code that still relies on RetrofitError, adjust it to use SpinnakerRetrofitErrorHandler by adding, e.g.:

.setErrorHandler(SpinnakerRetrofitErrorHandler.getInstance())

to the RestAdapter.Builder call, and change the corresponding exception handling. See here for an example.

Label Selector Support in Deploy Manifest Stages

https://github.com/spinnaker/clouddriver/pull/6220 adds support for label selectors in deploy manifest stages. For example:

"labelSelectors": {
  "selectors": [
    {
      "kind": "EQUALS",
      "key": "my-label-key",
      "values": [
        "my-value"
      ],
    }
  ]
}

See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ and KubernetesSelector for more. Multiple selectors combine with AND (i.e. must all be satisfied).

Note that kubectl replace doesn’t support label selectors, so KubernetesDeployManifestOperation throws an exception if a deploy manifest stage that specifies (non-empty) label selectors has a manifest with a strategy.spinnaker.io/replace: "true" annotation.

It’s possible that none of the manifests may satisfy the label selectors. In that case, a new pipeline configuration property named allowNothingSelected determines the behavior. If false (the default), KubernetesDeployManifestOperation throws an exception. If true, the operation succeeds even though nothing was deployed.

maxExpressionLength to set maximum expression length for SpEL evaluation

Spring Expression Lanuage (SpEL) has a default limit of 10,000 characters. Springframework provides the feature to configure the limit. This feature allows to configure the limit of characters for SpEL expressions.

Use this feature as given below:

# orca-local.yml
# echo-local.yml

expression:
  max-expression-length: <required limit>