Figure 11.16. Jenkins proactively monitors your build agents
11.6. Cloud Computing
Cloud computing involves using hardware resources on the Internet as an extension and/or replacement
of your local computing architecture. Cloud computing is expanding into many areas of the enterprise,
including email and document sharing (Gmail and Google Apps are particularly well-known examples,
but there are many others), off-site data storage (such as Amazon S3), as well as more technical services
such as source code repositories (such as GitHub, Bitbucket, etc.) and many others.
Of course externalized hardware architecture solutions have been around for a long time. The main thing
that distinguishes the cloud computing with more traditional services is the speed and flexibility with
which a service can be brought up, and brought down when it is no longer needed. In a cloud computing
environment, a new machine can be running and available within seconds.
However, cloud computing in the context of Continuous Integration is not always as simple as it might
seem. For any cloud-based approach to work, some of your internal resources may need to be available
to the outside world. This can include opening access to your version control system, your test databases,
and to any other resources that your builds and tests require. All these aspects need to be considered
carefully when choosing a cloud-based CI architecture, and may limit your options if certain resources
simply cannot be accessed from the Internet. Nevertheless, cloud-based CI has the potential of providing
huge benefits when it comes to scalability.
In the following sections, we will look at how to use the Amazon EC2 cloud computing services to set
up a cloud-based build farm.
11.6.1. Using Amazon EC2
In addition to selling books, Amazon is one of the more well-known providers of cloud computing
services. If you are willing to pay for the service, Amazon can provide you build machines that can be
either used permanently as part of your build farm, or brought online as required when your existing
build machines become overloaded. This is an excellent and reasonably cost-efficient way to absorb
extra build load on an as-needed basis, and without the headache of extra physical machines to maintain.