IBM SmartCloud Enterprise is a cloud service owned and operated by IBM. IBM has numerous cloud computing environments and initiatives at its facilities around the world, but development and test really represents its first commercial service with a combination of the key attributes that you'd expect from the cloud — multi-tenancy, self-service, usage-based pricing, and ready-to-use virtualized software images.
The authors of this article are part of the IBM SmartCloud Enterprise team and apply continuous integration by leveraging cloud services in order to help developers and testers improve the efficiency and quality of their software.
In the software development process it is usually more effective for developers to have their own environment to write code and debug problems. Separate development environments usually cost more when the code is deployed in a shared integrations test environments. Doing this helps developers find the issues as early as possible, but there are many challenges that make it difficult to establish and maintain these environments.
First the environments have become more and more complex. In our project, we have more than 12 components installed and deployed in more than 10 servers even for the simplest configurations. Establishing the entire environment takes quite a bit of time and resources, and developers usually can't get the environments created in time to meet their deadlines.
Second, there are more and more versions that need to be maintained and developed. Developers need to implement new functions based on the latest code level along with the latest environments, as well as to support and fix defects based on the previous code levels along with the previous environments. The testers also need different environments to execute test cases for scheduled plan and emergency support for clients. It is difficult to maintain all the different environments for different versions and deliver them to a large number of developers.
Finally there is a cost to maintain a large number of images. As the number of environments and versions increase there is a similar increase in costs associated with physical environment. In addition to the increase in personnel, these environments require additional space, hardware, power, and cooling.
Development environments can be very expensive when you need to provide the entire environment for each developer. It is better to divide the components into shared and exclusive ones. Some components, (such as database, data stage components) can be shared by developers working on some versions. Other components, (such as databases, WebSphere® server, web server, TAMeb Tivoli® Access Manager for e-Business) can't be shared. To increase the server utilization, and considering the low access flow, it is better to put multiple components onto one server (combine database server, WebSphere server, web server in one machine, and TAMeb in another machine). This can decrease the costs significantly.
IBM SmartCloud Enterprise provides the capability to provision multiple servers, such as Linux 32-bit and 64-bit, WebSphere, and DB server. Based on the servers requested from the IBM SmartCloud Enterprise, the components are installed and the build is deployed by automation scripts.
After the environment is built, it is verified using a build verification test and then established as new image using the Create image function provided by IBM SmartCloud Enterprise. IBM SmartCloud Enterprise provides the capability to provision servers based on public image. It also provides the capability to create new private images based on provisioned servers with customization.
When there is need to provide developers their own environment, you can make use of IBM SmartCloud Enterprise to provision new servers based on the private images. This takes a few minutes to satisfy the requirement of providing environment with specified version. Then developers can deploy new code changes and verify the result efficiently.
Test teams usually require the entire environment to execute test cases which can also be handled similarly to how developers provision environments as just mentioned.
When there is no need for some servers, you can release the resources by making use of the Delete function provided by IBM SmartCloud Enterprise.
In addition, there are a number of other ways this can improve the efficiency of the actual development process:
- Create an environment with the middleware and configuration but without the build as private image and maintain it as template.
- Create a private image for daily build so that it provides the latest environment.
Figure 1 describes the environment process.
Figure 1. The environment process
Figure 2 shows the local environment (owned by developers themselves) refinement.
Figure 2. The local environment
Figure 3 shows the life cycle of an environment.
Figure 3. Environment life cycle
Based on the services provided by IBM SmartCloud Enterprise, once continuous integration is implemented, it can greatly improve the work efficiency of developers and testers. The benefits can be realized in the following areas.
- Complex environments are refined to a simplified environment which makes it more feasible to let developers have their own environments.
- Code quality is improved and the defect rates are lower. With the environment immediately available, developers don't need to waste time waiting for resources and are free to test the code before the code is checked in and find the root cause after the defect.
- Developers can immediately share code changes. Developers can capture a private image that includes his/her source code for a new feature and others can provision an instance based on the private image that contains the code changes.
- Specific versions of environments can be quickly provided to developers and testers. Previously it took some time to get specific versions of environments ready, especially for previous versions. Now it takes just a few minutes.
- There's a reduction in human resources. Preparing environments can be tedious and usually takes people considerable time. Now they are released from routine work and can be focus on valuable task.
- There's also a reduction in required hardware resources. The servers can be released when there is no need for them.
Let's look at two examples.
Assume that we have three major roles in a team: 1 builder and 40 developers and testers.
The following process is builder's daily work:
- Request a build.
- If build request fails, check the build log in Rational Team Concert to determine if it is a build error or compile error which requires a large amount of time.
- Deploy the build. Install packages, configure, and restart server to make changes available.
- Perform the Build Verification Test (BVT).
- If the BVT report shows something is wrong, builder will check the log and try to fix the problem or contact a developer to do it.
Next, when the BVT is complete, it's time for developers and testers to deploy the build on their local environment. The tasks are the same as the builder and incur the same cost and times as the builder. After this is complete they can start their work.
First, from the description, you can see that the developer and tester perform the same tasks as the builder, therefore they must have a local environment installed. The local environment takes a considerable amount of time to install which requires extra work for developers and testers.
Second, the performance of developers and tests' local machine is typically slower than the server that the builder deploys the build to. Therefore, it is inaccurate to estimate the cost for deploying a build for developers and testers to be the same as the cost for a builder. The actual time will be more than the builder's cost.
Third, all the developers and testers must deploy the build which increases the potential for failures that will require additional time to fix errors.
Developers and testers can not start their own work until they finish these additional tasks. The performance of developers and testers will be impacted and the additional cost in time and resource is very large. Additionally, if a developer implements a new feature, he cannot share his environment with others. So if other developers want to do a unit test or develop based on this new feature, they must deploy a new build which takes more time.
When using IBM SmartCloud Enterprise, the result can be quite different.
First the tasks of builder are exactly the same as before; however, step 2 and step 4 can be completed on an instance of IBM SmartCloud Enterprise. And the builder should complete one additional task that doesn't take much time: Capture the instance as a private image and share the image with developers and testers (Figure 4).
Figure 4. Create a private image from the daily build instance
It seems that a time cost for the builder is added by this step, but the tasks for developers and testers is simplified by being able to provision an instance from the private image shared by the builder as shown in Figure 5.
Figure 5. Adding an instance from the private image
After this is completed developers and testers can start their own work. In this situation, developers and testers don't need a local environment installed, saving the cost of installing local environment. Also, they don't need to deploy the build, so no performance-reduction or error-fixing occurs and there is a very short time cost for provisioning the instance.
Next, if developers want to share their new feature with others, they should do the same thing as the builder: Capture the instance as a private image and share the image. Then, if others want to perform work based on the new feature, they just need to provision an instance from the new image (again, Figure 5); they do not need to deploy a new build which costs more time.
It can be clearly seen that using IBM SmartCloud Enterprise benefits developers and testers. They only need a short time to provision an instance and then can start their own work. So the team's performance improves and productivity increases.
In the second example, let's assume that a team has a project with multiple release version builds, for example, DailyBuild20110507_ R 1.4 and DailyBuild20110507_R2.0.
Developers and testers need to work on both builds simultaneously. Using traditional methods they need to maintain multiple local environments for the builds, which increases the time and resource cost as Example 1 illustrated.
Furthermore, if a new member joins the team, he needs time to learn how to maintain the local environments. All these issues slow the progress of the project.
Using IBM SmartCloud Enterprise, things are much different. All maintenance costs are eliminated, even for new members. With IBM SmartCloud Enterprise, the builder captures images for all daily builds and shares them. If a developer or a tester needs to work on a specific build, the only thing they need to do is to add an instance from the specific image. For example, DailyBuild20110507_ R 1.4 (as shown in Figure 6).
Figure 6. Adding an instance from a specific build
Additionally, after finishing the work, the developer or tester can release the instance if it is no longer needed. Therefore, the maintenance cost is eliminated and the project shows improvements in efficiency and costs.
Next steps and recommendations
Continuous integration has many benefits. To realize them, you need to provide environments for developers and testers very quickly. Due to the complexity of environments, you need to better refine the environment you plan to provide to developers to let them execute integration as early as possible.
It is more efficient to decouple the environment into shared and exclusive resources. If you have 30 developers and can decrease the number of servers from 3 to 2, this saves environment resources which helps lower the costs.
In addition, more components mean more potential issues. Reducing the number of components in the environment helps developers focus on the field they specialize in, considering the different middleware components and level of complexity supports continuous integration.
For more on how to perform tasks in the IBM Cloud, visit these resources:
- Up and download files from a Windows instance.
- Install IIS web server on Windows 2008 R2.
- Create an IBM Cloud instance with the Linux command line.
- Create an IBM Cloud instance with the Windows command line.
- Extend your corporate network with the IBM Cloud.
- High availability apps in the IBM Cloud.
- Parameterize cloud images for custom instances on the fly.
- Windows-targeted approaches to IBM Cloud provisioning.
- Deploy products using rapid deployment service.
- Integrate your authentication policy using a proxy.
- Configure the Linux Logical Volume Manager.
- Deploy a complex topology using a deployment utility tool.
- Provision and configure an instance that spans a public and private VLAN.
- Secure IBM Cloud access for Android devices.
- Recover data in IBM SmartCloud Enterprise.
- Secure virtual machine instances in the cloud.
- In the developerWorks cloud developer resources, discover and share knowledge and experience of application and services developers building their projects for cloud deployment.
- Find out how to access IBM SmartCloud Enterprise.
Get products and technologies
- See the product images available for IBM SmartCloud Enterprise.
- Join a cloud computing group on developerWorks.
- Read all the great cloud blogs on developerWorks.
- Join the developerWorks community, a professional network and unified set of community tools for connecting, sharing, and collaborating.