Every development project needs version control management. While version control systems have been around for years, they have advanced to match changes in application development. And as applications shift from server-hosted to distributed apps, developers need a standard way to synchronize code changes among team members. A centralized code repository can help dev teams maintain application consistency.
Within an organization, developers interact with a version control system, such as Git or Mercurial, more than any other component in a dev ecosystem. Code repositories offer different tools, such as visualization of commits, as well as online source code reviews, access controls and merge systems. Additionally, teams working with AWS need a cloud code repository, such as GitHub, to maintain and store application code for version control.
Three common cloud code repository options -- AWS CodeCommit, Bitbucket and GitHub -- all provide central authoritative endpoints that enable developers to synchronize code changes. They also provide the same API for hosting code. So, when developers write code locally, it won't matter what system they push to because the developer experience will be exactly the same.
Here's a look at three popular cloud code repository choices for dev teams using AWS.
GitHub was one of the first online repository systems to visualize commits and merges. A commit is a single change to one branch of code, or version, of a repository. Developers can merge commits into another branch to create a new release or to incorporate team changes. GitHub provides an improved developer experience on its website, enabling teams to quickly see changes from a specific commit without having to download it.
GitHub provides other types of visualization specifically tuned for projects with several contributors, as is often the case with open source projects. For example, this graph shows the frequency of commits and the most active contributors to the Boto framework:
GitHub also provides a simple way to manage forks and merge requests that are also common in open source projects. When submitting to an open source project, a fork enables outside developers to review submitted code.
GitHub integrates seamlessly with unit-testing frameworks, like Travis CI, and enables online merging of pull requests when there are no conflicts.
Public repositories are free to host, which is why a majority of open source projects share code on GitHub. Students can also get free accounts, giving them unlimited access to private repositories, but only one person can commit code. GitHub also provides team pricing, which charges per developer, and enterprise options for teams that need extra security or want to host GitHub in an internal firewall.
When it started, Bitbucket supported both Mercurial and Git, enabling users to choose whatever version control system they wanted and host both options on Bitbucket. It even supported Git on a Mercurial-hosted repository. But developers eventually moved from Mercurial to Git, and Bitbucket lost some traction.
Bitbucket later focused on integrating enterprise development tools and security into a platform to protect sensitive code. The repository offers some collaboration tools, such as an online wiki and bug tracker for each project, built right into the platform. And it can be the single place for documentation, code and bug reports; Bitbucket enables teams to use one platform for all development tools.
Developers also can set up deployment keys -- specialized Secure Socket Shell keys that give read-only access to a machine that needs to access the repository to install certain software. For example, teams can use a deployment key to allow production servers or Elastic Compute Cloud (EC2) instances to access a private repository where the production app deploys.
Bitbucket targets enterprise teams, as evidenced by its pricing model. Bitbucket is free for teams with fewer than five developers, including unlimited private repositories. Adding in Jira or a hosted version of software comes at a price, but small teams that just need a secure place to store code, bug reports and documentation could find it with Bitbucket.
AWS CodeCommit and CodeStar
AWS unveiled CodeCommit in 2016 as Amazon's version of a central endpoint to host Git repositories. When AWS CodeCommit first launched, it had very few features other than a simple endpoint and a way to browse code from different branches. AWS CodeCommit comes with a few features for integration with other Amazon services, such as enabling EC2 instances to access a cloud code repository and pulling code from a CodeCommit repository into AWS Elastic Beanstalk or AWS CodeBuild.
CodeCommit charges per repository. AWS does offer a free tier of service to get started, but there wasn't much reason to pay extra for a service that was essentially available for free elsewhere with a lot more functionality.
In 2017, Amazon released AWS CodeStar, a unifying service that enables developers to quickly set up new projects in AWS. Teams can use the service to provision a CodeCommit repository or set up AWS CodePipeline with AWS CodeBuild to automatically provision Elastic Beanstalk. This enables developers to push code to CodeCommit, where it can automatically test, build and deploy an application.
AWS CodeStar comes with several prebuilt templates for spinning up applications, which makes it a good tool for developers who are unfamiliar with AWS. It also lets developers build templates to start new projects according to Amazon's best practices.
Even without CodeStar, CodeCommit shows a lot of promise because of the ease of integration with other Amazon services. For example, AWS CodeBuild, Amazon's Docker-based build service, supports CodeCommit. And CodeCommit enables developers to securely provision EC2 instances to access the repository with read-only or write privileges. Teams that operate solely within the AWS ecosystem should look at the advantages of pushing code to CodeCommit.
Many repository options for version control
Each service offers similar features that fulfill the basic needs of a code repository -- the ability to easily share and deploy code. The Git version control system doesn't need to be the only repository endpoint. Developers could, for example, publish code to Bitbucket for the ease of development tools and also synchronize changes to CodeCommit for deployment to Amazon services. There are also ways to automatically synchronize code among services using commit hooks and trigger automated builds or custom notifications when things change.
There is no one right answer for all teams; developers can host code wherever is most appropriate. And the distributed nature of Git makes it easy to change at any time.
Native AWS management tools, including CodeStar, fit diverse needs
Management systems help control your AWS cloud
CodeStar helps dev teams build continuous integration and continuous deployment workloads