There's currently a check in `TransportService.HandshakeResponse.isIncompatibleBuild` to stop ES with the same Version but different build hashes from joining a cluster. This needs to be relaxed for cloud deployments where Version is not applicable
server/src/main/java/org/elasticsearch/transport/TransportService.java
Releasable unregisterChildNode,
        TransportResponseHandler<T> handler,
        String action,
        TransportRequest childRequest,
        Transport.Connection childConnection,
        TaskManager taskManager
    ) implements TransportResponseHandler<T> {
        @Override
        public void handleResponse(T response) {
            unregisterChildNode.close();
            handler.handleResponse(response);
        }
        @Override
        public void handleException(TransportException exp) {
            assert childRequest.getParentTask().isSet();
            taskManager.cancelChildRemote(childRequest.getParentTask(), childRequest.getRequestId(), childConnection, exp.toString());
            unregisterChildNode.close();
            handler.handleException(exp);
        }
        @Override
        public String executor() {
            return handler.executor();
        }
        @Override
        public T read(StreamInput in) throws IOException {
            return handler.read(in);
        }
    }
}