Closed giorgiosironi closed 6 years ago
I've got 2 main questions about the CD.
1) For the end-to-end testing, do you envision this being something declared completely in the source control of the micro-service? Like for example, bootstrapping services X, Y and Z with fixtures A, B, C. Also will this put micro-services in a position where they may be tightly coupled to other versions of components, or would there be a fixture matrix of compatible versions?
2) When artefacts are built, is the assumption that they will be delivered to GitHub or a package manager or somewhere else? (I know the exact destination may not be in the scope of this)
For the end-to-end testing, do you envision this being something declared completely in the source control of the micro-service?
See next answer for how to declare this, but in general in end-to-end scenarios a target platform with some defined infrastructure needs to be defined first (e.g. deploy on GKE or deploy on AWS). So there may be some out of band information in that environment that is not completely under the control of the microservice. Incidentally, this puts the result of a end-to-end test not purely in the hands of the microservice being tested but also in the state of the outside world.
Also will this put micro-services in a position where they may be tightly coupled to other versions of components, or would there be a fixture matrix of compatible versions?
It will depend a lot on downstream usage, but the bare minimum is testing the current master
branches work together. In addition to that and with compatibility and decoupling in mind, we could also test version 1.2.3
of service X works with 1.0.0
of Y and 1.0.0
of Z. This is inspired by our lowest
library testing mode but it's a different context, relying on the semantic versioning convention. Needs to trialed to see if it works in practice, and considering we will be on 0.x
versioning for a while.
When artefacts are built, is the assumption that they will be delivered to GitHub or a package manager or somewhere else? (I know the exact destination may not be in the scope of this)
So far it looks like we support at least container images to deliver a service wherever it is being deployed. These would be pushed to Docker hub for simplicity. If we support other kinds of deployments other artifacts would have to be produced and put somewhere public as well.
No objections from us to adopting Travis CI.
Travis CI is now in use and working well. We've recorded the decision here as an ADR in https://github.com/libero/community/pull/16 and https://github.com/libero/community/blob/develop/doc/adr/0002-continuously-delivery-travis-ci.md
Problem
Libero needs continuous feedback on pull requests and release candidates, in terms of:
The maintenance requirements are:
Suggestion
Provide Travis CI builds for all projects, including both code and infrastructure needed to test it.
Concerns
Other evaluated solutions (comparison table):