-
Notifications
You must be signed in to change notification settings - Fork 329
Move Docker build definitions to project repositories #82
Comments
@adriancole I'd appreciate your thoughts on this. Also: who else should be involved? |
It seems we should trim the weeds around this problem space, so it is less conflated with known difficulty. For this reason, I'm +1 on migrating to dockerhub before doints this. We can then re-summarize the desc. Some other options I thought about while reading (not well thought through)
|
Thanks for the input!
|
wrt "monolithic release" I think this is just a challenge when we publish
|
Alright, let's do Docker Hub first. I think it's straightforward, I'll start work on it and open up things for discussion if I come to non-trivial trade-offs. |
Problem
Currently all
Dockerfile
s live in this repository for all OpenZipkin projects, and all Docker images are released together. SeeRELEASE.md@71b4c251
for the current release process. This enforced synchronization sets bad expectations for rarely maintained projects (what do you mean out of date? the image is two hours old), and also potentially delays releases of more active projects. The current setup is also surprising,Dockerfile
s are expected to live in the same repository as the project itself.Possible approaches
Approach 1: in-repo
Dockerfile
s and files used by them (for example inADD
commands) to the respective repository of each projectDockerfile
from the new locationDockerfile
s to separate repos and prepared for the next steps.release.sh@d1e38a5580
to each projectPro:
Dockerfile
in the project repository, as expectedCon: Extra complexity in Travis config; no way to tell at a glance whether a Travis build is a normal build or a Docker build. This goes away if we completely get rid of
release.sh
, letting us remove Travis from the Docker build pipeline.Approach 2: mini repos
$PROJECT-docker
Dockerfile
from the new positionDockerfile
s to separate repos and prepared for the next steps.release.sh@d1e38a5580
to each projectPro: low complexity, clear separation of Travis jobs
Con:
Dockerfile
in separate repository (may be a pro, depending on where you sit); lots of repositories (may be irrelevant)Follow-up
Process
Once this is done, the release of new Docker images very clearly becomes the responsibility of the maintainers of each project. This is a good thing, but we all need to be clear and on board with this change. Versioning of images becomes a question: how do we track what versions are compatible with what other versions, if we track it at all? Is the version of the image the version of Zipkin always, sometimes, never? How do we show a breaking change in an image that comes without a new release of Zipkin? Personally I think we can put off coming up with strict answers to these questions, but let's keep them in mind going forward, and keep open the option of sitting down to find definite answers if it becomes necessary.
Tech, long term: goodbye to
release.sh
In the long term, I want to get rid of
release.sh
. It's custom complexity that will always mean extra maintenance. Here's the functionality we need to drop or re-implement using standard tools to make it go away, and my current best idea for doing so. (Will turn this into a new issue once we decide our course)zipkin-base
zipkin-base
in the rest of the imagesTech, short term: DRY
Exploding
release.sh
to multiple repositories introduces a lot of code repetition, which will lead to tiny differences in each project (I'm working on a half-serious theory of evolutionary release scripts), badness all around. Ways to mitigate this badness:common.sh
indocker-zipkin
that each build process downloads at run-time). This is a different kind of complexity, let's see if it's worth it when we get there.I intend to put a limited amount of effort into this and work on getting rid of
release.sh
completely instead.The text was updated successfully, but these errors were encountered: