You are on page 1of 17

The Zend Blueprint for Continuous Delivery

Zend Technologies, Inc. www.zend.com 2


The Zend Blueprint for Continuous Delivery
Continuous Delivery is a methodology, a mindset change and a leadership practice. When implemented
correctly, it enables organizations to accelerate their time to market while maintaining flexibility, reducing risk and
increasing application quality.
Unfortunately, there is no off-the-shelf software that implements the full Continuous Delivery process of bringing
applications from development to production. Much like traditional manufacturing, the delivery process has to
be constructed from distinct stages which each require dedicated best-in-class approaches, and automation, with
conveyor belts orchestrating connections between the
stages to ensure the integration of the full assembly
process.
In one of the most comprehensive books that
discusses Continuous Delivery concepts, authors Dave
Farley and Jez Humble identify anti-patterns (common
practices that are highly ineffective). Notably, the
first anti-pattern highlighted is manual software
deployment, while the best practice and end goal
is complete deployment automation whereby the
human performs just two simple actions select the
version and environment and then press the deploy
button [1].
The Continuous Delivery Lifecycle
The Zend Blueprint for Continuous Delivery is a
set of patterns for implementing best practices
throughout each phase of the release cycle, while
defining the relationships and connection points
between each step and how the underlying
infrastructure should be constructed to deliver
optimal value, and achieve rapid application
delivery.
Zend Technologies, Inc. www.zend.com 3
The Continuous Delivery Lifecycle
The model for Zends Blueprint for Continuous Delivery resulted from collaboration with enterprise application
owners who recognize that reaching a higher maturity level in application delivery can make their organizations
more efficient and significantly more valuable. Practical implementation concepts were gathered through the
experiences of the Zend Professional Services team, which is responsible for implementing best practices with our
clients, and has an understanding of how to build a roadmap for each step of the journey towards automation,
consistency, and stronger DevOps collaboration.
The value of establishing a Continuous Delivery practice has become more evident to software development
organizations. However, while it often appears on the list of top corporate initiatives, actual implementation of its
methodologies is still the privilege of a smaller subset of mostly advanced software development organizations.
In fact, in a recent report, the IBM Institute for Business Value [2] found that only 21% of advanced organizations
and 10% of intermediate organizations apply Continuous Delivery practices consistently.
Creating a reliable and repeatable process for releasing software can be achieved in phases, which helps reduce
complexity and upfront investment of resources. Some areas will be simpler to automate than others. In addition,
organizations will benefit by taking small steps toward Continuous Delivery even before the entire process is
completely automated and the end-state is reached where production deployment is as simple as pressing a
deploy button.
Zend Technologies, Inc. www.zend.com 4
Two Foundational Principles
The development organization must adopt the notion that the application is always production ready.
Code in the main trunk has to consistently be in a production-ready state on every merged change. Achieving
this level of maturity requires introducing agile development and release procedures, as well as rigorous testing
very early in the development process, as soon as coding begins. This means that the deployment step is being
refined and rehearsed over the entire development cycle, thus mitigating the risks of not being ready
when its time to go live with the application. When code is always production-ready (which requires discipline
through unit testing and agile practices on the developers side), the rest of the patterns or stages of the delivery
cycle can be filled in over time to complete the Continuous Delivery workflow.
The most effective workflow consists of sequential steps, separated by additional quality verification checks to
ensure consistent and satisfactory product quality.
One of the main concepts of a successful Continuous Delivery process is the understanding that a failure in any of
the quality gates aborts the entire process, and when the problem is identified, it is immediately addressed.
Continuous Delivery Blueprint
Version
Control
Continuous Integration
Infrastructure
Automation
Release
Automation
Quality
Control &
Approvals
Application
Management
Build Code Quality Packaging
Developers
working in
branches.
Trigger
CI when
merging
into main
trunk.
Pull and
organize
application
artifacts and
dependencies.
Run unit tests
and static
code analysis
tools to
ensure code
quality.
Assemble
application
artifacts incl.
dependencies
& configuration
into a
deployable
validated
package.
Automated
provisioning
of
infrastructure
resources &
platforms.
Automated
application
deployment
across all
runtime
environments.
Project
specific
functional
testing &
production
sign-off.
Provide instant
feedback and
diagnostics
on deployed
application to
development
and operations
teams.
Zend Technologies, Inc. www.zend.com 5
Version Control and Code Management Policies
A fundamental requirement for automation in manufacturing plants is very strict inventory and supply chain
management. The assembly line cannot function without a constant flow of the right quality-tested parts entering
the factory doors. In software manufacturing, the inventory of code files, resources and other artifacts required to
build the final product are stored and managed by a version control or configuration management system.
The vast majority of mature software development organizations and virtually every organization attempting to
implement a Continuous Delivery practice rely on a version control system to manage the flow of artifacts and
keep a catalog of their versions and relationships. However its still possible to find software development teams
who havent yet begun using source code version control. In the 2012 Zend Developer Pulse survey of over 2400
corporate developers [3], although 81% of development teams were already using version control, 19% had not
yet implemented a version control system.
Version control is not an area that can be partially implemented or neglected.
It is essential to have a clear versioning system for the artifacts going into the assembly line in order to assure
that matching parts are fused together and the process can be reliably repeated while the changes occurring
between executions are well organized and documented. Mature implementations of Continuous Delivery require
all configuration elements such as third party components, as well as web server and operating system settings
to be stored in version control together with the application code, tests and dependencies. It is recommended
to store every possible artifact needed to build and provision the entire environment together with configurations
that can potentially change over time. Although standardizing on a consistent application platform and a robust
application packaging solution can ease this requirement, it is still mandatory to store at least the complete code
base and artifacts needed to build and package the application.
Zend Technologies, Inc. www.zend.com 6
Continuous Integration
Continuous Integration (CI) is a methodology that evolved from extreme programming techniques based
on the idea that developed applications should always remain in a working state and each break should be
immediately fixed.
With Continuous Integration, applications are built either at specific intervals, or in more conservative
implementations, on every change checked in by the developers.
The goal of Continuous Integration is to eliminate the traditionally lengthy and painful system integration phase,
which often consumes much of the time of developers, testers and release managers who must patch code
components together while clearing issues sequentially. The risk of conflicts can be reduced through frequent
integration of the entire code base, starting from an early phase.
Although it is possible to implement deployment automation without continuously integrating and frequently
building the application, it is clear that CI increases productivity of the various teams by minimizing the integration
phases. In addition, Continuous Integration is the process to ensure that the application is always in a
working state and ready to be deployed with an assured level of quality provided by automated testing.
Continuous Integration mandates the strict use of
version control and places its trust in the developers
discipline to ensure that changes are well-tested locally
and merged into the main source trunk as frequently
as possible, and that unit testing is an integral
part of the process. In a test-driven development
environment, tests are developed before or together
with the applications business logic. This increases
the reliability of a Continuous Integration practice as it
allows unit testing of each piece of functionality in an
automated fashion.
Commercial and open source CI solutions enable the orchestration of the CI pipeline, effectively managing
and synchronizing the tasks required to build the application. Among the popular CI server choices in the PHP
ecosystem are Jenkins, Hudson and Bamboo. They coordinate the Continuous Integration workflow and ensure
an organized, repeatable build cycle rather than relying on manual scripts or a command line based process. The
Continuous Integration server is integrated with the version control system and will automatically fetch source
code and dependent artifacts to kick off a build cycle either on scheduled intervals (usually at least once per day),
or as each new revision of a code file or other artifact is checked in to the main version control trunk.
Build
After pulling code and artifacts from the version control system, the Continuous Integration server launches the
build process. For compiled languages, the build stage is more complex and follows a number of compilation
steps, linkage, and building binaries or for some languages platform-specific executables. Most modern compilers
feature the ability to compile and link code to executable binaries via command line, thus enabling automated
builds. These are performed from either the CI server directly, or by calling a specialized build tool (generic or
language-specific) such as Apache Ant, Gnu make, MSBuild or PHPs popular phing. PHP and similar dynamic
languages benefit from a fairly straightforward build step since they do not require compilation and linkage. The
result is fewer errors in the build stage. At the same time, more focus on automated testing helps to identify syntax
Zend views the Continuous Integration process
as a combination of three distinct phases
- Build, Automated Testing and Packaging
- executed sequentially with validation steps
for added control over the deliverables and the
quality of the manufactured application.
Zend Technologies, Inc. www.zend.com 7
and runtime issues early. As a dynamic, interpreted language, PHP generates code suited to multiple platforms
because it eliminates the need to manage multiple flavors of binaries.
Automated Testing
When implementing a CI practice, it is necessary to enforce automated testing, which addresses both quality
assurance of new functionality and regression protection.
Automated testing that targets individual code segments on every change ensures that each component entering
the assembly line is validated to an acceptable degree. Developers must create unit tests for each component
being developed and keep tests updated in sync with requirements and code changes. The depth of testing within
the CI process is fairly diverse. At the minimum, organizations should execute their suite of unit tests after pulling
the latest version of the code and prior to building the application. More advanced quality controls also add a layer
of static code analysis to ensure proper code styling, adherence to best practices, and further assurance that the
code is both efficient and maintainable. These validation tests secure the fundamental operation of the new build.
After build and packaging, the application is deployed to the test server. Continuous Delivery calls for another set
of system-wide automated tests including end-to-end transaction execution. Such testing confirms the quality of
the integrated assembled system as a whole and the success of the packaging stage as a result. Functional test
and application-wide static code analysis allow the assembly line to provide a wider safety net for scenarios
that go undetected by unit tests, and identify potential future issues resulting from poor coding.
Organizations equipped to implement sophisticated test automation practices can run more advanced tests,
simulating the production environment to test security, scalability and load, at the end of the CI phase. Because
such testing at the CI phase often requires provisioning of complex testing environments, it is typically performed
in a dedicated acceptance testing phase after the application is packaged and a proper acceptance testing or
staging infrastructure has been provisioned. Basic tests for load and endurance scenarios during the CI phase do
not replace the need for subsequent validation in a production-like or staging environment prior to pushing the
application to production.

Packaging and Release Automation
Application packaging is an emerging discipline within the Continuous Integration process. This is partly due to
the stronger association of deployment automation solutions with infrastructure automation, and partly because
the need for app portability increases with cloud adoption.
Deployment of a compiled or assembled build to testing and then to production environments can be achieved
through a range of basic to advanced approaches.
The first approach leverages distributed infrastructure automation tools designed to run scripts on remote
systems based on centralized, server-driven instructions. The script (that needs to be written manually), copies
the binaries, executable and configuration scripts, dependencies and resources needed to run the app from the
build server to the target machine, and runs additional configuration scripts.
A similar approach executes the script from a central location and performs deployment by remote login to the
target machines sequentially, performing the same copy and configuration steps via the remote interfaces.
The third approach takes advantage of package management solutions available in most operating systems,
and allows the creation of deployable packages in either centralized repositories or portable files. The packaged
repository or installer files are then run on each machine, typically via infrastructure automation agents. This
requires platform-specific packaging efforts.
Zend Technologies, Inc. www.zend.com 8
The most modern and comprehensive approach for packaging and release automation uses a
dedicated packaging and deployment solution that is either infrastructure-agnostic or provided by the
application platform. Use of such packaging and deployment solutions eliminates the dependency on specific
infrastructures and their packaging formats, as well as infrastructure automation tools. The portable nature of
these formats allows packaging to become an integral phase of the CI process.
It is a common best practice to mimic the configuration of the expected production system as the default
across testing and staging environments. However, business requirements may dictate a choice of production
environments, which creates the need to either: (1). override a certain configuration when deploying on target
production environments, or (2). support multiple production environments in parallel (e.g. diverse clouds
and hybrid on-premise and cloud environments). In these scenarios, a comprehensive infrastructure-agnostic
packaging solution alleviates the need to address different configurations at build time. The packaging solution
can deliver a self-contained deployable format supporting deploy-time configuration adjustments based on
parameters unique to the target environment type. The configuration of a specific production environment is then
refined by the package installer, which can also enforce dependencies.
Deploy-time configuration is crucial to automated deployment, extending flexibility to apps that rely on external
dependencies and complex system configurations. An example of this scenario is third party dependencies such
as payment gateways or central storage, which are not identical between testing and production. Deployment
-time configuration scripts are commonly used in database and web server configurations or upgrades, and they
allow the same package to be deployed on different web servers (i.e. Apache and Nginx), or different database
setups (e.g. cloud database platforms). An application platform such as Zend Server, with its release automation and
application monitoring capabilities, can be used to automate the process of creating and executing these scripts.
This reduces the risk of configuration inconsistency across environments. Functional testing of the application
should be performed until stable configurations are established across the multiple expected environments while
application monitoring practices are implemented to detect errors in all actual target production environments.
The Continuous Integration system pulls code from a version control repository, performs the builds (including
dependencies), and creates an application package using the packaging system interfaces. Automating all steps,
from fetching the code to providing a deployable package and performing them in every integration cycle,
reduces the risk of a failed delivery. Following successful application packaging, the best practice is to deploy
the application on a test server and immediately perform consistency and basic functionality checks to ensure
the quality and functionality of the packaged application. This step, often referred to as a smoke test, validates
application functionality in production. The complete, tested portable package is stored in the CI server or checked
in the version control system to ensure consistency. Additional deployments of this specific build in testing,
staging or target production environments should be performed using the same package. Just as it is ill-advised to
dismantle and reassemble a vehicle once it moves off a manufacturing assembly line, the same principle holds true
for an application once it has been tested and packaged. A release automation system that provides portable,
reusable packaging followed by distribution to provisioned environments dramatically increases the efficiency
of the Continuous Delivery process and gives businesses the flexibility to take advantage of diverse production
targets.
Continuous Delivery aims to keep software in a production-ready state so a package will be ready for deployment
at any time to any environment. Use of release automation technologies is not as widespread as one might expect,
but adoption is growing steadily. According to the 2012 Zend Developer Pulse survey [3], about 42% of developers
at companies with more than 1000 employees and 38% in smaller companies practice some form of application
deployment automation.
Adoption of a packaging and release automation solution, whether a simple script-based solution or
preferably a comprehensive, platform managed solution, is essential to achieve the production-ready state
with each software build that constitutes a true Continuous Delivery practice.
Zend Technologies, Inc. www.zend.com 9
Another key element in a mature Continuous Delivery environment is the automated rollback mechanism.
It serves as an insurance policy in cases of failed deployments in production. Several techniques can be used for
rollback independently or combined.
Traditional practice includes variations on building a parallel environment and swapping traffic at the load
balancer, leaving the previous environment available for a certain period of time in case problems are detected
and there is a need to revert back to the old environment. This practice is sometimes referred to as a blue-green
deployment: the parallel blue production environment is ramped up and at the right moment switched to
green meaning live production.
Other techniques involve rolling upgrades where only part of the environment is upgraded at any given moment
and the process can be stopped when problems are detected.
Utilizing an application deployment management system that can deploy packages to production and
support automatic rollback significantly reduces risk in the release process and promotes zero downtime
deployments. Other benefits include suitability for very small software increments and lower cost of frequent
releases. Rollback managed by a deployment system such as the one provided by Zend Server consumes fewer
resources: deployments can be performed on the same machines while eliminating some of the potentially
risky moving parts. Since updates and rollbacks may execute custom tasks (e.g. DB changes or data migrations),
deployment and rollback should be thoroughly tested during acceptance testing.
Zend Technologies, Inc. www.zend.com 10
Infrastructure Automation
With Continuous Delivery, two layers of automation are required to fully provision and deploy an application:
Release Automation and Infrastructure Automation.
The Infrastructure Automation system focuses on automating the provisioning of runtime environments or
platforms required to run an application, and gives the ability to provision virtual machines (generic and specially
configured images) for the desired application runtime environment. This is usually done by adding an application
server or runtime platform, a database or other application infrastructure elements. Traditionally, provisioning
environments has been a manual, time-consuming and error-prone task that eats up valuable IT organization
resources. Repetitious manual configuration of databases, application servers and web servers is a complex task
that tends to create future problems of inconsistent implementations. Infrastructure Automation eliminates the
manual labor associated with configuration of network elements, load balancers, user management, web and
application servers, and databases.
Infrastructure Automation is fundamental to cloud management systems. When combined with virtualization
management subsystems, it paves the way for programmatically managed, on-demand infrastructure
(Infrastructure-as-a-Service or IaaS). Add to this provisioning capability the application server and other middleware
layers and you have a Platform-as-a-Service (PaaS) solution whereby the hardware, OS and runtime environment
are completely virtualized and consumed on demand.
Solutions for Infrastructure Automation include distributed agents on the servers, a centralized workflow
management and rules processing engine, and scripting language support for orchestration of the production
environment. These solutions can eliminate costs associated with manual provisioning and release steps. With
automation, environments can be provisioned and launched at will, or terminated and discarded when obsolete.
The process is faster and more reliable because manual intervention steps have been eliminated. The programmatic
nature of such solutions ensures that environments are identical and always provisioned in the same manner and
configured in the same way.
The Benefts of Environment Consistency
Staging and production environments are sometimes managed separately from the development environment.
In many cases this includes application infrastructure elements such as application servers, databases and
virtual machines that may not be configured identically by the same automation tool used in pre-production.
Environment inconsistencies are a significant contributor to application release and maintenance costs.
The 2013 Zend Developer Pulse survey [4] points to inconsistencies between development, testing and production
environments as the major source of delays and failures when rolling out applications to production.
While most applications can be executed on different runtime environments or application stacks, the result
is tremendous effort invested in manually packaging, deploying and configuring the same application to
target multiple environments. The same survey found that only 28% of over 2400 corporate developers utilizing
PHP were standardizing on a single application stack across all development and production environments. A
large percentage of application failures tend to occur shortly after deployment, and are attributed to inconsistent
execution environments.
One of the main Continuous Delivery anti-patterns pointed out by authors Dave Farley and Jez Humble [1] is the
practice of deploying to a production-like environment only after development is complete, which is inefficient
and costly. Using the same templates in provisioning test and production environments provides a higher level
of assurance that the application will behave in a similar way throughout the release cycle. The level of assurance
Zend Technologies, Inc. www.zend.com 11
increases as the level of automation reaches the application stack and its configuration. Therefore standardization
on an automatically provisioned application platform provides a higher level of confidence than OS-level
standardization. Maintaining a consistent application stack allows organizations to eliminate environmental
issues early in the development cycle and accelerate the developers problem resolution capability by taking
environment variables out of the equation. It also allows developers to build the applications and troubleshoot
incidents with a better understanding of the target production system.
Many unexpected behaviors can be avoided by mandating a controlled, consistent application stack or
platform. The fact that many application platforms are designed with portability in mind and supported by
major cloud vendors allows organizations to use consistent application runtime stacks and be free to choose their
production environments based on cost optimizations rather than specific technical characteristics.
Quality Control and Acceptance
Successful Continuous Delivery practices must have sufficient checkpoints throughout the automated workflow
that can raise a flag and stop the process when something goes wrong.
These big red buttons are spread along the assembly lines conveyor belt and pushed immediately when something
does not look right. If a unit test fails, or static analysis identifies syntax or structure issues, or deployment to any
environment is unsuccessful, or a manual acceptance test does not pass, then the factory must shut down until
the problem is resolved. Developers, DevOps teams or sys admins must address the issue prior to continuing
or re-launching the release cycle. IT leadership must instill in the organization a culture of quality as the
first priority, and a sense of urgency to fix broken releases. Quality control and validation are fundamental
requirements for automated software processes and, as in the industrial world, call for a combination of automated
and manual validations.
A number of automated quality control gates are typically executed during the Continuous Integration phase.
Their purpose is primarily to ensure the functionality of the application building blocks, the adherence to best
practices, and the basic validation of the deployable package. In reality, continuous and automated deployment to
production only suits a small subset of software organizations that benefit from very frequent releases. The majority
of software manufacturers deploy app packages to testing and staging environments for quality assurance prior to
pushing the button and promoting these packages to production.
Acceptance Testing is vital to the adoption of a dependable Continuous Delivery methodology. In this step,
automated functional testing ensures the viability of business transactions executed by the application and
user acceptance testing (UAT). UAT is typically executed by testers simulating a real users engagement with the
application to validate its adherence to specifications and to capture defects missed by the automated testing
scenarios. In addition to UAT, capacity and endurance testing ensure that the application can handle expected
transaction loads, and perform over time without degradation of performance or availability. Load and endurance
tests are automated and test scenarios are generated using dedicated tools. The testing environment must be
provisioned to mimic production, as close as possible to an exact replica, in order to achieve the highest level of
confidence in the application builds readiness for production launch.
Zend Technologies, Inc. www.zend.com 12
Application Management and Efective Problem
Resolution
The DevOps movement emphasizes tight collaboration between developers and operations teams. Adoption of
agile development practices requires feedback loops from testing, staging and production back to the developers,
transforming the development process into one that is cyclical and iterative. Continuous Delivery involves a chain
of feedback loops moving the application forward.
Continuous Integration, Infrastructure Automation and Release Automation serve to automate the flow from
development to production. However, other mechanisms must be implemented to complete the cycle, automating
the reverse flow to allow intelligent escalation of problems from production back to development. In the escalation
process, operations teams detect problems, isolate the responsible service and either resolve or escalate the
problem to the developers when an application issue is identified.
Operations teams require real-time visibility into both the applications behavior in production and the state
of the underlying infrastructure.
Application Management capabilities and shared visibility between development and operations for problem
solving is an essential element of the feedback loop. However, despite widespread adoption of infrastructure
monitoring; less than 25% of corporate development and DevOps teams are implementing any type of application-
level monitoring [3].
Infrastructure monitoring and management is an established practice for operations teams. Most operations
teams deploy commercial or open source agent-based technologies to monitor infrastructure health via status
reports, errors and health metrics in a centralized dashboard.
While an infrastructure management strategy and escalation workflow is essential, it is limited to detection and
resolution of primarily hardware and operating system failures. It does not provide drill-down and visibility into
the applications behavior. This challenge can be addressed by providing developers and operations teams the
visibility they need into both application and infrastructure issues.
Best-of-breed application monitoring solutions capture applications execution data automatically, including
issues at the code execution level. By proactively monitoring apps and making root cause analysis data available
continuously, operations teams can detect application issues early and provide developers with intelligent
escalation reports including the full context of the problem. The application monitoring systems can store incident
data and execution history so all developers can access troubleshooting data and analyze historical trends without
impacting production.
Without detailed application behavior diagnostics, the majority of time spent on problem resolution
is consumed in isolating and identifying root cause issues through reproductions, requiring attempts at
simulation or recreation of issues, supported by the viewing of multiple logs. In this scenario, studies have shown
that up to 80% of developers spend more than one-quarter of their time on problem resolution [4]. This is because
software problems are often intermittent or random and difficult to reproduce, occurring only under certain
capacity and usage conditions in production. Without continuous application monitoring, the challenge becomes
one of pinpointing the source of the problem with insufficient application-level diagnostics data.
A lack of visibility and automation in gathering and analyzing useful troubleshooting information at the
application level can critically hinder the effectiveness of fast feedback loops.
Zend Technologies, Inc. www.zend.com 13
When Zend works with customers deploying the Zend Server application platform, we encourage their DevOps
teams to leverage application monitoring and management capabilities early on. Starting in early development,
and continuing throughout the app lifecycle including CI, automated test and User Acceptance Testing. In this
way, developers not only can find problems earlier using more strict thresholds in pre-production and solidify the
application, but also refine and set proper thresholds for monitoring rules packaged with the application and later
deployed in production. Developers also become familiar with use of monitoring and root cause analysis tools
early, well before critical issues find their way into the production environment.
To support operations team requirements for centralized monitoring and improved problem detection and
isolation, platforms such as Zend Server can forward application-level alerts to infrastructure management
solutions such as Nagios and Tivoli. This gives operations staff greater visibility into the application environment so
they can push intelligent escalations through the feedback loop.
Auditing and Change Management
Auditing and Change Management complement application monitoring by providing visibility into changes that
occur in the environment over the lifetime of an application. When developers and operation teams are aware of
changes in the environment and application settings, they can better understand what occurs when error events
or performance threshold breaches appear on the dashboards. Deployments and runtime applications often fail
because of changes in the production environment. Proper auditing at the application platform level, together
with failure and performance metrics gathered by the monitoring solution, provide a clear, holistic picture of what
changes were made in production and when, and what impact they had on app behavior and performance.
Zend Technologies, Inc. www.zend.com 14
Continuous Delivery Workflow - Putting it all
Together
In a Continuous Delivery environment the source code flows from development to production through a software
assembly line where a number of technologies help build, integrate, package and test the software while the
application takes shape to become the final deliverable. The software moves through automated stages (and
occasionally manual stages) to reach its final destination. There are many options for the technologies and software
used to manage the process, and selection within them can be based on the preference of the developers and
the operations team. These technologies that present a variety of options include the version control system,
continuous integration platform, automated testing tools and infrastructure management system. Other tools
along the assembly line are more platform-specific and may include a build tool, application runtime platform,
application monitoring, and a release automation solution.
An example of an effective Continuous Delivery process is a PHP application shepherded through the Continuous
Delivery cycle and standardized on Zend Server as its application platform; using Jenkins as the CI server, git as
the version control, phing for the build, and Nagios monitor production infrastructure. This example is based on a
model successfully implemented with enterprise PHP development organizations and would flow as follows.
Continuous Delivery Process Example for an Enterprise
PHP Application
1. Devel opers devel op
new code and run unit
test on their machines
2. Developers check in
their code which is then
merged to the main
trunk by the release
manager
3. The Code Push triggers
the CI process in the CI
Server
4. The CI Server triggers a
build by calling a build
target
5. The build tool assembles
dependenci es and
creates the binaries
6. The build tool executes
unit tests and static
code analysis
7. The build tool or CI
Server package the
binaries using the Zend
Server SDK
8. The CI Server launches a
package deployment on
a test server using the
Zend Server SDK
9. CI Ser ver l aunches
functional validation
tests of the deployed
application functionality
and consistency
Zend Server application
moni t or i ng pr ovi des
feedback on application and
PHP errors during validation
tests
The CI Server deploys the
package to a testing Zend
Server cluster
The CI Server launches
a seri es of automated
f unct i onal , l oad and
capacity tests
The Testers perform manual
tests and complete the
acceptance testing
The package is pushed to
a production-like staging
cluster for final verification
testing
A production release is
authorized
The package is pushed to
a production cluster which
was provisioned utilizing
Zend Server provisioning
patterns. The infrastructure
i s moni tored wi th an
infrastructure management
t ool wi t h addi t i onal
application-level events
captured and integrated
from Zend Server.
10.
11.
12.
13.
14.
15.
16.
Zend Technologies, Inc. www.zend.com 15
Patterns and Best Practices
Zend offers a platform to enable Continuous Delivery (Zend Server), which provides consistency, automation and
collaboration capabilities throughout the application delivery cycle.
Benefts
Consistency
Zend Server provides the ability to ensure a consistent application stack and configurations across dev, test and
production. This includes library management capabilities that ensure framework versions and other dependencies
are correctly managed across environments.
The configuration management capability of Zend Server ensures configuration consistency across clustered
environments in dev, test and production, and alerts the team to prevent errors caused by configuration
inconsistencies. This capability also enables an easy copy of settings from staging to production via an automated
application deployment process.
Automation
With Zend Server, PHP applications can be automatically deployed from Continuous Integration into production
through an automated packaging and release process. Zend Server provides a packaging and deployment
capability for PHP applications that enables their automated deployment from dev to staging and from staging
to production, which can be integrated with automated infrastructure deployment through automation software
such as Chef or Puppet. It also provides automatic rollback capabilities that significantly reduce risk in the release
process. Zend Server also enables automatic scaling and elasticity, by providing a capability to automatically
provision identical configurations across a cluster or multiple cloud instances, and add fully-configured instances
instantaneously when needed. Configurations can also be managed in an automated manner, where any mis-
synchronizations (a common cause of production errors) are automatically corrected.
Collaboration
Zend Server equips dev and ops teams with shared visibility into an applications behavior, via a detailed set of
application-level behavior diagnostics. These diagnostic and management capabilities include monitoring an
applications performance and responsiveness, monitoring for critical errors, logging and managing changes to
configurations, and providing code execution level visibility into application issues. User management capabilities
allow easy access to information from both development and operations teams, but with different usage rights
(developers cannot modify production settings but can see detailed diagnostic information).
Zend Server Patterns
A set of plug-ins and SDKs, made available as part of the Zend Blueprint for Continuous Delivery, help implement
practices for automation, and enable the integration of Zend Server with popular Continuous Integration,
Infrastructure Automation, and Monitoring platforms.
Zend Technologies, Inc. www.zend.com 16
Zend Blueprint for Continuous Delivery
Learn more, and see the latest list of Zend Patterns at www.zend.com/blueprint.
Summary
Businesses need agility to respond to ever-changing market demands and produce apps rapidly and with quality.
Weve seen how agile development supports faster innovation. And yet the dynamic and unpredictable nature of
modern production environments has created the need to pair agile development with agile application delivery
faster software releases synchronized with business needs on a consistent basis.
Continuous Delivery allows organizations to streamline and automate traditional app delivery processes that
are manual, error-prone and costly in nature. The software manufacturing process is being transformed into
an automated assembly line able to continuously iterate and deliver new code to production. Organizations
are embracing DevOps and adopting Continuous Delivery to attain the goal of business agility and increased
collaboration. We hope this paper has been helpful in outlining the steps and approach to implementing a
professional Continuous Delivery platformone that solidifies the IT organizations position as a vital corporate
asset in increasing the competitiveness of the company and quickly addressing the needs of the business.
CONTINUOUS INTEGRATION
provides
Consistent PHP Stack
Error Detection
Library Packaging
Application Packaging
INFRASTRUCTURE AUTOMATION
provides
Automated Provisioning
Automated Confguration Control
Elastic Scaling
RELEASE AUTOMATION
provides
Automated Deployment
Cluster Deployment
Dependency Validation
Automated Rollback
Auto-deploy on Scale-up
Library Versioning
APPLICATION MANAGEMENT
provides
Application Monitoring
Performance Management
Root Cause Analysis
Change Tracking
Shared Dev/Ops Visibility
Zend Technologies, Inc. www.zend.com 17
Corporate Headquarters: Zend Technologies, Inc. 19200 Stevens Creek Blvd. Cupertino, CA 95014, USA Tel 1-408-253-8800 Fax 1-408-253-8801
Central Europe: (Germany, Austria, Switzerland) Zend Technologies GmbH, St.-Martin-Str. 53, 81669 Munich, Germany Tel +49-89-516199-0 Fax +49-89-516199-20
International: Zend Technologies Ltd. 12 Abba Hillel Street, Ramat Gan, Israel 52506 Tel 972-3-753-9500 Fax 972-3-613-9671
France: Zend Technologies SARL, 105 rue Anatole France, 92300 Levallois-Perret, France Tel +33-1-4855-0200 Fax +33-1-4812-3132
Italy: Zend Technologies, Largo Richini 6, 20122 Milano, Italy Tel +39-02-5821-5832 Fax +39-02-5821-5400
Ireland: Zend Technologies, The Digital Court, Rainsford Street, Dublin 8, Ireland Tel +353-1-6908019
2013 Zend Corporation. Zend and Zend Server are registered trademarks of Zend Technologies Ltd.
All other trademarks are the property of their respective owners.
0106-M-WP-1013-R1-EN www.zend.com
References and resources:
[1] Jez Humble, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation,
http://jezhumble.net/
[2] IBM Institute for Business Value, The software edge: How effective software development and delivery drives
competitive advantage, http://public.dhe.ibm.com/common/ssi/ecm/en/gbe03545usen/GBE03545USEN.PDF
[3] Zend Developer Pulse, Summer 2012, http://static.zend.com/topics/zend-developer-pulse-survey-report-Q2-2012-
0612-EN.pdf
[4] Zend Developer Pulse, 2013, http://static.zend.com/topics/Zend-Developer-Pulse-report-Q2-2013-0523-EN.pdf
About the Author
Ido Benmoshe is VP, Global Support & Services at Zend, responsible for professional services, PHP training and certification
programs, technical support and solution consulting. The Zend Professional Services team leads implementations of
agile methodologies, application design, optimization and continuous delivery solutions at global enterprises running
mission-critical PHP applications. They focus on mentoring customers development and operations teams to deliver
faster releases of high-quality PHP applications with higher performance and availability.
About Zend
Zend partners with businesses to rapidly deliver modern apps across web, mobile and cloud. We helped establish the
PHP language, which today powers over 200 million applications and web sites. Our flagship offering, Zend Server, is
the leading Application Platform for developing, deploying and managing business-critical applications in PHP. More
than 40,000 companies rely on Zend solutions, including NYSE Euronext, BNP Paribas, Bell Helicopter, France Telecom
and other leading brands worldwide.

You might also like