In the dynamic world of software development, the need for speed, efficiency, and reliability is paramount. Enter DevOps automation, a game-changing approach that is revolutionizing the way we develop, deploy, and manage software. It’s a fusion of development and operations, a philosophy that bridges the gap between developers and IT professionals, fostering a culture of collaboration and shared responsibility. But what makes DevOps automation truly transformative is its ability to automate repetitive tasks, streamline processes, and, ultimately, accelerate the software development lifecycle.
DevOps automation is not just about speed; it’s about consistency, scalability, and the ability to manage complex environments easily. It’s about freeing human resources from mundane tasks, allowing them to focus on innovation and problem-solving. It’s about creating an environment where software updates can be delivered with high frequency without compromising the stability of the production environment.
DevOps automation is the heartbeat of modern software development, a vital component driving businesses forward in an increasingly competitive digital landscape. Whether you’re a software developer, an IT professional, or a business leader, understanding and implementing DevOps automation could be the key to unlocking unprecedented growth and success.
- 1 Understanding DevOps Automation
- 2 Exploring DevOps Automation Tools
- 3 Choosing the Right DevOps Automation Tools
- 4 The Impact of DevOps Automation on Businesses
- 5 Final Thoughts
- 6 FAQs
Understanding DevOps Automation
DevOps Automation is a critical component of the DevOps approach, which aims to unify software development (Dev) and software operation (Ops). It involves the use of specialized software tools and methodologies to automate repetitive and manual tasks throughout the software development lifecycle. This automation is central to the DevOps philosophy, reinforcing all other principles.
Automation in DevOps is designed to simplify how software is developed, delivered, and managed. The ultimate goal is to deliver reliable software faster and reduce risk to the business. It is a discipline that “takes the robot out of the human,” promoting better collaboration and communication by allowing team members to automate repetitive and routine tasks. This way, they can spend more time working with each other and less time doing tedious manual work.
DevOps automation is also a key enabler of continuous integration, continuous delivery, and continuous deployment (CI/CD), practices that are central to the DevOps culture. In today’s business environment, DevOps teams and site reliability engineers must be able to deliver features and updates at a high-frequency rate, maintaining the stability of the production environment while delivering short turn-around times.
The Importance of DevOps Automation
The importance of DevOps Automation cannot be overstated. It plays a crucial role in addressing common challenges in the DevOps pipeline, such as manual processes, siloed work, and handoffs that result in bottlenecks and inefficiencies. It also helps to mitigate security risks from inconsistent tradeoffs and audit and regulatory compliance risks from a lack of visibility and traceability.
Enhancing Efficiency and Productivity
Automation in DevOps enhances efficiency and productivity by eliminating the need for manual intervention in various stages of the software development lifecycle. It reduces the duplication of effort arising from poor collaboration and team communication. By automating routine tasks, team members can focus on more complex and creative aspects of software development, thereby increasing productivity.
Ensuring Consistency and Reducing Errors
Automated processes are consistent and predictable. A software automation tool will always perform the same task until it is reconfigured to do otherwise. This consistency reduces the likelihood of errors common with manual processes and ensures the software development process is more reliable.
Accelerating Delivery and Deployment
Automation accelerates the processes of code integration and application deployment. Automated tools can perform operations almost instantaneously, eliminating the need to wait for human readiness before a process can start. This speed is particularly beneficial when deploying new releases at odd hours, which may not be feasible with manual processes.
Automation facilitates scalability. Processes that are feasible to manage manually at a small scale become challenging as the scale increases. Automation allows managing multiple applications and deployments to multiple environments, such as more than one cloud or different operating systems.
Improving Business Resilience
DevOps automation improves business resilience by reducing the risk associated with implementing business change through software. It simplifies the development, delivery, and management of software solutions, thereby reducing the risk to the business. This resilience is particularly important in unexpected disruptions like the COVID-19 pandemic.
In conclusion, DevOps Automation is a critical aspect of the DevOps approach.
It enhances efficiency, ensures consistency, accelerates delivery and deployment, facilitates scalability, and improves business resilience. As businesses continue to navigate the digital landscape, the importance of DevOps Automation will only continue to grow.
Exploring DevOps Automation Tools
DevOps, a combination of the terms ‘development’ and ‘operations,’ is a software development methodology that bridges the gap between developers and IT staff. It promotes a more collaborative and productive relationship by automating and streamlining the software development and infrastructure management processes. This results in shorter development cycles, increased deployment frequency, and more dependable releases, all in closer alignment with business objectives.
Automation tools play a crucial role in achieving these DevOps objectives. They help reduce manual effort, minimize errors, and increase efficiency in various stages of the DevOps lifecycle, including coding, building, testing, packaging, releasing, configuring, and monitoring. Two of the most popular DevOps automation tools are Docker and Kubernetes.
Docker is an open-source platform that automates applications’ deployment, scaling, and management by encapsulating them into containers. Unlike a virtual machine, a Docker container does not include a separate operating system. Instead, it relies on the functionality of the host machine’s operating system, making it lightweight and fast.
Docker containers ensure that the software will behave the same way, regardless of where it is deployed. The container includes everything the software needs to run, including the code, runtime, system tools, libraries, and settings. This feature is particularly useful in a DevOps context, as it allows developers to work on applications in the same environment in which they will be deployed, reducing the risk of encountering issues related to discrepancies between different environments.
Docker containers modularize an application’s functionality into several components that can be deployed, tested, and scaled independently. This containerization enables “write once, run anywhere” programs, making distributing distributed programs easier, especially as companies move to cloud-native development and hybrid multi-cloud settings.
Docker containers are often referred to as “lightweight,” implying that they share the machine’s operating system kernel and eliminate the overhead of associating an operating system with each application. Containers have a lower capacity and require less start-up time than virtual machines, allowing significantly more containers to run on the same computational power as a single VM. As a result, server efficiencies improve, lowering server and licensing costs.
Docker’s benefits extend beyond just the technical aspects. It also offers significant advantages in terms of return on investment (ROI) and cost savings. Docker’s portability and performance advantages can aid in making your development process more fluid and responsive. Using Docker containers and technology like Enterprise Developer Build Tools for Windows to improve your continuous integration and delivery processes makes providing the appropriate software at the right time easier.
In the context of DevOps, Docker is a revolutionary technology adopted and loved by many. It provides a unified platform for all the stages of application development, ensuring seamless collaboration among development and testing teams. Docker is used in the Continuous Deployment stage of the DevOps ecosystem and plays a vital role in the environment. With the security, scalability, and simplicity it brings to the software cycle, Docker is a must-use in any DevOps environment.
Kubernetes, often called K8s, is an open-source container orchestration system that automates application deployment, scaling, and management. It’s a platform that optimizes many DevOps processes that were previously handled manually, simplifying the work of software developers.
Kubernetes services provide load balancing and simplify container management on multiple hosts. They make it easy for an enterprise’s apps to have greater scalability, flexibility, portability, and productivity. Kubernetes is the fastest-growing project in the history of open-source software after Linux.
One of the top benefits of using Kubernetes is that it reduces workload. It solves the contradictions between different environments and allows engineers to respond to customer requirements while relying on the cloud for functioning apps. Kubernetes smoothens container tasks, easing activities like canary deployment, rolling updates, and horizontal auto-scaling.
Kubernetes offers several benefits for DevOps:
- Consistency in the development, testing, and deployment environment: While writing, testing, or deploying an application inside a container, the environment at different delivery parts does not change. This simplifies the collaboration between various teams involved in the process, such as developers, admins, and testers.
- Offers seamless updates: For continuous software delivery, application updates need to be rolled out consistently and streamlined. Kubernetes is capable of helping with the updates to the apps.
- Supports multiple frameworks: When the containers follow the DevOps approach religiously, they can easily and swiftly switch between various deployment frameworks.
- Effortless scalability: Kubernetes offers a container-based integration ecosystem that is continuous and autonomous. Thus, it provides the capability to scale up or down the application based on requirements and burden.
- Less time is taken to onboard new application: The time taken to complete new projects is lessened with Kubernetes with DevOps. It can now contain a reusable pipeline and new loads as code modules, which can be distributed crosswise to various projects.
- Enhances a developer’s productivity and efficiency: Kubernetes enables developers to obtain instant feedback on their builds without waiting in queues.
- Helps in handling infrastructural challenges: Manually managing infrastructure operations can be burdensome for developers and coding teams. But Kubernetes enables you to automate and update patches to overcome such hurdles.
- Efficient server usage: Kubernetes with DevOps diminishes the need for overpaying for heavy loads. The server usage is efficient whether the app is deployed on-premise or in the cloud.
In the context of DevOps, Kubernetes is a powerful tool that offers a range of benefits, from improving efficiency and productivity to providing a consistent environment for development, testing, and deployment.
Jenkins is a widely recognized open-source continuous integration server written in Java. It’s a tool that has become integral to many DevOps processes, automating the CI/CD pipeline steps. Jenkins interacts with other tools in the pipeline, such as artifact and source code repositories, configuration management software, and automation tools.
Jenkins offers several benefits for DevOps:
- Open Source and Free: Jenkins is open-source and free, which means developers and DevOps teams don’t have to worry about procurement costs for code pipelines. This makes it easier for teams to focus on the CI rather than an approval process.
- Plugins and Integrations: One of the key advantages of Jenkins is its rich plugin ecosystem. Jenkins plugins can be developed by anyone, for anyone, making Jenkins flexible and allowing it to support building and testing virtually any project.
- Hosting Options: Jenkins can be hosted on-premises, on the cloud, or in a Docker container for high portability and scalability. This makes it a versatile tool that can be adapted to various company systems.
- Community Support: Jenkins has a long history and a large community of users, which means there’s no shortage of support from large online communities of agile teams.
- Integration with Other CI/CD Platforms: Jenkins can work alongside other platforms that a software team uses for continuous delivery. This means it can easily integrate existing workflows.
Jenkins is a powerful tool that can help automate many aspects of the DevOps process. It can automatically kick off steps in the CI/CD pipeline, interact with other tools in the pipeline, and provide feedback on build and test results. This makes it an invaluable tool for any DevOps team.
Ansible is an open-source automation platform widely used in DevOps for configuration management, application deployment, intra-service orchestration, and provisioning tasks. It’s a tool that simplifies complex tasks, allowing developers and system administrators to focus on other tasks that add value to an organization.
Here are some of the key benefits of Ansible in DevOps:
- Agentless: Ansible doesn’t require any software or agents to be installed on the client systems. It automates. This makes it lightweight and easy to use.
- Simple to Use: Ansible uses a language called YAML (YAML Ain’t Markup Language), which is human-readable. This makes it easy for anyone with basic IT knowledge to set up and use Ansible.
- Powerful and Flexible: Ansible can model highly complex IT workflows. It’s also flexible, allowing you to orchestrate the entire application environment no matter where it’s deployed.
- Efficient: Ansible doesn’t require any additional servers, daemons, or databases, which leaves more room for application resources on your server.
- Modular: Ansible uses modules to automate, configure, deploy, and orchestrate the IT Infrastructure. It comes with over 750 built-in modules.
Ansible can be used for various tasks in a DevOps environment, including infrastructure provisioning, configuration management, IT automation, continuous deployment, application development, network automation, security automation, and infrastructure orchestration.
In summary, Ansible is a powerful, flexible, and easy-to-use tool that can significantly enhance the efficiency of DevOps processes. It’s an invaluable tool for any organization looking to automate their IT infrastructure and workflows.
In DevOps automation, Git holds a significant position as a tool for source code management. It is a free and open-source version control system designed to handle projects of all sizes efficiently. Git tracks changes in the source code, allowing multiple developers to work together on non-linear development.
Git was created by Linus Torvalds in 2005 for the development of the Linux kernel. Its primary function is to track changes in computer files, but it is generally used for source code management in software development. The distributed version control tool is used for source code management, enabling multiple developers to work together. It supports non-linear development through its thousands of parallel branches.
Every time work is saved, Git creates a commit. A commit is a snapshot of all files at a point in time. If a file hasn’t changed from one commit to the next, Git uses the previously stored file. Commits create links to other commits, forming a graph of the development history. It’s possible to revert code to a previous commit, inspect how files changed from one commit to the next, and review information such as where and when changes were made.
Commits are identified in Git by a unique cryptographic hash of the contents of the commit. Because everything is hashed, it’s impossible to make changes, lose information, or corrupt files without Git detecting it.
Branches in Git
Branches in Git are used to manage the separation of different changes. Each developer saves changes to their local code repository. As a result, many changes can be based on the same commit. Once work created in a branch is finished, it can be merged back into the team’s main (or trunk) branch.
Files and Commits in Git
Files in Git are in one of three states: modified, staged, or committed. When a file is first modified, the changes exist only in the working directory. They aren’t yet part of a commit or the development history. The developer must stage the changed files to be included in the commit. The staging area contains all changes to include in the next commit. Once the developer is happy with the staged files, the files are packaged as a commit with a message describing what changed. This commit becomes part of the development history.
Benefits of Git
Git offers several benefits. It allows for simultaneous development as everyone has their local copy of the code and can work on their branches. Git works offline since almost every operation is local. Branches allow for flexible and simultaneous development. The main branch contains stable, high-quality code from which you release. Feature branches contain work in progress, merged into the main branch upon completion.
Git’s popularity and flexibility make it a great choice for any team. Many developers and college graduates already know how to use Git. Git’s user community has created resources to train developers, and Git’s popularity makes it easy to get help when needed. Nearly every development environment has Git support and Git command line tools implemented on every major operating system.
Puppet is a widely recognized tool in the DevOps landscape, known for its robust capabilities in infrastructure management and IT automation at scale. It is designed to manage the configuration of servers by defining the desired state of the systems in your infrastructure. This is achieved by writing infrastructure code in Puppet’s Domain-Specific Language (DSL), which automates more infrastructure and complex workflows with reusable blocks of self-healing infrastructure as code.
Puppet’s approach to infrastructure automation is based on the concept of desired state management. This means you define the state you want your systems to be in, and Puppet ensures they remain in that state. If any changes occur that deviate from this defined state, Puppet will automatically correct them, ensuring your systems remain consistent and in the desired state.
One of the key benefits of using Puppet in DevOps automation is its ability to deliver better infrastructure faster. It allows quick infrastructure deployment to support evolving business needs at scale with model-driven and task-based configuration management. This means you can rapidly respond to changes in your business environment, deploying new features or fixing issues in a timely manner.
Puppet also increases operational efficiency by automating the full infrastructure lifecycle. This eliminates silos, reduces response time, and streamlines change management. By automating routine tasks, your team can focus on more strategic initiatives, leading to increased productivity and innovation.
Regarding compliance and security, Puppet’s automated policy enforcement enables continuous compliance. It has the ability to find, report, and fix errors and enforce the desired state across your infrastructure. This means you can ensure your systems are always compliant with the necessary regulations, reducing the risk of non-compliance and potential penalties.
Puppet is also backed by a vibrant community that contributes to its development. This means you can get started quickly with pre-built content and workflows from Puppet and its open-source community. This community support, coupled with Puppet’s robust capabilities, makes it a powerful tool in the DevOps automation toolkit.
Puppet’s capabilities extend across multiple operating systems and environments, from on-premises to the cloud. This makes it a versatile tool that can be used in various settings, making it a valuable asset for any organization looking to implement DevOps automation.
In conclusion, Puppet is a powerful DevOps automation tool that offers robust infrastructure management, IT automation, compliance, and security capabilities. Its ability to define and enforce the desired state of systems and its community support and versatility make it a valuable tool for any organization looking to implement DevOps automation.
Bamboo is a continuous integration and deployment server developed by Atlassian. It is designed to automate the release management of a software application, creating a continuous delivery pipeline. This tool enables your DevOps team to spend less time creating and running time-intensive yet redundant scripts and more time building the code that matters.
Bamboo is a commercial tool that offers a comprehensive CI/CD solution with integrated branch management and automated deployment as part of its software package. This means you don’t have to hunt for a plug-in to automate these processes, as you might with some other tools.
Bamboo is built to work seamlessly with other Atlassian products, such as Jira and Bitbucket, providing a streamlined experience across any deployment type. It also supports the use of Docker and AWS CodeDeploy for easy release of your final product.
Bamboo’s architecture is designed around Plans, Stages, Jobs, and Tasks. You create Plans that define the overall process, which are broken down into Stages. Each Stage contains Jobs, which are collections of Tasks run on the same agent.
Bamboo’s strength lies in its ability to scale with confidence. As your organization grows, Bamboo can increase capacity and maintain performance, ensuring your DevOps processes run smoothly.
However, Bamboo is not an open-source tool but comes with a price tag. While this might be a deterrent for some, the robust features and seamless integration with other Atlassian products make it a worthwhile investment for many organizations.
In conclusion, Bamboo is a powerful DevOps automation tool that offers a comprehensive and integrated solution for continuous integration and deployment. Its ability to automate workflows, scale with your organization, and integrate seamlessly with other tools makes it a strong contender in DevOps automation tools.
Terraform stands out as a powerful and versatile choice in DevOps automation tools. Developed by HashiCorp, Terraform is an open-source tool that allows you to define and provide data center infrastructure using a declarative configuration language. It is used to manage various service providers and custom in-house solutions.
Terraform’s primary function is infrastructure as code (IaC), which enables developers to codify the infrastructure setup process in a way that is both repeatable and predictable. This approach eliminates the need for manual processes, reducing the potential for human error and increasing efficiency.
One of the key strengths of Terraform is its ability to manage a multi-cloud environment. With support from many providers such as AWS, Google Cloud, Azure, and more, Terraform allows you to manage your resources across different cloud platforms seamlessly. This multi-cloud capability is increasingly important in today’s diverse and distributed cloud environments.
Terraform also excels in its ability to manage complex and large-scale infrastructures. It does this by breaking down the configuration into smaller, manageable parts, known as Terraform modules. These modules can be reused across different projects, promoting code reuse and reducing duplication.
Another notable feature of Terraform is its plan command, which allows you to preview the changes before they are applied. This feature gives you a clear understanding of what changes will occur without making any changes, reducing the risk of unintended consequences.
Terraform also integrates well with existing DevOps workflows. It can be used alongside other tools, such as Docker for containerization, and AWS for cloud services, creating a complete infrastructure and deployment workflow.
In conclusion, Terraform is a powerful tool in the DevOps automation arsenal. Its ability to manage multi-cloud environments, handle large-scale infrastructures, preview changes, and integrate with existing workflows makes it an essential tool for any DevOps professional.
In the world of DevOps automation, Chef is a standout tool that brings a unique blend of capabilities to the table. Developed as an open-source technology by Opscode, Chef uses Ruby to create a domain-specific language, allowing it to manage and automate infrastructure.
Chef’s primary function is configuration management, which means it automates the system configuration process, reducing the need for manual intervention. This automation increases efficiency and reduces the likelihood of errors that can occur during manual configuration.
Chef’s key strengths are its ability to manage various operating systems, including Linux, Windows, FreeBSD, and more. This cross-platform capability makes Chef a versatile tool for managing complex, heterogeneous environments.
Chef also offers excellent integration with cloud technologies. Using a utility called Knife, Chef can be seamlessly integrated with various cloud platforms, making it an ideal tool for organizations that distribute their infrastructure across multiple cloud environments.
Another notable feature of Chef is its use of cookbooks and recipes. A cookbook in Chef is a collection of recipes and instructions describing how to achieve a certain configuration. This approach allows for high modularity and reusability, as the same cookbook can configure multiple nodes.
Chef also provides a mechanism for tracking the current status of a machine, ensuring that all elements are in the right place and functioning as expected. This feature is particularly useful for maintaining consistency across large-scale infrastructures.
In conclusion, Chef is a powerful and flexible tool for DevOps automation. Its ability to manage diverse operating systems, integrate with cloud technologies, and automate configuration management through cookbooks and recipes makes it an invaluable asset for any DevOps professional.
In the sphere of DevOps automation, Vagrant is a tool that has carved out a significant niche for itself. Developed by HashiCorp, Vagrant is a tool for building and managing virtual machine environments in a single workflow. It’s designed to simplify setting up a development environment, making it easier for developers to create and manage complex applications.
Vagrant’s primary function is to provide a simple, consistent workflow for building and managing virtual machine environments. It does this using a declarative configuration file describing all the requirements for a development environment. This file, known as a Vagrantfile, can be version controlled and shared among team members, ensuring that everyone is working in the same environment.
One of the key strengths of Vagrant is its ability to increase production parity. By providing the same operating system, packages, users, and configurations across all development environments, Vagrant ensures that the “works on my machine” excuse becomes a thing of the past.
Vagrant integrates seamlessly with other DevOps tools. It can work with provisioning tools such as shell scripts, Chef, or Puppet to automatically install and configure software on the virtual machine. This integration makes Vagrant a powerful tool for managing complex, multi-tier applications.
Another notable feature of Vagrant is its support for multiple providers. Vagrant can manage virtual machines hosted on providers like VirtualBox, VMware, AWS, and more. This flexibility allows developers to work in the environment that best suits their needs, whether a local VM, a cloud instance, or a container.
In conclusion, Vagrant is a powerful tool in the DevOps automation toolkit. Its ability to simplify the setup of development environments, increase production parity, integrate with other DevOps tools, and support multiple providers makes it indispensable for any DevOps professional.
Choosing the Right DevOps Automation Tools
In the vast landscape of DevOps automation, the array of tools available can be overwhelming. Each tool has strengths, and the right choice depends on your organization’s needs and context. Here are some key considerations when choosing the right DevOps automation tools.
Understand Your Needs
Before diving into the sea of tools, it’s crucial to understand your organization’s specific needs. What are the challenges you’re trying to address? What are your goals for DevOps automation? Understanding these needs will help you identify the features and capabilities that are most important to you.
DevOps is all about collaboration; your tools should facilitate this. Look for tools for seamless collaboration across development, testing, and deployment. This might mean choosing tools that integrate well with each other, or it might mean choosing a suite of tools from the same vendor.
Capture Every Request
No changes should occur outside the established process in a well-functioning DevOps environment. Choose tools that capture every request for new or changed software, ensuring that all changes are tracked and managed through DevOps.
Consider Agile and Kanban Project Management
Agile and Kanban project management methodologies align well with the principles of DevOps. Tools that support these methodologies can help manage work in progress, balance flow-based approaches, and provide visibility into the development cycle.
Tools that log metrics on both manual and automated processes can provide valuable insights into the productivity of your DevOps processes. These insights can help you identify areas for improvement and measure the impact of changes.
Automated testing is a crucial component of DevOps. Choose tools that support automated testing and test data provisioning, ensuring that testing is continuous and integrated into the DevOps process.
Continuous feedback is a cornerstone of DevOps. Look for tools that support continuous feedback loops, allowing for ongoing improvement and adaptation.
In conclusion, choosing the right DevOps automation tools is critical in your DevOps journey. You can select the tools that best support your organization’s DevOps goals by understanding your needs, prioritizing collaboration, capturing every request, considering Agile and Kanban methodologies, logging metrics, automating testing, and enabling continuous feedback.
The Impact of DevOps Automation on Businesses
DevOps automation has revolutionized how businesses operate, bringing about significant changes in various business operations. Here are some of the ways DevOps automation impacts businesses.
DevOps automation accelerates the development and deployment of software solutions. By automating repetitive tasks, teams can focus on more complex issues, leading to faster development and deployment of solutions.
Increased Efficiency and ROI
DevOps automation increases efficiency by streamlining processes and eliminating manual errors. This increased efficiency can lead to a higher return on investment (ROI) as resources are used more effectively.
Improved Customer Experience
By enabling faster deployment of solutions and ensuring high-quality software, DevOps automation can significantly improve the customer experience. Customers benefit from faster, more reliable services, which can lead to increased customer satisfaction and loyalty.
DevOps automation fosters a culture of continuous improvement. Automated testing and continuous integration and deployment allow for constant feedback, which can be used to make ongoing improvements.
Reduced Failures and Rollbacks
Through automated testing and continuous monitoring, DevOps automation can help reduce the number of failures and rollbacks. This leads to more stable and reliable software and services.
In conclusion, DevOps automation has a profound impact on businesses. It leads to faster solutions, increased efficiency and ROI, improved customer experience, continuous improvement, and reduced failures and rollbacks. By embracing DevOps automation, businesses can stay competitive in today’s fast-paced digital world.
DevOps automation has undeniably become a game-changer in software development and operations. It has streamlined processes and significantly increased efficiency, productivity, and ROI. The tools discussed in this article, such as Terraform, Chef, and Vagrant, are just a few examples of the many DevOps automation tools available today.
The choice of tools depends largely on your organization’s specific needs and requirements. However, irrespective of the tools you choose, the ultimate goal remains: to foster a culture of collaboration and continuous improvement, leading to faster and more reliable delivery of high-quality software.
In conclusion, DevOps automation is no longer a luxury but a necessity in today’s fast-paced digital world. By embracing DevOps automation, organizations can stay ahead of the curve and ensure their survival and success in the increasingly competitive business landscape.