June 15, 2017

Version Control and Artifact Storage: Two Pieces of the Same Puzzle

Version Control

Version control tools are likely some of the strongest productivity multipliers for engineering teams. Easily allowing teams of engineers to collaborate, track, and understand changes to a code base is critical for improving software quality.

Two Pieces of the Same Puzzle

Real world requirements for software grow more complex with each passing year. This additional complexity leads to larger and more complex code bases, which in turn requires specialized tools to ensure teams can safely enhance, update, and collaborate on software.

Having the ability to understand how, why, and when a piece of code changed is critical for developing a deep understanding of performance regressions, security issues, and bugs. The suite of tools offered by Perforce provide many features to help users accomplish these (and many more!) tasks safely, easily, and efficiently regardless of the size of team or code base. An accretive byproduct of this enhanced visibility is increased confidence in a team's ability to quickly iterate on software as business requirements change. This allows teams to be more effective, while enhancing their ability to track changes in software as it quickly evolves.

This increase in velocity of the software life cycle has many benefits; releasing software early and often allows a more streamlined workflow that can include customer feedback or adjustments based on changing business goals.

These changes to the software life cycle, starting at version control, have had ripple effects on other tools used in a software engineer's daily workflow. Continuous integration, static analysis, artifact storage, and deployment tools are undergoing a shift as they become more widely used and depended upon for producing software. Engineers are now relying on the integration of version control with many other tools to help increase their velocity while maintaining (or enhancing!) software quality.

An artifact repository plays a critical role in these new, fast-paced workflows and dovetails perfectly with the visibility and collaborative features that engineers have come to expect from version control tools. The packagecloud.io binary repository and artifact storage platform plays a crucial role in facilitating the visibility, deployment, and management of build artifacts by allowing engineers to quickly upload, control access to, collaborate on, and deploy artifacts from a variety of programming languages and operating environments.

Putting It All Together

A workflow that teams of Java developers can use to harness the power of the Perforce Helix Versioning Engine, continuous integration, and packagecloud.io's Maven artifact storage takes the following form:

  •   Java code is modified by the team on their workstations and reviewed.
  •   Code is submitted to the Perforce Helix server.
  •   The continuous integration (CI) service (e.g., Jenkins) polls the Helix server for updated code to build, perhaps with the Perforce Jenkins plugin.
  •   The code is built and tested by the CI service.
  •   Once the code has passed tests, a tag is added to the revision with a version string and submit to the Helix server.
  •   The build job continues by using Maven deploy to upload the Java JAR artifacts to the packagecloud.io service.
  •   The software is now ready to be rolled out to the compute infrastructure.


This example workflow provides some very useful benefits:

  • Tests are run as new code changes are made, so bugs can be caught early by automated tests.
  • The exact revision from which a new object will be built is marked with a tag. This allows a developer to easily compare changes between two builds to assist in locating performance regressions or bugs.
  • A build artifact with a matching version string is produced. This allows a developer to link build artifacts back to source code from which they were generated.
  • The build artifacts are stored in an artifact storage service (e.g., packagecloud.io) with Maven. This allows for easy deployment of new software to compute infrastructure and also allows for easy rollback: a developer can simply change the version number they wish to deploy to rollback to a previous build artifact.

This example workflow allows teams to increase the velocity of their software development life cycle while enhancing quality and visibility.

The ability to track the evolution of changes to software is critical for building faster, and more efficient software. Likewise, the ability to easily push updates, roll back a deployment, or synchronize internal infrastructure and software services, is critical for maintaining a healthy rapid release software life cycle.


Joe Damato