A pipeline should be decoupled from artifact content
Note – this pattern was previously known as Binary Interface
In a Continuous Delivery pipeline, a simple Commit stage implementation may equate an application artifact with the compiled artifact(s) e.g. a JAR or a WAR:
This approach may suffice for a single application pipeline, but the coupling between start/stop behaviour and artifact file type means that details of java -jar
, $CATALINA_HOME/bin/startup.sh
, etc. seep into the pipeline start/stop stages and Operations documentation for manually starting/stopping artifacts. This becomes more of an issue when a pipeline manages multiple applications comprised of different web server technologies, different build tools, and/or different programming languages:
Each new artifact type introduced into the pipeline requires a notable increase in complexity, as conditional behaviour must be incorporated into different pipeline stages and Operations must retain knowledge of multiple start/stop methods. This threatens the Continuous Delivery principle of Repeatable Reliable Process and is a significant barrier to pipeline scalability.
The solution is to introduce a Artifact Container as the output of the Commit Stage, so that artifacts appear identical to the pipeline:
The advantage of this strategy is that it minimises the amount of application-specific knowledge that can leak into the pipeline, empowering development teams to use whatever tools they deem necessary regardless of release management. A change in web server, build tool, or programming language should not necessitate a new pipeline version.
Leave a Reply