Thursday, December 22, 2016

Oracle cloud – code, deploy, test, destroy (and repeat)

Traditionally in old fashion environments it was hard to quickly build and test your code in any other way than on the system you developed the code on. Traditionally developers would develop code on a develop system, do the unit testing on this system and after that move the code to a test system. The next phase would be integration testing, user acceptance testing and production stage. Or any other form which you company adopted.

However, when developing code you do want to quickly deploy code, test the things you created, find the bugs and mistakes and repeat the process. Up until recent it was quite hard to build your code quickly and deploy it on a test system which only was used for this specific test and could be discarded afterwards.

Having the option to do so, quickly and often test without the burden of requesting a infrastructure team to prepare a new fresh test system is a big benefit for developers and ensures that the quality of code and the speed of development are increasing. The below image shows a more modern approach to DevOps and a more modern way of developing code.

DevOps Flow in the Oracle Cloud

Using an integrated environment
The above image outlines multiple streams for unit testing, integration testing and production deployments in a DevOps environment. When using such a model developers will be able to push code to a central version control system and state which version of the code has to be build (compiled) automatically, deployed on a fresh provisioned and environment and (automatically) tested.

This model only works in a highly automated cloud environment. To achieve this you will have to ensure that all components are driven by automated processes, fully self service, where DevOps developers can start a build process and the deployment of new environments and build code deployments. The solution needs to be a fully integrated environment where all nodes (deployed server builds) are fully stateless and code is pulled from the source repository.

Using an integrated environment in this manner will enable you do automatically build your code, deploy in on servers, and test it in an automatic manner. The same can be applied in exact the same manner for the integration testing and for the deployment to production phase. Making use of exactly the same routines, source code and by doing so ensuring the production state will be exactly what is tested without the riks of human errors.

At the same moment, the entire testing and deploying steps will only take a fraction of the time of what it might take when done manually.

Automated code building / build automation
The process of build automation in this DevOps based deployment cycle will take care of downloading a specific branch of the source repository tree and build it into a "product" that can be deployed on a node. Depending on the language you use to develop your code in, the way you automate other parts of the "stream" and other aspects you will have to select a certain build automation tool.

Hudson and Jenkins are currently popular build automation tools used for continuous integration. However, depending on your situation other tools might very well be applicable. As an example, you might want to use BuildBot or Team Foundation Server. When using the Oracle Developer Cloud Service you will be able to use a hosted version of Hudson

Deployment automation
When using the Oracle Cloud you will have the desire to ensure that the automatically build code will be deployed on one or multiple systems. In this case "systems" can refer to multiple type of Oracle Public Cloud Solutions. As an example, it can be a docker container in the Oracle Container Cloud Service, it can be an application server running on an Oracle Linux instance in the Oracle Compute Cloud service. However, it can very well be PL/SQL code deployed in a database in the Oracle Database Cloud Service.

Ensuring you "pack" all the different targets where the code needs to be deployed, the configuration of the individual nodes and all the configuration to bind them together. A growing number of tools and platforms are available to asist in this task, from complex solutions to the more easy to maintain and understand solutions like for example RunDeck.

Binding it all together
When you intend to build a solution like shown above and make use of the benefits of a fully automated end-to-end continues deployment and integration you will have to build a vision and direction and arrange the according tools in a DevOps tool Chain. When developing this vision and the underlying technology the biggest challenge is to ensure that everything can be integrated into one single fully automated deployment orchestration.

Oracle is supporting in this with a set of tooling within the Oracle Developer Cloud service and with a rich set of API driven services. However, to ensure a totally fitted deployment automation solution it is very likely you will select a number of tools that are not by default in the Oracle Cloud Services however very capable of running on the Oracle Cloud.

No comments: