Mainframe Modernization: CI/CD Mastery | Skillshare Member Nuqui | Skillshare
Search

Playback Speed


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Mainframe Modernization: CI/CD Mastery

teacher avatar Skillshare Member Nuqui, Headline...

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

    • 1.

      Introduction

      16:45

    • 2.

      Lesson 1: What is CI/CD?

      9:48

    • 3.

      Lesson 2: Why CI/CD for Mainframes?

      10:47

    • 4.

      Lesson 3: Key Concepts of DevOps and Agile in Mainframes

      10:08

    • 5.

      Lesson 4: Overview of the CI/CD Pipeline for Mainframes

      12:15

    • 6.

      Lesson 1: Introduction to Version Control Systems

      12:10

    • 7.

      Lesson 2: Setting Up Git for Mainframe Code

      11:44

    • 8.

      Lesson 3: Basic Git Operations: Commit, Branch, Merge

      10:21

    • 9.

      Lesson 4: Migrating Legacy Code into Git

      12:08

    • 10.

      Lesson 1: Overview of Build Automation

      10:17

    • 11.

      Lesson 2: Setting Up Jenkins for Automated Builds

      11:20

    • 12.

      Lesson 3: Automating the Compilation and Linking Process

      10:27

    • 13.

      Lesson 4: Integrating Build Automation into CI/CD Pipelines

      10:05

    • 14.

      Lesson 1: The Importance of Automated Testing

      10:01

    • 15.

      Lesson 2: Setting Up Automated Unit Testing for Mainframes

      10:42

    • 16.

      Lesson 3: Automating Integration and Regression Testing

      12:26

    • 17.

      Lesson 4: Incorporating Test Automation into the CI/CD Pipeline

      11:09

    • 18.

      Lesson 1: What is Continuous Integration?

      11:42

    • 19.

      Lesson 2: Configuring Jenkins for Continuous Integration

      9:56

    • 20.

      Lesson 3: Triggering Automated Builds and Tests

      10:26

    • 21.

      Lesson 4: Best Practices for CI Pipelines in Mainframes

      10:47

    • 22.

      Lesson 1: Introduction to Continuous Delivery (CD)

      11:35

    • 23.

      Lesson 2: Automating Mainframe Deployments

      10:35

    • 24.

      Lesson 3: Setting Up Rollback Mechanisms

      10:38

    • 25.

      Lesson 4: Deploying to Staging and Production Environments

      11:50

    • 26.

      Lesson 1: Security Considerations in CI/CD

      12:13

    • 27.

      Lesson 2: Compliance and Regulatory Requirements

      11:38

    • 28.

      Lesson 3: Access Control and Auditing in CI/CD Pipelines

      11:49

    • 29.

      Lesson 4: Security Testing in the CI/CD Pipeline

      12:28

    • 30.

      Lesson 1: Introduction to Pipeline Monitoring

      10:48

    • 31.

      Lesson 2: Setting Up Monitoring and Logging Tools

      11:39

    • 32.

      Lesson 3: Troubleshooting and Debugging CI/CD Pipelines

      10:50

    • 33.

      Lesson 4: Using Feedback Loops to Optimize Pipelines

      10:44

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.

2

Students

--

Project

About This Class

Mainframe Modernization: CI/CD Mastery

Class Overview

In Mainframe Modernization: CI/CD Mastery, you’ll learn how to implement Continuous Integration and Continuous Delivery (CI/CD) pipelines tailored for mainframe systems. This course bridges the gap between legacy mainframe environments and modern DevOps practices, empowering you to streamline workflows, boost productivity, and future-proof your organization.

What You’ll Learn

By the end of this class, you’ll master:

  • Designing CI/CD pipelines for mainframe environments.
  • Automating builds, tests, and deployments to improve efficiency.
  • Implementing version control systems like Git with mainframe codebases.
  • Integrating security and compliance checks into CI/CD pipelines.
  • Optimizing and scaling pipelines for large, complex systems.

You’ll also gain access to the companion book, packed with practical insights and reference materials.

Why Take This Class?

  • Transform Legacy Workflows: Learn how to modernize mainframe processes with CI/CD, a game-changer for organizations.
  • Increase Efficiency: Streamline builds, testing, and deployments to save time and reduce errors.
  • Career Advancement: Gain sought-after skills that bridge traditional mainframe knowledge with modern DevOps practices.
  • Real-World Applications: Apply what you learn to optimize mission-critical systems in industries like finance, healthcare, and government.

Who This Class Is For

This class is perfect for:

  • Mainframe developers seeking to adopt modern practices.
  • DevOps engineers integrating mainframes into enterprise pipelines.
  • IT managers driving digital transformation.

Prerequisites: Familiarity with mainframe environments (e.g., COBOL, z/OS) and basic DevOps concepts is helpful but not required.

Materials and Resources

You’ll need:

  • A computer with internet access.
  • Familiarity with basic version control and DevOps tools.
  • The Mainframe Modernization: CI/CD Mastery companion book (provided with enrollment).

Let's dive in now and take the first step toward mastering mainframe modernization with CI/CD!

Meet Your Teacher

Teacher Profile Image

Skillshare Member Nuqui

Headline...

Teacher

I am a retired Mainframe Systems Programmer (Specialist), now using my time to write books and create online courses. My interests are Mainframes (of course!), and writing Self Help books and Food Recipe books. I like to read Science Fiction and Fantasy books. I also like to watch Science Fiction movies (I'm a Trekkie, not so much a Star Wars fan).

I have over 30 years of experience on Mainframe systems, as a Systems Programmer, Project Manager and Compute Infrastructure Head, specializing on Mainframe infrastructure and z/OS operating system. I have worked for Service Bureaus, Financial Institutions and Outsourcing Service Providers.

See full profile

Level: Intermediate

Class Ratings

Expectations Met?
    Exceeded!
  • 0%
  • Yes
  • 0%
  • Somewhat
  • 0%
  • Not really
  • 0%

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.

Transcripts

1. Introduction: Welcome to mainframe Modernization, AICD Mastering. My name is Ricardo Nuki I'm your instructor for this course. Overall course goal. The goal of this course is to equip mainframe professionals with the knowledge, skills and tools necessary to implement continuous integration slash Continuous Delivery or CICD pipelines in mainframe environment. By the end of the course, students will be able to design, automate, and manage CICD workflows specifically tailored for mainframe systems, leading to improved efficiency, faster deployment cycles, enhance code quality, and greater system reliability. This course aims to bridge the gap between traditional mainframe operations and modern Devo practices, ensuring that students can successfully integrate automated CICD processes without compromising the stability, security, or compliance of their mainframe infrastructures. Skills, knowledge, and abilities. The goal of the course is to focus on providing students with the skills, knowledge, and abilities necessary to successfully implement and manage continuous integration slash Continuous Delivery Pipe CICD pipelines for mainframe systems. By the end of this course, the students will have mastered the following. One, understanding of CICD principles in the mainframe context. Students will have a clear grasp of modern CICD concepts and how this can be applied to legacy mainframe environments. They will understand the full lifecycle of continuous integration, testing, deployment, and delivery specific to mainframes. Two, building and automating mainframe CICD pipelines. Students who learn how to design and set up automated CICD pipelines tailored for mainframe environments from initial code integration to automated testing, deployment, and delivery. Three, mastering mainframe specific tools for CICD. They will gain proficiency in the mainframe specific tools needed, build and manage CICD pipelines, such as IBM, Urban Co Deploy, Jenkins, Humpueopas and others. Students will know how to integrate these tools into their existing mainframe environment. Four, version control and code management. Students will learn best practices for managing mainframe source code with modern version control systems. For example, give and understand how to handle branching, merging, and versioning in a mainframe CICD pipeline. Five, automated testing and quality assurance. Students will learn how to implement automated testing processes like unit test, integration test, and regression test or mainframe applications as part of the CICD pipeline. They will understand how to ensure that code quality is maintained throughout the deployment process. Six, ensuring security and compliance in CICD pipelines. Students will understand how to secure CICD pipelines and ensure that security and compliance are upheld even in highly regulated environments. This includes managing access controls, auditing, and security reviews as part of the automated pipeline. Seven, orchestrating CICD in hybrid cloud environments. They will be able to integrate mainframes into hybrid environments where Cloud infrastructure plays a role, ensuring that CICD pipelines span both mainframe and non mainframe systems seamlessly. Eight, troubleshooting and optimizing CICD pipelines. Students will acquire troubleshooting skills to identify bottlenecks or failures within their CICD pipelines and learn how to optimize them for better efficiency and reliability. Nine, managing change and team collaboration. They will gain strategies for managing team collaboration during the implementation of CICD pipelines, including how to foster a developed culture in mainframe centric organizations and gain buy in from teams that are resistant to change. Ten, real world application and case studies. Students will work through real world scenarios and case studies to see how CICD is successfully implemented in mainframe environment. They will be equipped with templates, checklists and practical examples to implement CICD in their own organization. By the end of the course, students will be confident in their ability to implement, manage, and optimize automated CICD pipelines for mainframe system, ensuring their organization's mainframe infrastructure is future ready, more efficient, and aligned with modern Devos practices. Here are eight specific steps or stages that people must follow when implementing continuous integration slash Continuous Delivery or CICD on mainframes. One, establishing a version control system or VCS for mainframe code. The key action is to introduce a modern version control system such as Git manage mainframe source code. Also migrate legacy code from traditional repositories, for example, endeavor or Change Man into the VCS, ensuring that the entire team understands how to use it. Why is it important? A VCS is essential for collaboration, code management, and automated processing. It serves as the backbone of CICD pipelines enabling continuous integration and version tracking. Second, automating the build process. Key actions include set up automated build processes for mainframe applications using tools like Jenkins, Apretopaz or IBM Urban code build. Configure scripts to compile code, link objects, and create deployable mainframe components automatically when changes are committed to the repository. Why is it important? Automating the build process is crucial for reducing manual errors and ensuring that all changes are compiled and prepared for testing efficiency. Third, implementing automated testing. The actions include incorporate automated testing into the pipeline, including unit tests, integration test, regression test, and possibly performance tests. Utilize tools like IBM Rationale, DA endeavor or custom scripts to automate testing specific to the mainframe environment. Why is it important? Automated testing ensures that new code changes are properly validated before moving to production, reducing the risk of defects and system instability. Fourth, continuous integration or CI setup. Key actions include integrate tools like Jenkins or GitLab CI with a version control system to automatically trigger the build and test process whenever new code is pushed to the repository. Ensure that the CI system provides feedback on the success or failure of builds and tests, notifying developers in real time. Why is it important? CI allows for rapid detection of code issues, encouraging a more iterative and efficient development process. The goal is to integrate code frequently to avoid integration problems later. Fifth, automating mainframe deployments. The actions include set up automated deployment scripts or tools, for example, IBM Urban code Deploy Jenkins or custom rec scripts to handle the deployment of mainframe applications to testing, staging and production environments. Establish deployment gates for compliance, security checks, and manual approvals where necessary. Why is it important? Automated deployment reduces manual error, accelerates release cycles, and ensures consistency in how code is smooth across environments. But six, continuous delivery or CD with rollback mechanisms. Actions include implement pipelines that can deliver changes continuously to production environment through minimal manual intervention. Include rollback mechanisms and strategies in case of failure, ensuring that deployments can be reversed without causing significant system disruptions. Why is it important? Continuous delivery improves the overall flow of updates, ensuring that new features or fixes can be delivered to production quickly and reliably. Rollback mechanisms mitigate risks. Seven, monitoring, logging and feedback loops. The actions include set up monitoring tools to set up the performance of deployments and identify issues post deployment. For example, IBM, Omegamon or Splum. Implement automated alerts for failures and integrate feedback loops to continuously improve the CICD pipeline. Why is it important? Ongoing monitoring ensures that issues are detected early in production and feedback loops provide data to improve future deployment and deployment cycles. A, managing team collaboration and DevOps culture. The actions include foster collaboration between development and operations teams to ensure everyone is aligned on CICD processes. Train teams on best practices for CICD in mainframe environments and encourage a culture of continuous improvement and automation. Why is it important? Successful CICD implementation relies not just on technology, but on a collaborative team environment where both Deb and ups work closely to improve processes. The course is divided into eight modules as follows. Module one, introduction to CICD for mainframes. This module will introduce the core principles of CICD and how they apply to mainframe environment. It will cover the basics of continuous integration, continuous delivery, and the importance of modernization in legacy system. Learning Objective, by the end of the module, you will be able to explain the core principles of CICD and describe how they apply to mainframe environment. Module two, setting up version control for mainframe code. Students will learn how to implement and manage version control systems like Git in a mainframe context. This module will reach the importance of source control, de branching strategies, and how to migrate mainframe code from traditional repositories. Learning Objective, by the end of the module, you will be able to set up a version control system for mainframe code and demonstrate the process upcommitting, branching and merging code using Git. Module three, automating mainframe builds. This module covers how to set up automated build processes for mainframe applications. Students will learn how to configure tools like Jenkins, IBM, Urban code build or custom scripts to automate the compilation and linking of mainframe code basis. Learning Objective. By the end of the module, you will be able to configure an automated build process for a mainframe application and verify successful compilation and linking of code. Module four, implementing automated testing for mainframes. In this module, students will learn how to implement automated testing for unit integration and regression for mainframe applications. They will explore tools and strategies to ensure code quality and stability throughout the development cycle. Learning Objective, by the end of the module, you will be able to create and integrate automated testing for unit integration and regression test into the CICD pipeline for a mainframe application. Module five, continuous integration or CI pipeline setup. Students will learn how to set up and configure a continuous integration or CI pipeline or mainframes using tools like Jenkins or GitLab CI. This module will focus on automating builds tests and feedback loops for developers. Learning objective, by the end of the module, you will be able to configure a CI pipeline using tools like Jenkins or GitLab CI and trigger automated build and test upon code commit Module six, automating deployments and continuous delivery CD. This module covers the automation of deployment across environment, for example, testing, staging and production using tools like IBM Urban code Deploy, it will also teach students how to establish rollback mechanisms for safe deployments. Learning Objective, by the end of the module, you will be able to set up an automated deployment process for mainframe applications and successfully deploy changes to a staging or production environment with rollback mechanisms in place. Module seven, ensuring security and compliance in CICD pipelines. Students will learn how to integrate security measures and compliance checks into their CICD pipelines to meet the regulatory and security standards specific to mainframe environments. Learning Objective, by the end of the module, you will be able to implement security controls and compliance checks into a CICD pipeline, ensuring that automating processes meet regulatory requirements. Module eight, monitoring, feedback and optimizing pipelines. In the final module, students will explore monitoring and logging best practices. They will learn how to use tools to monitor deployments, troubleshoot issues, and continuously optimize their CICD pipelines based on feedback loops. Learning objective, by the end of the module, you will be able to set up monitoring and logging tools for CICD pipelines and use feedback loops to identify and optimize inefficiencies in the pipeline. Let's start. Um, 2. Lesson 1: What is CI/CD?: Welcome to Module one, Introduction to CICD for mainframes. In this module, you will learn the basics of continuous integration or CI and continuous delivery or CD and how these practices apply to mainframe environments. By the end of the module, you'll have a solid understanding of the benefit CICD brings to software development and deployment on mainframes. Lesson one, what is CICD? Welcome to the first lesson of mainframe modernization, CICD mastery. In this lesson, we're going to explore the foundational concepts behind continuous integration or CI and continuous delivery or CD. Before we dive into implementing CICD on mainframes, it is critical to have a solid understanding of what these terms mean, how they differ, and why they're so transformative in modern IP environments, including for mainframes. Let's break it down step by step. What is continuous integration or CI? Continuous integration or CI is a software development practice where code changes are automatically integrated into a shared repository multiple times a day. This ensures that small updates are continuously tested and validated through automated builds and test. Here's how CI works in a typical environment. First, developers write code and make frequent commits to a central repository. Second, an automated bill is triggered whenever new code is pushed, compiling the application and checking for issues like syntax errors. Then automated tests are run to validate the new code, ensuring it doesn't introduce bugs or break the existing application. Real time feedback is provided to developers so they can immediately address any issues. In short, CI is about early and frequent integration of code to catch problems sooner rather than later. This can be a game changer for mainframe development, which traditionally relies on long slow release cycles where changes are batched and tested infrequently. Let's take an example. Let's say you're working on a COVA program that processes financial transactions. In a traditional environment, you might develop your changes four weeks before running a comprehensive test. However, with CI, every time you commit a small update, perhaps a change to a specific calculation or a new reporting feature, an automated process immediately builds and tests the application, catching bugs early. This reduces the risk of error slipping into production. What is continuous delivery or CD? Continuous delivery or City builds on the foundation of CI. Once the code is integrated, tested, and validated through CI, City automates the next stage, delivering those changes to production or near production environments. In simpler terms, City make sure that your code is always in a deployable state. With City, you can automatically deploy the validated code to a staging or testing environment. Two, run additional tests or security checks to ensure compliance. Three, manually approve or set up an automated process to move the code to production. The goal of City is to streamline the entire delivery process so that updates can be deployed rapidly and with confidence, allowing businesses to push features or fixes to production frequently, often multiple times a day. Let's take an example. Imagine your team has just added a critical security patch to a mainframe application that handles sensitive customer data. Using CD, once the code passes all tests in the CI phase, it can automatically be deployed to a staging environment where you can run final approval tests. If everything checks out, you can push it live with a click of a button, minimizing downtime and ensuring security updates are applied quickly. What are the differences between CI and CD? Though CI and CD are often discussed together, it's important to understand their distinct roles. CI or continuous integration focuses on automating the process of integrating code and ensuring it passes test. CD or continuous delivery, on the other hand, takes it a step further automating the process of deploying the tested code into environment and making it ready for production. Think of it this way. PI is about integrating and validating code in a consistent automated way and CD is about delivering and deploying that validated code as quickly as possible without manual intervention. For mainframe systems, this combination of CI and CD can lead to much faster and more reliable deployments compared to traditional methods where code changes are often delayed by slow manual testing and deployment processes. Key benefits of adopting CICD in any environment. Implementing CICD can radically transform how you develop and deploy software. Here are the most notable benefits. First, faster feedback cycles. CI enables early identification of bugs by automating tests as soon as new code is pushed. This allows developers to fix issues immediately rather than waiting until the end of a long development cycle. Second, higher code quality. Automated testing during CICD pipelines ensures that code meets quality standards before it reaches production. This reduces bugs, downtime, and system crashes. Critical in environments like banking where mainframes often operate. Third, reduce deployment risks. With CD, code is deployed in small increments, making it easier to isolate and fix issues. If something does go wrong, fallback mechanisms can quickly reverse changes minimizing the impact. Fourth, increase productivity. Automating builds, tests and deployments allow your team to focus on writing and improving code rather than managing manual processes. This efficiency is vital for keeping mainframe applications up to date in competitive industries. Fifth, more frequent releases. By enabling faster, more reliable deployments, the ICD allows for more frequent feature releases, security patches, and bug fixes, improving the responsiveness of your system to market demands. Key takeaways from this lesson. CI helps integrate and test code automatically and frequently. CD automates the delivery and deployment process. Ensuring code is always in a deployable state. Together, CICD reduces risks, accelerates feedback, improves code quality, and allows for faster, more reliable software releases. Learning activity. Reflect on your current development process. Are you using any automation tools for code integration or deployment on your mainframe? What challenges do you face with your existing process? Consider a recent change you made to a mainframe application. Imagine how CI NCD would have made that process faster, safer and more efficient. Write down the steps where automation could have reduced manual intervention or errors. What's next? In the next lesson, we'll dive into Y CICD for mainframes. We'll explore the challenges of traditional mainframe development cycles and how CICD can dramatically accelerate the development and deployment of mainframe applications. We'll also address common misconceptions that may be holding your team back from adopting these practices. 3. Lesson 2: Why CI/CD for Mainframes?: Lesson two, y CI CD for many frames. Welcome to lesson two of Module one. In the first lesson, we cover the basics of continuous integration orCI and continuous delivery CD. Now it's time to dig deeper into why CICD is particularly valuable in the context of mainframes. If you work in mainframe environments for any length of time, you know that they're often viewed as the untouchables of IT, solid, reliable, but notoriously slow to change. They will explore the challenges posed by traditional mainframe development cycles, how CICD can solve these problems and debunk some common misconceptions might be holding your team back from fully embracing modern developed practices. The challenges of traditional mainframe development cycles. Let's start by acknowledging the elephant in the room. Mainframe development has historically been slow, methodical, and often rigid. This is not by accident. It stems from the critical nature of many mainframe systems, particularly in industries like banking, government, and healthcare, but downtime is not an option. Here are some of the key challenges that arise from traditional mainframe development cycles. Long development and release cycles. Mainframe development typically follows waterfall approach where changes are designed, developed, tested, and released in large infrequent batches. A change that takes a few days to code might take weeks or even months to move to testing, approval, and deployment. Let's take an example. Imagine a banking institution needs to update its transaction processing system to handle new compliance regulations. While the coding itself takes only a few weeks, the extensive testing and approvals required to ensure the system's stability and security can push the release timeline to six months or more. Siloed teams, development and operation teams often work in silos. Developers create the code and once it's ready, it gets past operations to test and deploy. This lack of integration can cause delays and misunderstandings between teams. Another example, if a bug is found in a release, the process of identifying the issue, communicating it between development and operations, fixing it, and re testing can result in unnecessary delays. This is especially frustrating in environments where time sensitive updates are critical. A manual testing and deployment. Traditional mainframe development often relies on manual testing and deployment processes, which increases the risk of human error and slows down release cycles. Every change must be manually validated, which is not only time consuming, but can also be inconsistent. Let's take an example. Picture a government agency that needs to roll out a new feature in its tax processing system. Because the testing and deployment processes are manual, even small changes take a significant amount of time to validate, increasing the risk of missed deadlines or buds slipping into production. How CICD can accelerate mainframe development and deployment. Now that we look at the challenges, let's turn to the solutions, CICD. Implementing CICD in mainframe environments addresses many of the pain points we just discussed. Here's how one, shorter development and release cycles. With CIC, changes are integrated and tested continuously. This means developers can push smaller incremental updates frequently rather than waiting for a large bundled release. Automated testing ensures that each update is validated quickly, allowing for much faster feedback and resolution of issues. Let's take an example. Suppose a retail company running its inventory management on a mainframe system implements CICD. Now, instead of qterly updates, take months to test and release, team can deploy small feature improvements or bug fixes weekly, greatly enhancing the agility of the business. Integrated teams and improved collaboration. CICD encourages DevOps practices, which breakdown silos between development and operations teams. Developers and operations work together throughout the entire process from coding to deployment, ensuring smoother handoffs and quicker issue resolution. Tools like Jenkins and IBM Urban code allow both teams to operate from a single pipeline, making it easier to track progress and fix issues collaboratively. Take an example. Financial Services Company integrates its development and operations teams through CICD. Now, if a deployment issue arises, both teams can collaborate in real time within the same pipeline, reducing the time it takes to fix the issue from days to hours. Automated testing and deployment. One of the greatest benefits of CICD is automation. Testing and deployment, two of the most time consuming parts of traditional mainframe development can be automated. Automated testing ensures that all code changes are immediately validated and automated deployment moves the tested code to the various environments like staging and production with minimal manual intervention. Let's take an example. Let's say a healthcare provider needs to update their patient record system. With CICD in place, the entire testing and deployment process can be automated, ensuring that changes are rolled out quickly without disrupting patient services. Common misconceptions about CICD on mainframe. Despite the clear benefit, some organizations still hesitate to adopt CICD for their mainframes due to misconceptions. Let's address a few of the most common ones. Mainframes are too stable for CICD. Some believe that because mainframes are highly stable, the traditional way of doing things works just fine and there's no need for CICD. Two, mainframes can't handle automation. There's a perception mainframes are too complex or old fashioned to handle modern automation tools. CICD is too risky for critical systems. Some worry that adopting CICD on mission critical mainframe systems will introduce too much change and risk. Addressing these misconceptions. While stability is crucial, that stability doesn't have to come at a cost of agility. The ICD allows you to maintain stability while reducing the risk of errors and speeding up releases. Mainframes can absolutely be integrated with tools like Jenkins, Git or urban code to enable automated testing, builds and deployments. In fact, many organizations are already doing this successfully. CICD actually reduces risk by allowing small incremental updates rather than large risky changes. Automation also reduces the possibility of human error during testing and deployment. Takeaways from this lesson. Traditional mainframe development cycles are often slow and rigid, but CICD offers a way speed up development and deployment while maintaining stability. CICD integrates development and operations team, breaking down silos and improving collaboration. Automated testing and deployment can significantly reduce the time and effort needed to release changes on mainframe systems. Misconceptions about CICD on mainframes are common, but many organizations are successfully adopting these practices to modernize their workflows. Learning activity. Think about a recent update or bug stick you were involved in deploying on your mainframe system. How long did it take from development to deployment? Where were the major bottlenecks? How could automated testing, continuous integration or continuous delivery have reduced the time and effort involved in that deployment? Write down your answers and consider how CICD could transform the specific challenges your team faces. What's next? In the next lesson, we'll introduce the key concepts of DevOps and agile in mainframes. You'll learn how DevOps culture and agile practices enhance collaboration between development and operations teams and how adopting these principles can further optimize your mainframe environment. 4. Lesson 3: Key Concepts of DevOps and Agile in Mainframes: Lesson three, key concepts of DevOps and agile in mainframes. Welcome to lesson three of Module one. So far, we've explored what CICD is and why it's essential for mainframes. In today's lesson, we're going to zoom in on two crucial concepts that make CICD not just possible but successful DevOps and agile. If you're coming from a traditional mainframe environment, these terms might seem more at home in the world of cloud based applications. However, devops agile practices can significantly enhance mainframe development processes, especially when combined with CICD. By the end of this lesson, you'll understand how adapting these cultures and practices can improve collaboration, streamline workflow, and ultimately modernize how you work with mainframes. Introduction to DevOps culture and mainframes. Let's start with DevOps. The word Devops combines development and operations, but it represents much more than just merging two departments. DevOps is a cultural shift, a philosophy that emphasizes collaboration, automation, and shared responsibility across the entire software delivery life cycle. What is Devos? DevOps focuses on breaking down the silos between development teams and operations teams. Instead of developers writing code and throwing it over the wall to operations for deployment, DevOps promotes continuous collaboration from start to finish. The ultimate goal of DevOps is to deliver software more rapidly with higher quality and with less risk. Let's take an example. In a traditional mainframe environment, developers may write cover programs, but it's the operations team that handles testing, deployment and maintenance. This often leads to bottlenecks. DevOps would have these two teams working together from the start. When a new feature is developed, the operations team is already aware of what it needs, how it will be deployed, and any potential risks. How does DevOp apply to mainframe? While Devo has its roots in cloud based and distributed systems, it's increasingly important in mainframe environments. Mainframe applications can be complex, mission critical, and intertwined with multiple systems. This makes the collaboration Devox promotes even more valuable. Automating workflows, creating a shared understanding between teams, and fostering continuous improvements are just as relevant in mainframes as in any other system. Let's take an example. Imagine an airline that depends on mainframes to handle reservations. Under DevOps, developers and operations can work together to deploy updates like a new customer rewards feature smoothly. Automated testing and deployment ensure that the system stays stable and there's no disruption in service. Agile practices in mainframes. Now let's talk about Agile. You might have heard of Agile in the context of small, flexible teams, building web or mobile applications, but Agile can also be adapted to the mainframe world. What is Agile? Agile is a project management and development methodology that emphasizes flexibility, iterative progress, and continuous feedback. Instead of long rigid development cycles, the changes are implemented in big batches, Agile promotes working in short iterative cycles or sprints. Each print delivers a small workable piece of the project which is reviewed, tested, and improved upon based on feedback. Let's take an example. In a traditional mainframe environment, updates to a billing system may be planned over months and released as a major update. In contrast, with Agile, a development team can introduce smaller incremental changes over a series of two weeks prints. Each change is tested and refined before the next print begins. Agile in mainframe development. Agile allows you to release smaller features or updates more frequently, which is especially helpful in large mainframe environments where big changes can be risk. By continuously testing and refining features in short cycles, Agile helps reduce bugs, improve software quality, and deliver value faster to the business. Agile's core principles which are continuous improvement, collaboration, and flexibility can be applied even complex mainframe systems. An example, a bank using Agile practices in its mainframe development cycles can update its loan processing system gradually over several sprints. Each sprint might focus on adding a new feature, running tests, and receiving feedback from users, allowing the team to catch and fix issues early on before a full rollout. How Devo enhances collaboration between development and operations teams. Now that we've explored what Devos and Agile are, let's see how Devov specifically enhances collaboration in mainframe environments. Remember, the old way of doing things where development and operations were two distinct and separate groups often leads to miscommunication, delays, and frustration. Here's how Devos transforms that. First, shared responsibility. In a developed culture, development and operations team share responsibility for the success of a project. This means both teams are involved throughout the entire development cycle from planning to deployment and beyond. An example, in a mainframe environment, this might look like developers working closely with operation staff to test new cobol features under real world conditions, reducing the risk of deployment failures. Two, automation bridges the gap. Automation tools like Jenkins, Urban code, and others provide a shared platform where both teams can work. Automating the testing and development process means less back and forth between developers and operations, fewer manual errors and faster releases. An example, automating test suites for a healthcare system running on main franes ensures that both developers and operations know exactly when a change is ready for production, eliminating the uncertainty that comes with manual processing. Three, continuous feedback and improvement, develops encourages continuous feedback loops. This means that every team gets real time information about how the system is performing and can respond quickly to fixed issues. For mainframes, this is invaluable in preventing downtime, addressing bugs faster, and ensuring system reliability. An example, in a retail company's inventory system, if a bug is introduced during a new feature release, both development and operations team can see real time data and logs, allowing them to troubleshoot and resolve issues together before they escalate. Key takeaways from this lesson, DevOps promotes collaboration and shared responsibility between development and operations team, leading to faster, more reliable releases. Agile enable short iterative cycles that reduce risks and improve software quality through continuous feedback. Both Devos and agile principles can be successfully applied to mainframe environments to break down silos, streamline workflow, and improve system performance. Automation is a key component of Devos, helping teams work together efficiently and reducing manual errors. Earning activity. Think about your current mainframe development and deployment process. Are development and operations teams working together throughout the life cycle of the project? Where are the biggest communication or process gaps? How could adopting DevOps practices or agile methods improve collaboration and speed up your release cycles? Write down your thoughts and consider how implementing automation or working in smaller iterative cycles could address some of the challenges you're currently facing. What's next? In the next lesson, we'll dive deeper into the overview of the CICD pipeline for mainframes. You learn the step by step breakdown of a typical CICD pipeline and how each stage translates specifically to the mainframe world. Get ready to see how a modern pipeline can transform your mainframe processes. 5. Lesson 4: Overview of the CI/CD Pipeline for Mainframes: Lesson four, overview of the CICD pipeline for mainframes. Welcome to lesson four of Module one. In this lesson, we're going to explore the CICD pipeline in detail, breaking down each step and showing how it translates to mainframe systems. This is where everything we've covered so far starts to come together as we move from understanding the theory behind CICD to to see how it works in practice. By the end of this lesson, we'll have a clear understanding of the various stages in a typical CICD pipeline and you'll be able to see how these steps apply specifically to mainframe environment. Whether you're working with CBO, PL one, or other mainframe languages, the principle remains the same, let's dive in. What is a CICD pipeline? Let's start with a basic definition. A CICD pipeline is a series of automated steps take code from development to production, ensuring quality and reducing manual errors along the way. Think of the pipeline as a manufacturing line for your software. Code enters at one end and by the time it exits at the other end, it's been integrated, tested, built, and delivered to a live production environment, all with minimal human intervention. In the context of mainframes, the pipeline automates many of the manual processes that can slow down development, testing, and deployment, helping you deliver faster with more confidence. Step by step breakdown of a CICD pipeline. Now let's walk through the typical stages of a CICD pipeline. We'll cover each step in detail so you can see how it works and how it applies to your mainframe environment. Number one, code commit. What happens? This is where it all begins. Developers write code and commit their changes to a version control system or a VCS, such as Git, endeavor, or hangen. This triggers the pipeline. An example, let's say you're working on a new feature for your mainframe system that processes customer orders. You've written the code, tested it locally, and now you're ready to push it to the shared repository. When you hit Commit, the CICD pipeline automatically kicks into gear. How this translates to mainframe. Mainframe developers may be using traditional systems like Endeavor for code management, but the concept of version control remains critical. As we'll cover in later lessons using modern tools like Git or integrating existing VCS tools into CICD pipelines is the first step towards modernization. Two, continuous integration or CI. What happens? The next stage is continuous integration or CI. Here, the pipeline automatically integrates new code with the existing code base. This involves pulling the latest code from the repository and running automated builds and tests to ensure that everything still works as expected. An example, your new feature integrates customer discounts into the order processing system. The CI pipeline automatically tests this feature with the rest of the application to make sure nothing is broken, avoiding surprises down the road. How this translates to mainframes. In mainframes, automated testing is crucial. Instead of manually building and testing changes, which can be slow and error prone, the CI step compiles and runs automated tests on your mainframe code, whether it's CBO, BL one, or JCL. Tools like Jenkins or IBM Urban code build can automate this process seamlessly. Three, automated testing. What happens? Once the build is complete, the pipeline runs a series of automated tests. This typically includes unit tests, integration tests, and regression tests depending on your setup. An example, after committing your code, the pipeline automatically runs tests to ensure that your new discount feature calculates correctly across different scenarios such as different product categories or customer types. If something breaks, you'll know immediately. How this translates to mainframes. Testing on mainframes is often more complex due to dependencies on external systems. Automated testing helps reduce the manual burden. With modern CICD tools, you can automate testing at every stage from unit tests that check individual cobble modules to integration tests that ensure everything works together smoothly. Four, build and package. What happens? After the code has been tested, the pipeline moves to the build and package stage. This is where the code is compiled if necessary, and packaged into a deployable format ready for deployment. An example, imagine you're releasing a new batch processing system for financial transactions. The build process compiles all necessary code, links any dependencies, and packages it in a format ready for deployment to the mainframe. How this translates to mainframes. On mainframes, this stage involves compiling cobble or PL one programs, binding DV two packages, and linking JCL scripts and other files. The CICD pipeline ensures this happens automatically following the same rigorous process every time without manual intervention. Five, continuous delivery or CD. What happens? Continuous delivery is the next phase. Once the code has been built or packaged, it's automatically delivered to a staging environment where it undergoes further testing and validation. An example, your new customer order feature is deployed to a staging environment where it can be tested with real world data. Users can interact with it as if it's live, but without affecting production system. How this translates to mainframes. Mainframes traditionally involve multiple environments, development, testing, staging and production. CD automates the deployment process between these environments, ensuring that code moves seamlessly from one stage to the next without manual steps. This reduces deployment time and minimizes risk. Six, deployment to production. What happens? After everything has passed in the staging environment, the pipeline pushes the tested validated code to production. In some cases, this might involve a manual approval process, especially in highly regulated environments like banking or healthcare. One example, once your new feature is approved in staging, it's pushed to production, meaning all customers can now use the new discount feature in the live environment. How this translates to mainframes. For mainframes, production deployment can be the riskiest part of the process, especially if it involves mission critical systems. By automating the deployment process, CICD pipelines reduce the likelihood of errors and ensure that deployments happen consistently and reliably. You can even implement rollback mechanisms if something goes wrong. Seven, monitoring and feedback. What happens? After deployment, the pipeline doesn't stop. It monitors the application in production, tracking performance, errors, and user feedback. An example, you've deployed the new feature, but now the pipeline monitors its performance, ensuring that the system can handle the new discount logic under heavy user loads and tracking any bugs or issues that arise. How this translates to mainframe. Mainframes need robust monitoring tools to track performance after development. By integrating monitoring and logging tools into the CICD pipeline, you'll receive real time data on how your application performs, allowing you to quickly detect and resolve issues. How each stage translates to mainframe systems. As you can see, each stage of the CICD pipeline has direct relevance to mainframes, from version control to automated testing, from deployment to monitoring. Every step can be adapted to your mainframe environment. For code commit integration with traditional mainframe VCS tools, Endeavor or change Man or modern tools like Git. Continuous integration. Automating builds and tests using Jenkins, Urban code or similar tools. Automated testing, running cobol or PLO test every stage to ensure code quality. Build and package, compiling and packaging mainframe code automatically, reducing manual work. Continuous delivery, seamlessly moving code through different environments from development to production. Deployment, automated consistent and reliable production deployments with drawback mechanism. Monitoring, real time performance tracking to ensure system stability and early detection of issues. Key takeaways from this lesson. A CICD pipeline is a series of automated steps that take code from development to production with minimal manual intervention. Each stage of the pipeline, code commit, integration, testing, packaging, delivery, and deployment can be adapted to mainframe systems. Automating these stages reduces the risk of human error, speed up development and ensures more reliable releases. Learning activity. Think about your current development and deployment process for your mainframe environment. Which stages of the CICD pipeline are currently manual? Where are the biggest bottlenecks in your current workflow? Write down, how automating each stage could improve your development speed and reduce errors. What's next? In the next lesson, we'll explore version control for mainframe code. You'll learn why version control is essential, how to integrate modern tools like gift, and how to migrate from traditional systems like Endeavor or change Man. This is a crucial step in setting up a CICD pipeline to get ready to dive in. 6. Lesson 1: Introduction to Version Control Systems: Module two. Setting a version control for mainframe code. In this module, we'll explore how version control systems for VCS are used to manage mainframe code. You'll learn about modern tools like Git, compare them to traditional mainframe systems like Endeavor and Change Man and understand why version control is crucial for CICD. Lesson one, introduction to Version control systems. Welcome to Lesson one of Module two. In this module, we're taking a crucial step towards modernizing your mainframe environment by focusing on version control systems or VCS. This lesson is all about the fundamentals, what version control is, why it's so important, and how modern tools like Git compare to traditional mainframe systems such as Endeavor and change Man. By the end of this lesson, you'll understand the role version control plays in both modern and legacy environment and you'll be ready to take the next step of setting up Git for your mainframe code base. Um, what is version control and why is it important? Let's begin by answering a simple but vital question. What is version control? At its core, a rsion control is a system that tracks changes to files over time. Think of it like a time machine for your code. You can go back to previous versions, see what's changed, and who made those changes. In a collaborative environment, version control allows multiple people to work on the same project without stepping on each other's does. Here is how it works. A cracking changes. Every time a developer makes a change to the code base, Version Control records that change as a new version or come in. Collaboration. With Version Control, developers can work on different parts of the same code base simultaneously. The system will track who is working on what and ensure that changes don't conflict with one another. Rollback. If something goes wrong, let's say a bug is introduced. Version control lets you roll back to a previous stable version of the code. Why is this so important in a mainframe environment? Mainframe of up and runs critical systems, banking, insurance, healthcare, and others, where stability is paramount. Version control ensures that you have a safety net when things go wrong. As mainframe teams modernize and become more agile, they need tools that support collaborative development, continuous integration and rapid deployments, all of which are made easier with version control. Let's take an example. Imagine you're working on a billing system for an insurance company. The system has hundreds of thousands of lines of CVL code. Now your team is tasked with adding a new feature that calculates customer discounts. Version control helps track every change that's made to this large complex code base. If a bug is introduced, you can easily track who made the change and when and quickly revert to an earlier stable version. Popular version control tools, Git versus traditional mainframe systems. Now that you understand why version control is so important, let's compare two types of version control system. Modern tools like Git and traditional mainframe systems like Endeavor and Change Man. The modern standard for version control. Git is the most popular version control system in modern development environments. It's widely used across various platforms, Cloud, mobile, desktop, and yes, even mainframes. Key features of Git one, distributed system it is a distributed version control system, meaning that every developer has a complete copy of the repository on their local system. This allows for fast operations and the ability to work offline. Two, branching. Bit Excels in creating branches for different features or bug fixes. You can isolate work on a branch and only merge it back into the main code once it's fully tested and ready. Three, collaboration, Gits distributed nature, makes it easy for large teams to collaborate. Changes are merged seamlessly in conflicts, like when two people edit the same file are resolved through Gits built in tools. Let's take an example. Let's say your team is working on multiple features at once. One group is updating the cobble logic for calculating insurance premium, while another group is adding a new module for customer rewards. Get allows each team to create their own branch, work in isolation, and merge changes when they're ready. This keeps the main code based table while different features are being developed. Endeavor and change Man, traditional mainframe systems. On the other side, we have traditional mainframe version control systems like Endeavor and Change Man. These tools were designed specifically for mainframe environments and have been used for decades to manage CBO, DL one, and JCL code bases. Key features of endeavor and change Man. Centralized control. Unlike Git, these tools are often centralized, meaning there's a single repository that developers work from. This ensures strict control over the code base, which can be important for highly regulated industries. Two, integration with mainframe workflows. These systems are tightly integrated with other mainframe processes, making them convenient for teams already familiar with mainframe specific workflows. Three, approval processes, Endeavor and change Man often include built in approval processes, ensuring the code is reviewed and approved before it's deployed to production. Let's take an example. Consider a government agency running a payroll system on a mainframe. Every line of code must be carefully reviewed and approved before it's deployed. With endeavor or changean, the approval process is built in ensuring compliance with strict government regulations. Git versus traditional systems, key differences. Let's summarize the key differences between Git and traditional mainframe systems for Git, distributed version control. Each developer has a full copy of the repository. Modern flexible branching model that supports multiple developers working on different features at the same time. Fast and efficient for teams of any size. Ndeavor or change man, centralized control with strict governance, often preferred for regulated industries, deeply integrated into mainframe workflows, which can be a strength, but also a limitation if you're trying to modernize. Traditional approval processes built in, but can be slower compared to Gits faster branching and merging. Let's take an example. Your team is working on a legacy system that processes millions of financial transactions daily. While Git would allow for past developments and flexibility, you may also need endeavor or change man to ensure the system meets strict compliance standards and that every change is properly reviewed before it's deployed. Why Git is crucial for CICD on mainframes. As we continue to move towards a modernized CICD approach on mainframes, Git is becoming the standard version control system. Here's why. One, support for DevOps and CICD. Git integrates seamlessly with DevOps tools like Jenkins, GitLab, and others. These tools rely on Git to trigger automated builds and tests, making it the backbone of a modern CICD pipeline. Two, spied and flexibility, its distributed nature allows for faster development cycles. Developers can work on isolated features, commit changes frequently, and merge them when ready, all without slowing down the overall development process. Three, collaboration, WIT supports collaborative development better than traditional systems. With its branching and merging capabilities, Git allows multiple teams to work on the same code base simultaneously without conflict. Let's take an example. Imagine you're building a mainframe application for an international bank. Your team is distributed across multiple countries, each working on different parts of the code. It allows these teams to collaborate seamlessly, ensuring that each change is tested and integrated automatically without disrupting the overall workflow. Um, key takeaways from this lesson. Version control systems track changes to your code, enabling collaboration, tracking, and rollbacks when necessary. Git is the modern standard for version control, providing distributed collaboration, flexible branching, and fast operations. Traditional mainframe systems like Endeavor and Change Man offer centralized control and are deeply integrated into legacy workflows. Git is essential for modern CICD practices, offering the flexibility and speed required for DevOps environment. Learning activity. Take a moment to reflect on your current Vrsion control practices. Are you using a traditional system like Endeavor or Change Man? What challenges do you face with your current Vrsion control system? How could using Git improve your collaboration, speed, and automation? Write down your thoughts and consider how a transition to Git might fit into your modernization efforts. What's next? In the next lesson, we'll get hands on with setting up Git for mainframe code. You'll learn step by step how to configure Git for mainframe repositories, install it in your environment, and start using it to manage your cobol, AL one or JCL code. Get ready to take the next step in modernizing your mainframe workflow. 7. Lesson 2: Setting Up Git for Mainframe Code: Lesson two, starting up Git for mainframe code. Welcome to Lesson two of Module two. In this lesson, we're getting hands on with GIP, one of the most powerful and widely used version control systems in the world. By the end of this lesson, you'll know how to set up Git for your mainframe code base, install and configure it in your environment, and begin managing your COBOL, EL one or JCL code with modern tools. Git may seem like a tool reserved for cloud and web developers, but it's a critical part of modernizing mainframes and moving towards Devops culture. Let's get started. Step by step guide for setting up Git for mainframe repositories. Before we dive into the details, let's take a high level look at the steps you'll follow to get Git up and running for your mainframe environment. We'll cover one, installing Git in your system, two, configuring Git with your repository, three, initializing Git repository for your mainframe code and four connecting your mainframe repository for remote server. Um, Step one, installing Git. First, we need to install GIF. If you're working in a hybrid environment that includes both mainframes and distributed systems, you'll install Git on the machine that interfaces with your mainframe. On Linux and Unix, you can install Git using the package manager. This is the instruction that you will issue to install Git. On Windows, download and install Git for Windows from the official Git website. Once Git is installed, verify the installation by opening a terminal and typing this instruction. This should return the installed version of GIP. Let's take an example. Imagine you're working with a hybrid system where developers code on a Linux server, but the code ultimately gets deployed to a ZOS mainframe. You install Git on the Linux server allowing developers to track changes and collaborate in real time. Step two, configuring Git or your repository. Once Git is installed, the next step is to configure it to work with your repository. This involves setting your username and email address so that Git can track who is making the changes. To set your username and email, you issue these two commands. Why is this important? Every commit in Git is associated with an author, setting this information ensures your changes are properly attributed. For large mainframe systems, tracking who made changes is critical for countability and collaboration. Step three, initializing a Git repository for mainframe code. Now that Git is installed and configured, let's initiate a Git repository for your mainframe code. One, navigate to the directory where your mainframe code resides. Two, initialize the Git repository. This creates a hidden dot git folder that tracks all changes in this directory. Three, add your code to the repository. This command stages all of your current code for version control. Four commit your changes. This saves the changes to the Git repository, making this as your first version. An example, Let's say you're working with a large cobol code base that handles transaction processing for a major financial institution. By initializing it, you start tracking every change made code to the code, allowing you to see a history of updates, revert to older versions, and collaborate more easily with your team. Step four, connecting to a remote Git repository. To collaborate effectively with your team, you'll want to connect your local repository to a remote repository, such as the one hosted on GitHub, Gitlab or private server. This allows everyone to share changes, work on different branches, and collaborate from different locations. Step one, create a repository on a platform like GitHub or Gitlab or your organization's private server. Two, copy the repository's URL. In your terminal, add the remote repository. This links your local Git repository to the remote one. Then push your local changes to the remote repository. Let's take an example. You're part of a globally distributed team working on a mainframe code base for a logistics company. By connecting your local Git repository to a remote one hosted on GitLab, your team members across different time zones can easily access and collaborate on the same code base, making changes without overwriting each other's work. Installing and configuring Git in mainframe environments. Git is typically installed on a machine that interfaces with your mainframe, such as a Linux server or a ZOS UIT system. However, in some cases, you may be hosting in an environment where direct Git access on the mainframe is possible through ZOS or other integration. Let's cover the installation process for a mainframe environment. Step one installing Git on ZOSUnix. First, access the ZOS uniq shell from a mainframe terminal. Use package management tools like um to install Git. Step two, configuring Git for mainframe workflows. Once Git is installed, you configure it just like you would on any other system. This ensures that every change you make from the mainframe environment is tracked properly. An example, a large retail company relies on a mainframe to handle online orders. The mainframe team integrates Git on a ZOS unique system to streamline their development processes. With Git installed directly on the mainframe, developers can track changes and collaborate in real time, even while working on legacy code. Troubleshooting and best practices. Here are common challenges you may encounter when setting up Git for mainframes and how to address them. First, file encoding issues. Mainframe files open use AbsdtEncoding, while most modern systems use ASCI or UTF eight. You'll need to ensure that any code moved between systems is properly converted. The solution is to use tools like I Convert or ICON V to convert files as needed when moving them between Git and mainframe systems. Two, large code bases. Main frayed code bases can be massive making initial Git operations slow. Solution, use Git features like shallow cloning to reduce the size of the repository or break the repository into smaller, more manageable parts. Three, integrating with your existing mainframe workflows. If your team is still using traditional tools like Endeavor, you may need to run git in parallel. Solution. Slowly phase Git into your workflow by using it alongside your traditional BCS. Over time, transition fully to Git once the team is comfortable with a new system. Key takeaways from this lesson. Git is a powerful tool for version control, even in mainframe environments, supporting distributed collaboration and faster development cycles. Installing and configuring Git is straightforward. Once installed, Git can track every change made to your mainframe code base, allowing for easier collaboration and rollbacks. Connecting to a remote repository enables your team to share code and collaborate across different environments, making Git a critical part of any modern Devoves workflow. Mainframe environments and leverage gift either directly through ZOS Unix or by interfacing with a hybrid system, ensuring that mainframe teams can work with the same tools as distributed teams. Learning activity. Try installing Git on a machine that interfaces with your mainframe. Initialize a repository with sample OBO PL one, or JCL code. Push the repository to a remote service like GitHub or Gitlab and invite a team member to collaborate by making changes to the code. Reflect on how Git improves collaboration and version control for your mainframe environment. Write down any challenges you encounter and how you overcome them. What's next? In the next lesson, we'll explore basic Git operations which are commit, branch, and merge. We'll learn how to commit changes, create branches, and merge code in git, along with best practices for managing branches and resolving conflicts in mainframe projects. 8. Lesson 3: Basic Git Operations: Commit, Branch, Merge: Lesson three, basic Git operations, commit, branch, merge. Welcome to Lesson three of Module two. Narrative setup Git for your mainframe code, time to dive into the core operations that will help you manage your code base effectively. In this lesson, we'll cover three essential Git commands. Commit, branch, and merge. By the end of this lesson, you'll be able to commit changes, create and work with branches, and merge code in Git with confidence. You'll also learn best practices when managing branches in a team environment and resolving conflicts, which are crucial when dealing with large complex mainframe projects. Let's get started. Committing changes in Git. The first basic Git operation you'll use frequently is the commit. A commit in Git records snapshot of your project's current state, essentially saving the changes you've made. This allows you to track your progress and revert to the previous versions if necessary. How to commit changes. Here's how to commit changes step by step. First, stage the files you've modified. This tells Git which files you want to include in your next commit. Two, commit the changes with a descriptive message that summarizes what you've done. Every commit you make is saved with a unique identifier than SHA, along with your name, the timestamp, and the message you provided. This allows you and your team to track exactly what changes were made when and by whom. Best practices for writing commit messages. A good commit message makes it easy to understand the purpose of a change at a glance. Here are a few tips. Keep it concise. Aim for a message that clearly describes the change in one or two sentences. Be specific. Instead of writing updated code, provide context like refactored billing system to fix tax calculation error. Use the imperative mood. This is a convention in gift. For example, fixed Bug in transaction processing rather than Fixed Bug. Let's take an example. You're updating a CBL module that calculates customer premiums. You make several changes and test them locally. Before moving on, you commit the changes with a message, added logic for multi policy discount in premium calculation. This makes it clear to the rest of your team what the commit contains. Creating and working with branches in Git. In Git, branches allow you to isolate your work from the main code base, making it easier to experiment, develop new features or fix bugs without affecting the stable version of your project. Why use branches? Branches are essential for maintaining stability while allowing for flexible development. Each developer can work on their own branch, ensuring the main code base remains unaffected until their changes are tested and ready to merge. How to create and switch branches. Creating and switching branches, creating and switching between branches is simple. First, create a new branch. Then switch to the new branch. Now you're working in the new branch. All the changes you make from this point on will be contained in this branch until you decide to merge it back into the main code base. Branching best practices. Use feature branches, create a new branch for each feature, bugfix or enhancement. This keeps your word isolated and makes it easier to test and review. Keep branches short lived. The longer a branch is kept separate from the main code base, the more likely you encounter merge conflicts. Name branches clearly, use descriptive names like feature login system or BGFixtax calculation. An example, the task with adding a rewards feature to a banking system. Instead of working directly on the main branch, you create a new branch called Feature Rewards Program to isolate your work. This way, other team members can continue their task without worrying about your ongoing development affecting the stability of the system. Merging code in gift. Once you've completed your work in a branch, the next step is to merge it back to the main code base. Merging brings together changes from different branches, allowing you to incorporate new features or bug fixes into the main project. How to merge branches. First, switch to the branch you want to merge into, typically the master or main branch. Then merge the branch containing the new changes. It will attempt to merge the changes from your feature branch into the master branch. If there are no conflicts, the merge will happen automatically. Handling merge conflicts. Sometimes it can't merge changes automatically. This is called a merge conflict. Conflicts occur when two branches have made conflicting changes to the same part of a file. How to resolve conflicts. When a conflict occurs, it will notify you and mark the conflicting areas in the files. Here's how to resolve them. Open the conflicting file and manually resolve the conflict. Choose which version to keep or manually edit the code to combine both versions. Then stage the result file. Finally, commit the resolution and put a descriptive message. Let's take an example. Two developers have modified the same CVL program that processes loans. One added logic or a new interest rate while the other updated how late fees are calculated. When merging these changes, it flags a conflict because both developers change the same section of code. You manually edit the file to incorporate both changes, resolving the conflict, and completing the merge. Best practices for managing branches and resolving conflicts. Frequent pulls. Regularly pull changes from the main branch to your feature branch to minimize conflicts when merging. Hip branches short live. Avoid working on a branch for too long without merging. The longer a branch exists, the more likely it is to drift away from the main branch, increasing the chance of conflict. Communicate with your team. Ensure that team members are aware of the changes others are working on, especially in shared files. Takeaways from this lesson. Commit regularly. Save your work frequently by committing changes with clear concise messages. Use branches to isolate work, create feature branches for new development and keep the main branch stable. Merge confidently. Merge your work back into the main branch once it's tested and ready and be prepared to resolve any conflicts may arise. Learning activity. Practice creating and merging branches. Create a new branch for a feature you're working on like feature New Report. Make some changes to your code and commit them. Switch back to the master branch and merge your new feature branch. Try introducing a conflict by having another team member edit the same file in a different branch, then resolve the conflict during the merge. Reflect of how branching helps isolate your work and simplifies collaboration on complex mainframe projects. What's next? In the next lesson, we'll dive into migrating legacy code into Gib. You'll learn strategies for moving your existing mainframe code into a modern version control system. Well as steps for maintaining code integrity during the migration process. 9. Lesson 4: Migrating Legacy Code into Git: Lesson four, Migrating legacy code into Git. Welcome to lesson four of Module two. If you've been working with mainframe systems for a while, you'll likely have a vast amount of legacy code. Migrating code into Git can seem daunting, but it's a critical step towards modernizing your development practices, integrating DevOps principles, and enabling continuous integration, continuous delivery pipelines. In this lesson, we're going to explore strategies for migrating your existing mainframe code into Git. We'll walk through the process step by step, and I'll also provide tips for ensuring that your code integrity is maintained throughout the migration. Let's jump in. Why migrate legacy code into Git. Before we dive into the how, let's discuss why migrating legacy code into Git is so important. One, improved collaboration. With Git, multiple developers can work on different parts of the code base at the same time without conflicts. This is a massive improvement over traditional version control system in mainframes where changes are often linear and restricted. Two, version history, GTS powerful version control features allow you to track every change made to the code base. Who made it and when? This history is invaluable when troubleshooting issues or auditing changes. Three, integrating with modern DevOps tools. Get integrates seamlessly with tools like Jenkins, GitLab, and others that help automate builds, tests and deployments, which are key components of modern CICD workflow. Or facilitating CICD. By moving your code into Git, you enable continuous integration practices, which means more frequent releases, faster bug fixes, and more efficient development. Let's take an example. A large financial institution has been maintaining its cobble based transaction processing system for decades. By migrating the code into Git, the development team is able to introduce modern DevOps workflows, enabling faster releases, automated testing, and improved collaboration across globally distributed teams. Strategies for migrating legacy code into Git. Migrating legacy mainframe code into Git isn't as simple as copying files from one system to another. It requires planning and strategy to ensure a smooth transition. Let's break it down into specific steps. Step one, assess and prepare the code base. Before beginning the migration, you'll need to assess the current state of your legacy code base. Take note of the following. Identify active and inactive code. Some code may no longer be in use. It's crucial to identify which code is actively being maintained and which can be archived. Migrating inactive code may unnecessarily complicate the process. Understand dependency. Mainframe systems often have complex dependencies between programs, scripts, and datasets. Mapping out these dependencies will help avoid breaking the system during migration. Evaluate current version control. If you're using tools like Endeavor or Change Man, assess how code is currently being tracked. Migrating to Gib will provide more flexibility that is essential to know what features and processes you're replacing. Let's take an example. In a logistics company, the COBOL system responsible for managing shipments have been expanded over the years with various scripts and datasets. The development team starts by identifying which parts of the system are actively maintained and which are outdated, ensuring that only relevant code is migrated into GID. Step two, organize your code into Git compatible structures. Mainframe code can sometimes be structured in ways that don't align with Git's distributed nature. Here's how to organize it effectively. Create modular repositories. Instead of putting all your code into one massive Git repository, break it down into smaller, more manageable modules. Each module should represent a logical section of the system, for example, billing, customer management, reporting. Use branches for phase migration. Start by migrating only a portion of your code, especially if the code base is large. Create branches and git to manage different phases of the migration, allowing you to work incrementally without interrupting your current processes. Map files and folders to Git. Ensure that files from the mainframe are properly translated into formats that Git understands. For example, converting Epsidc to ASCE if necessary. Let's take an example. A government agency payroll system is broken into several modules, tax calculations, benefits processing, and employee records. Instead of migrating everything at once, they break it into repositories for each module, starting with tax calculations, which is the most actively maintained. Step three, performed the migration. With your code organized, it's time to start the migration. Here's how to do it step by step. First, initialize the Git repository. In the directory where your mainframe code resides, initialize the Git repository. Second, stage the code. Add all the relevant files to Git. Third, commit the code. Commit the initial version of the code. Or set up remote repositories. Connect your local repository to a remote Git server like GitHub or GitLab. Let's take an example. A retail company migrates its inventory management CBO system into Git. After initializing the repository, they begin by staging only the core processing programs, gradually adding additional components like reporting and auditing. This phase approach allows them to test the migration success at each step. Step four, maintained code integrity during migration. Mentaining the integrity of your code during migration is critical. Here's how to ensure that everything stays intact. Use test cases. Before and after the migration, run extensive test cases to ensure the code behaves as expected. Automated testing suites can help catch any issues early. Perform incremental migrations. Instead of migration the entire code base at once, migrate small chunks and validate each migration before moving to the next section. Start a backup processes. Always backup your existing code and ensure you can restore it if something goes wrong during the migration. Let's take an example. During the migration of a public sectors agency's Social Security processing system, developers use automated test cases to compare the performance and output of the pre migration and post migration code. This ensures no functionality is lost and the transition to get doesn't introduce new bugs. Tips for smooth migration process. Communicate with your team. Keep everyone informed about the migration plan and its progress. Clear communication ensures that development isn't interrupted and issues are identified early. Run parallel systems. Initially, run both your old version control system, for example, endeavor and Git in parallel to ensure that nothing is lost during migration. This also helps the team to get comfortable with Git while the old system is still available. Train the team on Git. Provide training sessions or resources to help your team transition to Git effectively. Understanding Gits branching, merging, and commit history features will enable smoother collaboration. For example, migrating a large COBOL system. A financial services company begins migrating its CBO based transaction processing system into GIP. They start with core modules, moving code incrementally and using automated test cases to ensure functionality remains intact after migration. Key takeaways from this lesson. Migrating legacy code into Git enables better collaboration, version history, and integration with modern CICD tools. Organize your code into manageable repositories and use branches to migrate incrementally, ensuring minimal disruption to your mainframe systems. Mintain code integrity by testing thoroughly before and after migration and by backing up your code. Earning activity. Choose a small section of your mainframe code base to migrate into Git. Organize the code into a Git compatible structure and initialize a repository. Stage, commit, and push the code to a remote Git server, for example, Git Hub or GitLab. Compare the pre and post migration functionality using test cases to ensure that nothing is lost during the process. Reflect on how Git improves your ability to crack changes and collaborate across teams. What's next? In the next module, we'll start automating mainframe builds. You'll learn what build automation is, why it's essential for modernizing mainframe development and how automated builds differ from manual processes in mainframe environments. 10. Lesson 1: Overview of Build Automation: Welcome to Module three, automating mainframe builds. This module, we'll explore how build automation can streamline your development processes, reduce errors, and accelerate software delivery in mainframe environments. You'll learn how to set up automated builds and integrate them with your existing systems. Lesson one, overview of build automation. Welcome to lesson one of Module three. In this lesson, we're going to cover the basics of build automation, what it is, why it's critical to modernizing mainframe development and how it differs from manual build processes. By the end of this lesson, you'll understand how automated builds streamline development workflows, reduce human errors and accelerate the delivery of high quality software. This is a key part of integrating DevOps principles into your mainframe environment. Let's dive in. What is build automation? Let's start with a simple definition. Build automation is the process of automatically compiling and packaging your application code without the need for manual intervention. In mainframe environments, this means automatically compiling OBL, PL one, CL, and other components into a complete package ready for testing or deployment. With automated builds, once the code is committed to the version control system like Git, the build process is triggered automatically. Tools like Jenkins or IBM urban code build can automate everything from compilation to testing and deployment. Components of a build process. Typical automated build process includes one, compiling source code. That is converting source code into executable binaries. Two, running tests, automatically running unit tests and integration tests to ensure the code behaves as expected. Three, creating build artifacts, packaging the application code into a deployable format. Four, deployment, which is optional. In some workflows, automated builds also includes deploying the code to a testing or production environment. Let's take an example. Think of a large banking institution with a CBL based system for managing customer accounts. Every time a new feature is added, the code must be compiled, tested, and packaged. Without automation, a developer would have to do this manually for each change, which can be time consuming and error prone. With an automated build process, every time a developer commits code, the system compiles it, runs a test, and packages it automatically, significantly speeding up the process. Why is build automation important. Built automation is important because it brings several key benefits, mainframe environments, which traditionally rely on manual processes. Let's explore these benefits in detail. First is consistency and reliability. Manual build processes are prone to human error. Even a small mistake in the compilation or packaging steps can lead to bugs or delays in deployment. By automating the process, you ensure that every build is consistent and follows the same steps every time. Manual process example. A developer manually compiles code, but they forget to include a necessary library. The build fails and the error is only discovered later in the testing phase. Automated process example. The automated build process includes all required libraries and configurations preventing such issues from occurring. Faster development cycles. In traditional mainframe environments, the process of manually compiling and testing code can take hours or even days. With build automation, you can drastically reduce these timelines enabling faster development cycles. This is especially important for teams adapting agile or DevOps methodologies for rapid iteration and continuous delivery are critical. Manual process example, a new feature is added to the mainframe system. It takes the developer an entire day to compile, package, and test the code. Automated process example. The developer commits a code and within minutes, the build process is completed and the code is ready for testing or deployment. Integration with CICD pipelines. Built automation is a fundamental part of continuous integration, continuous delivery or CICD pipelines. In a CICD environment, every change made to the code is automatically tested and built, ensuring bugs are caught early and deployments happen more frequently and reliably. Manual process example, each time a change is made, the developer must manually run tests, compile code, and prepare it for deployment, which slows down the delivery pipeline. Automated process example, in a CICD environment, the automated build is triggered immediately after the code is committed with tests running and deployment happening in a fraction of the time. Or increased productivity. Developers can focus on writing and improving code rather than spending hours on repetitive build tasks. This leads to higher productivity and better overall job satisfaction. Manual process example, developers spend a significant portion of their time compiling and preparing builds instead of focusing on coding and problem solving. Automated process example, developers spend more time on coding new features and fixing bugs while the build system handles the repetitive tasks. Differences between manual and automated bills in mainframe environments. Let's take a closer look at how manual builds differ from automated bills in mainframe environments. For manual builds, it is time consuming. Manual bills can take hours, especially in large code bases as developers must manually compile, package, and test each change. The respond to errors. Human errors such as forgetting a library or misconfiguring a compilation parameter are common in manual processings. It's repetitive tasks. Developers must repeat the same steps over and over, which can become tedious and it's not the best use of their skills. For automated builds, it is fast and efficient. Automated builds take minutes or even seconds depending on the size of the code base. This leads to faster development cycles and more frequent releases. It is consistent. Automation ensures that every build is done exactly the same way, reducing errors and improving reliability. It's integrated with Devos. Automated builds are a key part of modern Devos practices, enabling continuous integration and delivery. Let's take an example. A retail company uses a cobble based system to manage inventory. Previously, every time new code was added, it took several hours to compile and test everything manually. By introducing build automation with Jenkins, the process now happens in a matter of minutes, allowing the company to roll out updates more frequently and efficiently. Key takeaways from this lesson. Build automation eliminates manual error prone processes, providing consistency and reliability in mainframe environment. Automated bills are faster and more efficient, leading to shorter development cycles and higher productivity. Integration with CICD pipelines ensures that changes are built, tested, and deployed automatically enabling continuous delivery. Manual bills are slower and prone to errors, whereas automated bills are essential for teams adopting DevOps practices. Learning activity. Take a moment to reflect on your current build process in your mainframe environment. How long does it take to manually compile and test your code? What challenges do you face with your current process? Examples, errors, delays, repetitive tasks. Identify one area where build automation could significantly reduce time and effort and write down a plan for automating that part of the process. What's next? In the next lesson, we'll get hands on with setting up Jenkins for automated builds. You will learn how to install and configure Jenkins, create build jobs, and set up automated pipelines for your mainframe applications. This is where you'll see the power of automation in action. 11. Lesson 2: Setting Up Jenkins for Automated Builds: Lesson two, Setting up Jenkins for automated builds. Welcome to Lesson two of Module three. In this lesson, we'll take a hands on approach to setting up Jenkins for your mainframe build automation. Jenkins is one of the most widely used tools in DevOps, known for its flexibility and ability to automate various stages of the development pipeline. By the end of this lesson, you'll know how to install Jenkins and figure it for your mainframe code basis and create build jobs and pipelines for your applications. Let's get started. What is Jenkins and why use it? Jenkins is an open source automation server that automates tasks related to building, testing, and deploying software. It's a component of continuous integration slash Continuous Delivery for CICD pipelines, as it automatically triggers build tests and deployments whenever code is committed. For mainframe environments, Jenkins can be configured to handle the unique needs of COBOL, PL one, JCL, and other mainframe languages. By automating builds, Jenkins help eliminate manual errors, speed up development cycles, and ensures consistency across your development team. Let's take an example. A large insurance company uses a Cobble based system for policy management. Each time a new feature is added or a bug is fixed, Jenkins automatically compiles the Pobble code, runs tests, and packages the application for deployment. This process used to take hours when done manually, but Jenkins now handles it in minutes. Step one, installing Jenkins. Let's start by installing Jenkins on your system. Jenkins can be installed on a Linux server, Windows or even directly on a OS Unix environment if supported. For this example, we'll use a typical Linux installation, but the sps are similar for other platforms. Installation on Linux. First, install Java. Jenkins requires Java to run, so you need to install it first. Then add Jenkins repository. Add the Jenkins repository to your system. Third step is to install Jenkins. Update your package index and install Jenkins. Or after installation, you start Jenkins. Once installed, start Jenkins with this command. Finally, access Jenkins. Open a browser and navigate to HTTP sslash local host Column 80 80 or your service IP address. You'll be prompted to unlock Jenkins using the administrator password found in the following file, pseudo CAP backslash variable, Live Jenkins slash SECRET slash initial admin password. Let's take an example. A financial services company sets up Jenkins on a dedicated Linux server to manage bills for their Cobol and JCL systems. Once installed, Jenkins is configured to automatically build and deploy changes to their legacy systems. Step two, configuring Jenkins for mainframe code bases. Now Jenkins is installed, let's configure it to work with your mainframe code basis. This involves installing necessary plug ins, setting up built environments, and configuring source control integrations. Install plugins. Jenkins has a rich ecosystem of plugins, many of which are critical for mainframe automation. Some key plugins you'll need include Git plugin for integrating with Git repositories. Pipeline plugin for defining build and deployment pipelines. SSH plugin, if you need to SSH into your mainframe environment to trigger builds or scripts. To do that, go to Manage Jenkin, then go to manage Plugins. Under available plug ins, search for and install the Git plugin Pipeline plugin and SSH plugin. Configuring source control. Jenkins needs to pull code from your version control systems such as Git or Endeavor. One, go to new item to create a new project. Two, choose freestyle project or pipeline depending on your requirements. Three, under source code management, select Git and enter your repository URL. Real world example. An airline company is working on a cobble based reservation system. They use Git to track changes and Jenkins pulls the latest code from the Git repository whenever a new code is made. This ensures that every new feature or bug pix is automatically built and tested. Step three, setting up build jobs for mainframe applications. Now that Jenkins is configured, let's create a build job for your mainframe application. A Biljob defines how your code will be compiled, tested, and packaged. For mainframe environments, this typically involves invoking cobble compilers or JCL scripts. Creating a freestyle Build job. One, on the Jenkins Dashboard, click New item and select Freestyle Project. Two, name the project, for example, Cobol Dash Build and click Okay. Three, under Build triggers, you can choose to trigger the build automatically after every commit using Paul SEM or on a scheduled basis. Defining build steps. Next, you'll define how Jenkins should build your mainframe code. Under build, click Add Build step and select Execute Shell under Linux or Execute Windows Batch command under Windows. Add the necessary shell or batch commands to invoke your mainframe compilers or run JCL terms. Third, you can also define test steps by adding another build steps to run automated test if available. Eric is an example of a share command for compiling PBL program. Storing build artifacts. Once the build is complete, you may want to store the output, executables or logs. Under the post build action, select archive the artifacts and specify which files to archive. For example, asterisk dot Ex, asterisk dot log. Let's take an example. A healthcare company automates the build of the cobalt billing system. Jenkins once the Cobalt compiler generates executables and stores the build artifacts for deployment. This reduces the build process from hours to minutes. Step four, setting up Jenkins pipelines for mainframe builds. If your build process involves multiple stages, such as compiling, testing, and deploying, you can use a Jenkins pipeline to automate the entire flow. Creating a pipeline job in Jenkins, click new item and select pipeline, name the project, for example, mainframe dash Pipeline and click Okay. Defining the pipeline script. Jenkins pipelines are defined using a Jenkins file which describes each step of your build process. Here is an example of a Jenkins pipeline script. This script defines three stages. Compile test and deploy. Jenkins will automatically execute each stage in sequence. Key takeaways from this lesson. Jenkins is a powerful tool for automating builds, tests and deployments, particularly in Devos environments. Installing and configuring Jenkins to work with mainframe code bases involves setting up plugins, integrating source control, and defining build jobs. Jenkins pipelines allow you to automate multi stage build processes, improving efficiency and consistency in mainframe environments. Learning activity. Set up Jenkins on a local or remote server. Configure a build job for one of your mainframe applications. Define a simple pipeline with at least two stages, for example, compile and test. Reflect on how automating this process improves speed and reduces errors compared to your current manual process. What's next? In the next lesson, we'll dive deeper into automating the compilation and linking process. You'll learn how to create build scripts for mainframe languages like ba and automate the compilation and linking of mainframe programs using build tools integrated with Jenkins. 12. Lesson 3: Automating the Compilation and Linking Process: Lesson three, automating the compilation and linking process. Welcome to lesson three of Module three. In this lesson, we'll dive into automating the compilation and linking process for mainframe programs. If you've been compiling and linking Kobal or PLO programs manually, you know how repetitive and time consuming it can be. Automating this process can save you hours of work, reduce human error and make your build pipeline much more efficient. We'll go through creating build scripts for mainframe languages like CobaL I'll show you how to automate these steps using build tools that can integrate seamlessly with Jenkins or similar CI tools. Why automate a compilation and linking process? Compilation and linking process on mainframes involves translating your high level language code like Cobol or PL one into machine executable code. For large systems, this often requires compiling multiple source files and linking them into a final executable. Here's why automation is critical. One, time saving. Compiling and linking hundreds or thousands of files manually is inefficient and error prone. Automation can significantly reduce bill times. Two, consistency. Automated processes ensure that bills are performed the same way every time, eliminating variation between bills caused by human error. Three, reduce errors, manual bills can often lead to mistakes such as keeping files or incorrectly configuring compile time options. Automated scripts ensure that nothing is overlooked. Let's take an example. A bank that manages its customer account system in Cobo was previously running manual compilation of its programs. This often led to missing dependencies or incorrectly linked modules. By automating the process, and reduce billed errors by 80%, cut bill times by half. Step one, writing build scripts for CBO. Let's start by looking at how to create a build script for compiling and linking CBO programs. The steps to compile CBO programs are straightforward but can get complex when dealing with large code bases. We'll automate the process with a simple shell script that can be run manually or triggered by a tool like champins. Basic Coval compilation Man. To compile a COBOL program on the mainframe, you typically use a command like this. Here's what it does. X tells the compiler to create an executable. Main program CBL is the CBL source file. O main underscore program that EXE specifies the output file, which is the final executable. Now if you have multiple source files, you need to compile them together or compile them separately and then link them. Let's break this into steps. Writing a build script. To automate this process, let's create a shell script, build DHS that handles the compilation and linking of multiple CBO programs. This is a sample script for compiling and linking multiple CBO programs. We first define the source file and the output files. The script looks through each source code compiles it and checks for errors. Once compiled, the object files that Os are linked into the final executable. After linking, the script cleans up temporary object files to keep the director clean. Let's take an example. A logistics company with a legacy CBL system automates the compilation of several modules, such as order processing, the CBL and inventory, that CBL. Using a script like the one above, Jenkins automatically compiles and links the COBOL program every time a developer pushes a new code to get. Step two, automating the linking process. In mainframe environments, the linking process involves combining various object piles and dot O files into a single executable that can be run on the system. This step is critical, especially when dealing with large systems where many modules interact. Basic linking command. To link multiple CPO programs, you use something similar to the one shown above. This combines compiled object files into one executable. Automating linking with build tools. If your application includes many object files or dependencies, it's best to automate this step to avoid missing files or incorrect configurations. You can extend the previous build script to handle larger systems, ensuring that every module is linked properly. You can also integrate your build script with Jenkins or another CI tool, trigger the build automatically after every change to the code base. Let's take an example. A retail company manages its billing system with COBOL and it's composed of several dozen modules. The automated build script not only compiles the individual programs but links them into the final billing system executable. This ensures that no steps are skipped and the build is always complete. Step three, integrating with Jenkins. Now that we have a script that compiles and links our mainframe code, let's integrate it into Jenkins. Jenkins will handle triggering the script and managing the build process automatically. Setting up a Jenkins job. First, create a new freestyle project. On the Jenkins dashboard, click New item and create a freestyle project. Name the project. For example, OBLs Bilas automation. Two, set up source code management. Under source code management, connect Jenkins to your Git repository or other SEM system where the CBL code is stored. Three, add build step. Under the build section, add execute step, execute Shell Step under Linux or execute Windows batch command under Windows. Add the path to your build dot SH script. Four, trigger the build. Under build triggers, you can set champin so trigger the build every time the code is committed using all SEM or on schedule. Best practices for automating mainframe compilation and linking. Modularize your bill. Break your code into smaller modules that can be compiled and tested separately. This reduces the risk of failure during the linking stage. Run test automatically. Add a testing step to your build script. After compiling and linking, the script should trigger a test set to validate the build. Error handling, always handle errors in your build scripts. If a compilation fails, the script should stop and report the failure, preventing broken builds from being deployed. Key takeaways from this lesson. Automating the compilation and linking process saves time, reduces errors and ensures consistency in mainframe builds. Build scripts can be created to compile and link multiple CDL programs, streamlining the development process. Integrating build automation with Jenkins or other CI tools helps trigger builds automatically, allowing for a smoother development process. Error handling and testing are critical components of any automated build script, ensuring that issues are caught early. Learning activity. Create a simple build script to compile and link one of your cobalt or PL one programs. Integrate the script into Jenkins and set up a job that triggers automatically after every code change. Test the process by making a small change to the code base and watch the build and linking process run from start to finish. What's next? In the next lesson, we'll cover how to integrate build automation into CICD pipelines. You will learn how to incorporate your automated bills into the whole CICD pipeline, how to handle common issues during automation and best practices for managing your bills in a Tavo environment. 13. Lesson 4: Integrating Build Automation into CI/CD Pipelines: Lesson four, integrating build automation into CICD pipelines. Welcome to lesson four of Module three. In this lesson, we're going to explore how to integrate your automated build processes into a full, continuous integration, continuous delivery CICD pipeline. If you've already automated the compilation and linking process, you're halfway to building an efficient Devo pipeline for your mainframe. But how do you fit these automated builds into a CICD pipeline? How do you handle the challenges that arise? By the end of this lesson, you'll understand how automated builds fit into the broader context of a CICD pipeline, how to configure this pipeline for mainframe environments, and how to troubleshoot common issues. What is a CICD pipeline? Let's start with a simple definition. CICD stands for continuous integration and continuous delivery or deployment. A CICD pipeline is a set of automated steps, takes a code changes, builds them, runs tests, and deploys them automatically. In the context of mainframe environments, this means that your cobot, DL one or JCL code goes through a seamless pipeline from development to testing to production without manual intervention. The components of a CICD pipeline, a typical CICD pipeline has the following stages. First, source control integration. The pipeline starts when a developer pushes code to a version control system. For example, give. Second, build. The build stage compiles the code, generates executables, and runs automated tests like unit and integration tests. Third, testing, automated testing ensures the build is stable and no new bugs were introduced. Fourth, deployment. The application is deployed to a staging or production environment once it passes all the tests. Real world example, an insurance company with a CBL based claims processing system integrates automated build and tests into the Jenkins pipeline. Each time a developer pushes a code change, Jenkins compiles the COBOL code, runs tests, and if everything passes, deploys the updated system to their testing environment. But Incorporating automated bills into the CI pipeline. Now that you have automated the compilation and linking of your mainframe code, it's time to incorporate those steps into the broader CI pipeline. How to set up the pipeline. First, figure the pipeline with source control. Every time a developer pushes a change to get for another version control system, this triggers the CI pipeline automatically. Jenkins or another CI tool will fetch the latest changes and begins the build process. Build stage. The first step in the pipeline is the build stage. This is where the compilation and linking script we discussed in the previous lesson will be executed. If the build succeeds, the pipeline moves to the next stage, automated testing stage. After building the application, the next stage in the CI pipeline is to run automated tests, unit integration and others. For mainframe applications, this may involve running test jobs on the mainframe or using simulators or testing specific modules. Or deployment stage. After the tests pass, the code is ready to be deployed to staging or production environment. Automated deployment scripts such as push the executable files to the appropriate environment, for example, test or live system. Let's take an example. A bank integrates its core transaction processing system into a CICD pipeline. Each time a developer makes a change, the pipeline compiles the COVA programs, runs a series of tests, and deploys the updated code to a testing environment automatically. This helps the bank catch issues early and deliver updates faster. Common issues and troubleshooting during build automation. Automating mainframe builds within a CICD pipeline can be complex, and there are several common issues you might encounter. Let's go through some of these issues and how to solve them. One, build failures due to missing dependencies. One common issue is build failures caused by missing libraries or dependencies. In a mainframe environment, especially one with many legacy modules, dependencies between programs may be complex. Solution, ensure that all dependencies are clearly defined in your build script and version control. You can also automate dependency resolution by scripting the setup of your environment before the build. Two, long build times. Mainframe programs often consist of many modules and large bills can take a long time. Long build times slow down the feedback loop in a CIC eight pipeline. Solution, consider breaking up your build process into smaller modular builds. Instead of compiling everything at once, compile only the modules that have been changed. Use incremental builds to speed up the process. Three, testing bottlenecks. Running tests in a mainframe environment can be resource intensive and slow. If tests are not optimized, they can become a bottleneck in the pipeline. Solution. Parallelize share testing whenever possible. You can split your test set into smaller chunks and run them on different environments where simulators speed up the process. Or deployment issues. Mainframe deployments can sometimes fail because of environment mismatches, permission issues, or other configuration errors. Solution, automate as much of the deployment process as possible. Use configuration management tools to ensure that all environments, development, testing, and production are set up consistently. Best practices for integrating builds into CICD pipelines. One, keep the pipeline simple. Start with a simple CICD pipeline, integrate, build automation first, and gradually add testing and deployment stages. Two, use modular builds. If you're dealing with large mainframe systems, break up your code into smaller modules and build them separately to improve efficiency. Three, automated tests. Automated testing is key touching issues early in the pipeline. Make sure you integrate unit tests, integration tests, and possibly regression tests or monitor the pipeline. Keep an eye on pipeline performance. If bills are taking too long or tests are failing frequently, analyze the bottle lengths and optimize the process. Key takeaways from this lesson. Integrating build automation into a CICD pipeline streamlines the process from code commit to deployment, ensuring faster releases and more reliable updates. Two, common issues during build automation include missing dependencies, long build times, testing bottlenecks and deployment failures, all of which can be resolved with careful scripting and optimization. Three, CICD pipelines for mainframes should be designed with modular builds, automated testing, and efficient deployment scripts to ensure smooth delivery. Learning activity. Take your existing automated build script and integrate it into a CICD pipeline using Jenkins or another CI tool. Set up the pipeline to trigger on every code commit and configure it to automatically build and test the application. Identify one potential bottleneck in your current pipeline, for example, slow build times or lengthy tests and brainstorm ways to optimize it. What's next? In the next module, we'll focus on implementing automated testing for mainframes. Testing is a critical component of any CICD pipeline, ensuring that code changes don't introduce new bugs or errors. You learn about the importance of automated testing, the different types of test, unit integration, regression, and how to implement them in a mainframe environment. 14. Lesson 1: The Importance of Automated Testing: Welcome to Module four, Implementing automated testing for mainframes. In this module, we'll explore the value of automated testing for mainframe applications. You'll learn how to set up automated tests, integrate them into your DevOp pipeline, and ensure your applications maintain high quality and stability. Lesson one, the importance of automated testing. Welcome to Lesson one of Module four. In this lesson, we're going to explore the critical role of automated testing in modernizing mainframe environments. Automated testing is key to ensuring the quality and stability of your mainframe applications, especially in fast paced DevOps workflows where frequent code changes occur. By the end of this lesson, you'll understand the benefits of automated testing, types of tests most relevant to mainframe systems, and why implementing them can greatly improve your development and deployment processes. Let's dive in. And what is automated testing and why is it important? Automated testing is the process of using software tools to execute predefined tests on your application code without manual intervention. These tests can validate everything from simple functions, complex interactions within your system. For mainframe environments where applications often run mission critical processes, automated testing ensures that your systems remain stable and error free, even as you introduce new features, updates or patches. The benefits of automated testing. One, increased test coverage. Automated tests and one through more test cases, ensuring that more parts of the code are tested, including edge cases might be missed in manual testing. Two, faster feedback. Automated tests provide immediate feedback on code changes, reducing the time it takes to identify bugs or errors. Three, consistent and reliable. Unlike manual testing, automated tests are executed in the same way every time, reducing the risk of human error and ensuring consistent results. For improved code quality. By integrating automated tests into your CICD pipeline, you can catch issues early before they reach production, leading to more stable and reliable software. Let's take an example. A large retail company uses cobble based systems to manage their inventory and billing. By implementing automated tests, they can validate their entire code base every time a new feature is introduced, ensuring that existing functionality remains intact. This has allowed them to reduce the number of bugs introduced into production and improve the stability of their system. Types of automated tests in mainframe environments. In the context of mainframes, there are three main types of tests that are particularly relevant unique tests, integration tests, and regression tests. Each of these tests serves a specific purpose and provides unique value in ensuring code quality. One, unique tests. Unit test focus on testing individual components or modules of your application. These are the smallest units of testing designed to validate the behavior of a specific function, method or class. Why they matter for mainframes? In mainframe systems, CBL or PL one programs are often built on many small modules. Unit tests ensure these modules work as expected before they're integrated into the larger system. For example, you could write a unit test to ensure that CBL subroutine, responsible for calculating customer discounts works correctly. Integration test. Integration test focus on testing how different modules or components of your system work together. They ensure that once individual modules are combined, they interact properly and produce expected outcomes. Why they matter for mainframes. Mainframe systems often involve complex interactions between various programs and databases. Integration test ensure that data flows correctly between systems and that different components can work together. An example, an integration test to ensure that the interaction between a CBL module and a DB two database is functioning as expected when processing customer transactions. Regression test. Regression tests are designed to verify the crescent code changes, haven't introduced new bugs or broken existing functionality. These tests are crucial for maintaining stability as new features are added or updates are made to your system. Why they matter for mainframes. Legacy mainframe systems are often highly sensitive to changes. Regression tests ensure that new code doesn't inadvertently disrupt existing functionality. For example, after implementing a new feature in your payroll processing system, regression tests would validate that the core payroll calculations still function correctly. An example, a financial institution running a foble based loan management system implements unit integration and regression tests. These automated tests ensure that loan interest calculations, unit tests work as expected, that they integrate correctly with the accounting system integration test, and that previous functions such as customer data processing haven't been affected regression tests. Why automated testing is critical for mainframe DevOps. In DevOps practices, where code is frequently changed, tested, and deployed, automated testing is a cornerstone of maintaining code quality. In traditional mainframe environments, testing has often been a manual process, which can be slow, inconsistent, and prone to human error. But with DevOps principles, automated testing allows teams to continuously test code with each change, creating a smooth, reliable development pipeline. How automated testing enhances develops in mainframes. One, continuous integration. Automated test run as soon as code is committed, ensuring that any issues are caught early. Two, continuous delivery. Automated tests validate the code is production ready, allowing teams to deploy changes faster with confidence. Three, risk reduction. Automated regression tests help reduce the risk of deploying new features of updates by ensuring existing code remains stable. Here's an example. A bank using a hobble based system for processing transactions adopts DevOps practices. By integrating automated tests into their CI pipeline, they can ensure that any new updates to their transaction processing system don't introduce bugs that could disrupt their business. Key takeaways from this lesson. Automated testing is critical for ensuring the quality and stability of mainframe applications in a DevOps environment. Unit tests, integration tests, and regression tests each serve unique purposes, and together, they provide comprehensive test coverage for mainframe systems. Automated tests allow for faster feedback, increased test coverage and greater consistency compared to manual testing. Earning activity. Identify a small module or subroutine in one of your mainframe applications, for example, COBOL or PL one, that could benefit from automated testing. Write unit test to validate the behavior of that module. Reflect on how automated testing could improve the stability of your mainframe applications as you implement future changes. What's next? In the next lesson, we'll explore setting up automated unit testing for mainframes. We'll cover the tools and frameworks available for automating unit tests in mainframe environments and walk through how to write and execute this test. You'll learn how to start applying automated unit testing to your own mainframe code base. 15. Lesson 2: Setting Up Automated Unit Testing for Mainframes: Lesson two, setting up automated unit testing for mainframes. Welcome to lesson two of Module four. In this lesson, we'll explore how to set up automated unit tests for your mainframe applications. Unit testing is the foundation of any effective testing strategy, especially in complex mainframe environments where small changes can have far reaching impacts. By automating unit test, you ensure that each component of your system works as intended and can be tested quickly and consistently. We'll cover the tools and frameworks used for unit testing in mainframe environments, how to write effective unit tests for mainframe applications, and how to execute them as part of your continuous integration pipeline. Let's get started. What is unit testing in mainframes? Unit testing focuses on testing individual components or modules of your application, such as a single cobble subroutine or PLO procedure. The goal of unit testing is to ensure that each piece of the application functions correctly in isolation before being integrated with other components. In a mainframe environment, automated testing is critical because it helps developers quickly validate small changes and identify bugs early in the development process. When integrated into a continuous testing pipeline, unit tests provide fast feedback and reduce the risk of errors making it to production. Key characteristics of unit tests. Isolated tests individual units of code without relying on other parts of the system. Repeatable. Tests can be run multiple times with the same results. Pass. Since unit tests target small pieces of code, they execute quickly. Tools and frameworks for automating unit tests in mainframes. To write and execute unit tests for mainframe applications, you'll need tools and frameworks designed to work with mainframe languages like Cobol, DLO, and assembler. These tools allow you to automate the testing process and integrate it with modern CICD pipelines. One, IBM Z unit test framework or Z unit. Z Unit is IBM's framework for writing and running unit tests in mainframe environments which supports Coball, PL one, and assembler and is designed to be fully integrated with IBM developer for ZOS. It allows you to create test cases for individual program units and automatically execute those tests. Features. I tests individual COBOL or PL one programs. It automates test execution as part of a developed pipeline, and it generates test reports to track code coverage and success or failure rates. Example use case, a bank uses Z unit to write and execute unit tests for a CBL program that calculates loan interest rates. Each time a developer updates the loan calculation algorithm, the unit tests are automatically executed ensuring the program still works correctly. Two, Jenkins integration with mainframe unit testing. While Jenkins is primarily known as a CI tool, it can integrate with various unit testing frameworks for mainframes. Jenkins can automatically trigger a unit test after every code commit and display the results within the Jenkins interface. Features, it automates the process of running unit tests after code commits. It integrates with Z unit and other mainframe testing tools. It provides real time feedback to developers, including test results and code coverage reports. Example, use case. A logistics company has a Jenkins pipeline set up to trigger unit test for their mainframe applications. Each time a cover module is updated, Jenkins runs unit test and immediately reports any failure, allowing the development team to quickly resolve issues. Three, microfocus enterprise developer Microfocus Enterprise developer provides tools for mainframe development, including unit testing features for CBL applications. This tool allows you to run unit tests on mainframe applications in a non mainframe environment, such as on a distributed platform. Features, it develops and tests CBO programs in non mainframe environments. It automates testing with built in tools. It easily integrates unit tests into your CICD pipeline. Example use case. A retail company uses microfocus to develop and test their cobble based billing system. They run unique tests on their local environment before deploying the tested code to the mainframe, ensuring all modules are functioning correctly. Writing and executing unit tests for mainframe applications. Now that we cover the tools, let's look at how to write effective unit tests for your mainframe applications. We'll start by writing a simple unit test in CBO, but the same principles apply to PL one or other mainframe languages. Step one, identify the unit to test. The first step in writing a unit test is identifying the unit of code you want to test. This could be a cobot paragraph, PLO procedure or an individual function. It's important that the unit of code is small enough to test in isolation. For example, in a payroll system, you might want to test the subroutine responsible for calculating employee bonuses. This subroutine takes input parameters like employee performance and salary and returns the bonus amount. Step two, write test cases. A test case defines the expected behavior of your unit under various conditions. For each test case, you'll specify one, input values. The data you pass to the unit, for example, employee performance scores. Two, expected output, what you expect the unit to return? For example, bonus amount. Three, execution, the actual execution of the unit using the input values. Our assertion, checking whether the output matches the expected results. Let me show an example test case for CBL subroutine. Here's a sample test case for Cobal subroutine that calculates employee bonuses. Step three, execute test automatically. Once you with in your test cases, use a framework like Z unit or microfocus to automate their execution. This allows you to run your test as part of a CICD pipeline or scheduled intervals. Setup in Jenkins. If you're using Jenkins, you can configure it to automatically trigger unit test after every code commit. Jenkins will compile the CBA program, run the unit test, and provide a report of the results. Set up with Z unit. In IBM developer for ZOS, you can configure Z unit to run your unit test after each build or as part of a larger testing workflow. Let's give an example. Government agency uses automated unit tests for the COVA programs to handle tax calculations. After any code change, unit tests are automatically executed to ensure that changes don't introduce errors in the calculations. The test results are reported back through Jenkins allowing the development team to quickly address any issues. Key takeaways from this lesson. One, automated unit tests ensure that individual modules or components of your mainframe applications function correctly in isolation. Two, tools like Z unit and microfocus make it easy to write and execute automated unit tests for Cobol and PL one applications. Three, integrating unit tests into a CICD pipeline allows for faster feedback and ensures that new changes don't introduce bugs or errors. Learning activity. Choose a small cobalt or PL one subroutine from one of your mainframe applications. Write two to three unit tests to valid data behavior of that subroutine. Run this test using a framework like Z unit or Micro focus and reflect on how automated unit testing would improve your development process. What's next? In the next lesson, we'll dive deeper into automating integration and regression testing. You'll learn how to automate integration tests between mainframe and non mainframe systems and how to set up regression test to ensure that your existing functionality remains stable as new changes are introduced. 16. Lesson 3: Automating Integration and Regression Testing: Lesson three, automating integration and aggression testing. Welcome to Lesson three of Module four. In this lesson, we're going to focus on two critical types of testing, integration testing and regression testing. As you automate more aspects of your testing pipeline, the tests become essential for ensuring that your mainframe applications work seamlessly with other systems and that changes don't break existing functionality. By the end of the lesson, you will understand how to automate integration test between mainframe and non mainframe systems, as well as how to automate how to use automated regression testing to maintain the stability of your applications during development and updates. Let's dive in. What is integration testing and why is it important? Integration testing ensures that different modules or systems work together as expected. While unit tests focus on testing individual components, integration tests validate the interaction between these components, which is especially important in large complex systems. In mainframe environments, many applications don't operate in isolation. They often interact with databases, external APIs, middleware, and even non mainframe systems. Automating integration test allows you to verify that all of these components work together correctly no matter how many code changes are introduced. Key characteristics of integration testing, cross system interaction. Verifies of multiple systems or modules can communicate and function as intended. End to end testing, test real world workflows across different components. Complexity. Open involves testing across different environments, for example, cross mainframe, distributed systems or the cloud. How to automate integration tests between mainframe and non mainframe systems. Mainframe applications often need to interact with distributed systems, APIs, and databases. Automating integration tests between these systems ensures that changes made to one system don't negatively impact others. The goal is to create automated tests that mimic real world interactions, catching errors, or failures early. Steps for automating integration testing. First, identify integration points. First, identify the key points where your mainframe system interacts with other systems. This could include database access, API calls, or file exchanges. For example, a banking application might integrate with a DB two database, a payment API, and a middleware service. Each integration point should be tested. Second, define test scenarios. Create test cases that cover the most common and critical integration points. For example, test a full transaction workflow from input, for example, customer placing an order to the response from an external payment API and back to your mainframe application. Third, set up automation tools. Use tools like IBM Rational integration tester or CA service virtualization to simulate and automate integration testing. These tools can mock interactions between the mainframes and external systems, making it easier to create repeatable tests. Fourth, execute and validate, automate the execution of these tests as part of your CICD pipeline, ensuring they run whenever new code is pushed. Integration test results should be logged and analyzed to quickly detect failures or slowdowns in communication between systems. Let's take an example. A healthcare organization that runs Cobble based systems, automates integration tests between their main patient record database and a cloud based analytic service. Each time a developer updates the patient record system, the automated test ensure that data is correctly sent to the Cloud analytic service and process without errors. What is regression testing and why is it important? Regression testing is all about ensuring that recent changes or updates to your code base don't break existing functionality. This is especially important in mainframe environments where many systems are tightly integrated and small changes can have ripple effects across the entire application. Automating regression test helps you validate the core functionality remains stable and unaffected even after new features or bug fixes are introduced. Key characteristics of regression testing. Re testing existing features ensures that the existing code continues to work as expected, detects unintended side effects, touches bugs that are introduced by new changes. Continuous. Regression tests should be run frequently, especially after every significant change. How to automate regression tests in mainframe applications. Automating regression tests in a mainframe environment helps catch errors early in the development cycle, reducing the risk of introducing bugs into production. The goal is to create a comprehensive suite of tests that verify both new and existing functionality. Steps for automating regression testing. First, identify critical functional areas. Determine which parts of your mainframe applications are most critical to its operation. These could be core modules like billing systems, transaction processing or data retrieval. Second, create baseline test cases. Create test cases that reflect the expected behavior of your application in its current state. These test cases will act as a baseline for regression testing. Whenever a change is made, the regression test will compare the current behavior against this baseline. Third, automate test execution. Use tools like IBM's rational test work bench or selenium or UI based regression test to automate regression tests. These tools allow you to automate the execution of test cases and generate detailed reports on test results. Fourth, run tests continuously. Automate your regression test to run as part of your CICD pipeline. This ensures that every time new code is committed, regression tests are executed and any failures are flagged immediately. Fifth maintain and update test suite. As your application evolves, regularly update your regression test suite to cover new features or changes to existing functionality. Ensure that obsolete tests are removed and updated as necessary. An example, an insurance company uses automated regression tests to ensure that updates to their claims processing system don't affect or functionality like policy holder data retrieval. Each time a change is made, the regression tests are run and any issues are detected and addressed before the code is deployed to production. Tools for automating integration and regression testing. IBM Rationale integration tester, a tool for automating integration testing between mainframe and non mainframe systems. It simulates interactions and validates systems are working together as expected. Rationale Test Workbench provides automated testing capabilities for both unit and regression tests, allowing teams to create test suites for validating core functionality. CA service virtualization, useful for simulating and testing interactions between mainframe and distributed systems. Selenium, often used for automating UI based regression tests, ensuring that changes in backend functionality don't break the user interface. Best practices for automating integration and regression tests. One, start small and scale up. Begin by automating tests for the most critical parts of your system. As you gain confidence, expand your automation coverage to include more integration points and regression scenarios. Two, mock external dependencies. When running integration tests, mock external services simulate real world scenarios without relying on live systems. This makes testing more reliable and repeatable. Three, keep test suites up to date. As your mainframe application evolves, regularly update your integration and regression suites to ensure they reflect the current state of your system. Four, integrate with CICD pipelines. Automating your test is only useful if they're run continuously. Ensure your integration and regression tests are part of your CICD pipeline, running automatically after every code commit or update. Key takeaways from this lesson. One, integration tests ensure that your mainframe applications interact seamlessly with other systems, catching issues in cross system workflows early. Two, regression tests help maintain the stability of existing functionality, ensuring that new changes don't introduce bugs or issues. Three, automating integration and regression tests provide faster feedback and reduces the risk of deploying unstable code to production. Four, use tools like IBM Rational integration tester, CI service virtualization, and rational test work bench to automate this critical test. Earning activity. Choose a critical integration point in your mainframe system, for example, database interaction or API call. Write and automate integration test to validate this interaction. Next, identify a core feature in your system and create a regression test to ensure it remains stable after update. Automate both tests and integrate them into your CICD pipeline. What's next? In the next lesson, we'll explore incorporating test automation into the CICD pipeline. You will learn how to set up automated test stages within your pipeline and discover best practices for creating reliable and maintainable test automation. 17. Lesson 4: Incorporating Test Automation into the CI/CD Pipeline: Lesson four, incorporating test automation into the CICD pipeline. Welcome to lesson four of Module four. In this lesson, we'll explore how to integrate your automated test into a complete CICD pipeline. You've already learned how to write unit integration and regression tests for your mainframe applications. Now it's time to automate the execution of this test within a CICD pipeline to ensure that every code change is tested continuously improving both speed and reliability. By the end of this lesson, you'll understand how to set up automated test stages within your pipeline and implement best practices to make your test automation robust, scalable, and maintainable. Let's get started. What is a CICD pipeline? A CICD pipeline is an automated workflow that manages the development, testing, and deployment of code changes. For mainframe applications, this pipeline brings together both legacy systems and modern DevOps principles, ensuring that changes are deployed smoothly and quickly without compromising the stability of the system. At the heart of a CICD pipeline are automated tests. These tests provide the quality checks needed to ensure that any code that gets deployed has been thoroughly validated. But by automating the testing process, you reduce the risk of human error and ensure that code is always deployment ready. Typical CICD pipeline stages. One, source control integration. Developers commit their code to a version control system like two, build. The system compiles the code generating executables for the mainframe. Three, automated testing. Unit integration and regression tests are automatically executed. For deployment, code is automatically deployed to a test or production environment once all tests have passed. An example, an insurance company uses a CICD pipeline for its code based claim system. Each time a developer makes a code change, the pipeline automatically compiles the code, runs tests, and if successful, deploys the updated application to a test environment. Starting up automated test stages in the CICD pipeline. Now let's focus on how to integrate automated test stages into your CICD pipeline. This involves configuring your pipeline to automatically execute different types of tests like unit integration and regression each time new code is committed. One, define the stages of your testing pipeline. In a typical CICD pipeline, automated tests should be run at different stages. Each type of test serves a specific purpose. Unit test. This test should be run during the early stages of the pipeline right after the code is built. Unit tests are passed and ensure that individual components work as expected in isolation. Integration tests, these tests should be run once unit tests pass, ensuring that different parts of the system interact properly. Regression tests. After integration tests, regression tests validate that the new changes haven't broken existing functionality. You can configure your pipeline in Jenkins, Gitlab CI, or another CI tool to execute this test in sequence. Two, automated test execution. To ensure that tests are executed automatically, your CICD tool should be configured to trigger the test based on specific actions. Trigger on commit. Every time a developer commits code to the mainframe repository, the pipeline triggers the automated tests. Trigger on full request. Before merging changes into the main branch, the pipeline can run tests on full request to ensure the code is stable. Schedule tests. In addition to triggering tests on commits, you can schedule regression tests to run at specific intervals. For example, nightly builds. An example, in a banking system, each time a developer pushes new code to the repository, Jenkin runs unit tests on the CBL modules first. If the unit tests pass, it proceeds to run integration tests between the Cobal code and the DB two database. Finally, regression tests are executed to ensure that existing account management functions haven't been affected. Three, reporting and feedback. Once the tests are run, it's important to provide immediate feedback to developers. DICD tools like Jenkins can automatically generate reports showing which tests passed or failed, giving developers detailed insights into where the issues lie. Test reports. Set up your CICD tool to generate detailed test reports. For example, Jenkins can display test results in the UI, highlighting failed tests and their reason. Notifications, automate notifications, for example, through email or Slack to alert developers when a test fails, providing immediate feedback and allowing them to fix issues quickly. Best practices for creating reliable and maintainable test automation. To get the most out of test automation in your CICD pipeline, it's important to follow some best practices. This will help you avoid common pitfalls and ensure that your test automation is both efficient and scalable. One, test pass and focus. Automated tests should provide quick feedback. Unit tests should execute in seconds while integration and regression test may take slightly longer. If tests are too slow, they can slow down the entire pipeline, leading to delays in feedback. One tip, break down large tests into smaller, more focused tests. For example, instead of testing an entire transaction workflow in one test, test individual steps separately. Two, ensure tests are isolated. To avoid interference between tests, ensure that each test runs in isolation. This means tests shouldn't rely on shared resources like databases or depend on the outcomes of other tests. One tip, use mocking or service visualization tools to simulate external search systems, ensuring that tests can run independently of other services. Three, make tests repeatable. Automated tests should be repeatable, meaning they produce the same results every time, regardless of the environment in which they are run. This ensures consistency and reliability. One tip, avoid hard coding values or relying on external services. Instead, use configurable parameters to ensure your tests are environment agnostic. Four, regularly update and maintain test sweets. As your mainframe applications evolve, your test should be updated to reflect new features and workflows, regularly maintain and review your test width to ensure that it remains up to date. One tip, set a regular review process to update or remove obsolete tests and add new tests for newly introduced features. Let's take an example. A retail company updates its cobble based inventory management system frequently. By following best practices for test automation, they ensure their CICD pipeline runs automated tests quickly and reliably. They also regularly update their regression test suite to reflect new changes, avoiding outdated or redundant tests. Key takeaways from this lesson. One, incorporating test automation into your CICD pipeline ensures that every code change is automatically validated, reducing errors and improving code quality. Two, unit integration and regression test should be run at different stages of the pipeline, providing fast and reliable feedback. Three, best practices such as keeping tests fast isolated and repeatable help ensure that your test automation is reliable and maintainable. Four, regularly updating test suites ensures that your tests reflect the current state of your mainframe applications. Earning activity. Choose one of your mainframe applications and identify where you can add automated test, unit integration, regression. Configure your CICD pipeline, for example, Jenkins or Gitlab to run this test after each code commit. Review the results of the automated test and analyze how quickly and reliably the feedback is provided. Reflect on how this process improves your development workflow. What's next? In the next module, we'll begin exploring continuous integration pipeline setup. You learn the key principles and goals of continuous integration and how it benefits mainframe environments. We'll also dive into how to set up a robust CI pipeline to streamline your development process. 18. Lesson 1: What is Continuous Integration?: Welcome to Module five, continuous integration or CI pipeline setup. In this module, you'll learn about setting up a CI pipeline for mainframe environments, focusing on continuous integration or CI, automated builds, and tests. We'll explore how CI fits into the Devops landscape, streamlining development and improving code quality. Lesson one, what is continuous integration? Welcome to lesson one of Module five. In this lesson, we're going to explore the concept of continuous integration or CI and its key principles. You've already learned about automating testing in mainframe environments. Now it's time to understand how CI fits into this process and why it's so important, especially in complex mainframe systems. By the end of this lesson, you'll understand the goals of continuous integration and how implementing CI can benefit your mainframe environment by streamlining development, reducing errors, and accelerating feedback loop. Let's dive in. What is continuous integration or CI? Continuous integration or CI is a development practice where developers frequently integrate their code into a shared repository, usually multiple times a day. Each integration is verified by an automated build and test process. This practice helps detect and fix integration issues early, making the development process more efficient and reliable. In a mainframe environment, CI plays a crucial role in modernizing legacy systems by ensuring that code changes are continuously validated and merge, reducing the likelihood of last minute integration problems. Key characteristics of CI include frequent code integration. Developers commit code regularly, reducing the complexity of merging changes. Automated testing each code commit triggers automated tests, ensuring code quality, automated builds. Code is compiled and bill automatically providing immediate feedback on build errors. Immediate feedback. CI provides rapid feedback on whether the latest changes work as expected. Key principles and goals of continuous integration. Let's look at the core principles and goals to guide a successful CI process. These principles help teams stay aligned, reduce integration issues, and improve software quality. One, commit code frequently. In the DI environment, developers commit their code frequently, sometimes several times a day. This ensures that the code base is always up to date and any integration issues are identified early. An example, in a cobble based banking system, developers working on different modules like customer accounts and transactions permit the changes to the shared repository throughout the day. This prevents large conflicting changes from building up over time. To automate the build process. Each code commit should rigger an automated build process. This means compiling the mainframe application code, whether it's in Cabal or PL one, and checking for syntax or build errors. If the build fails, developers receive immediate feedback so they can resolve the issues. An example, a logistics company automates the build process for their mainframe inventory management system. Each time a developer pushes code to get, Jenkins compiles the cob code and reports back on any build failures. Three, automated testing. A core goal of CI is to ensure that each code commit is tested. Automated tests, unit integration and regression are triggered as part of the CI pipeline. These tests ensure that the new changes don't introduce bugs or break existing functionality. For example, after compiling the code for a CBL based payroll system, automated tests are run to ensure that salary calculations, tax deductions, and bonus computations all work correctly. Or provide immediate feedback. A major benefit of CI is the ability to provide developers with immediate feedback. If their changes cause a test to fail or a bell to break, they can they can address the issue immediately before moving on to the next task. An example, in a healthcare application managing patient records, immediate feedback is provided after each code commit, alerting developers if changes break existing database interactions. Five, keep the build fast. The CI process should be optimized for speed. Developers should receive feedback quickly, ideally within minutes of committing cold. This allows for faster iteration and minimizes delays in development. An example, for a mainframe insurance claims processing system, the build process is optimized to take no more than 10 minutes, allowing developers to quickly address any issues before continuing their work. Benefits of CI in mainframe environments. Now that we understand the principles of CI, let's talk about the specific benefits of implementing continuous integrations in a mainframe environment. Modernizing mainframes with CI helps development teams stay agile, reduce errors, and improve overall productivity. One, early detection of integration issues. Frequent code integration means that integration issues are detected early in the development process. This prevents the integration hell that often occurs when code is left unmerged for too long. An example, in a mainframe banking application, integrating customer account changes daily helps identify conflicts between jules like account management and loan processing early, reducing the risk of your issues down the road. Two, faster feedback. By automating builds and tests, TI provides near immediate feedback on code changes. This allows developers to fix issues as soon as they arise, leading to faster iteration cycles. An example, a mainframe retail company runs automated builds and tests every time new code is committed, allowing developers to receive test results within minutes and avoid delayed bug fixes. Three, improve code quality. With automated tests being run continuously, CI helps ensure that code quality is maintained. Each code commit must pass all the tests before it can be merged, preventing unstable code from entering the production environment. An example, an insurance company uses CI to ensure that every new update to their claims processing system passes unit integration and regression test, keeping the system stable and free from major volumes. For reduced risk of production issues. Continuous integration reduces the risk of deploying broken or buggy code to production. Since code changes are tested and validated continuously, the chance of major issues going unnoticed is minimized. An example, a government agency uses CI to reduce the risk of errors in their tax processing system by ensuring every code change is automatically tested and validated before deployment. How CI fits into DevOps for mainframes. In mainframe environments, CI is a key component of the broader DevOp strategy. It helps bridge the gap between traditional mainframe development practices and modern agile methodologies by automating E steps in the development pipeline. DevOps integration, CI enables faster, more reliable delivery of mainframe applications by automating testing and integration, making it easier for developers, investors and operations teams to collaborate. Continuous delivery CD. CI is the foundation for continuous delivery where every code change is not only integrated but also prepared for deployment automatically. Let's take an example. A financial services company implements CI as part of the DevOp strategy, ensuring that code changes in its mainframe transaction system are automatically tested and integrated into the pipeline. This reduces development cycle times and ensures smoother deployment. Key takeaways from this lesson. One, continuous integration or CI involves frequent code integration, automated builds, and automated tests, ensuring faster feedback and improved code quality. Two, the key principles of CI include frequent commits, automated builds, and fast feedback, which help development teams stay aligned and reduce integration error. Three, CI in mainframe environments improves code quality, accelerates feedback, and reduces the risk of production issues by automating critical parts of the development process. Learning activity, identify a module or component in your mainframe application that can benefit from frequent integration. For example, a financial transaction module or a reporting tool. Set up a system for committing code frequently and running automated bills for this module. Reflect on how the faster feedback from CI affects your development workflow. What's next? In the next lesson, we'll explore configuring Jenkins for continuous integration. You will learn how to set up Jenkins jobs to automatically trigger on code committee and how to configure Jenkins pipelines for mainframe specific builds and tests. 19. Lesson 2: Configuring Jenkins for Continuous Integration: Lesson two, configuring Jenkins for continuous integration. Welcome to Lesson two of Module five. This lesson, we'll walk through the process of configuring Jenkins for continuous integration or CI, specifically tailored for mainframe environments. Jenkins is a powerful tool that automates the building, testing, and deployment of your code. By the end of this lesson, you will know how to set up Jenkins jobs that automatically trigger when code is committed and how to configure Jenkins pipelines for mainframe specific builds and tests. Let's get started. Why Jenkins for continuous integration. Jenkins is one of the most widely used CI tools in the DevOp world because it's open source, highly flexible and integrates well with a wide range of development environments, including mainframes. Jenkins enables teams to automate repetitive tasks like building and testing code, freeing up developers to focus on more complex work. Mainframe environments, Jenkins plays a crucial role in modernizing development workflows by seamlessly integrating legacy code with modern CICD practices. With Jenkins, mainframe teams can take advantage of automated builds, tests and deployments that fit into the DevOps pipeline. An example, a financial services company uses Jenkins to automate the build and test process for their cobble based loan processing system. Each time a developer commits code, Jenkins automatically twiggers builds, runs tests and provides immediate feedback on code quality. Setting up Jenkins jobs to trigger on code commits. The first step in setting up Jenkins for CI is creating jobs that automatically trigger whenever new code is permitted to the repository. In this section, we'll walk through the steps to configure Jenkins for this task. Step one, install Jenkins and necessary plugins. Before we can set up Jenkins jobs, you'll need to ensure that Jenkins is installed and configured with appropriate plugins for mainframe development. For Jenkins installation, download and install Jenkins on your server. Install plugins. You'll need plugins such as the Git plug in for version control, the pipeline plugin for creating automated pipelines, and possibly IBM DBBPlugI for building mainframe applications. An example, if you are working with a CBL based mainframe system, you can use the IBM DBBPlugI to integrate with Jenkins for building Kobal programs. Two, Configure source code management or SEM. In Jenkins, every job must be linked to a source code repository, such as Git where your code is stored. You'll configure Jenkins to monitor this repository and trigger jobs based on code changes. Go to Jenkins Dashboard, select new job. Select freestyle project and give your job a name. Under source code management, select Git and enter the URL of your Git repository. Configure Jenkins to monitor the repository for any changes. Three, set up web hooks for automated triggers. To ensure that Jenkins automatically triggers builds, when code is committed, you'll need to configure web hooks or polling to detect changes in the repository. In your Git repository setting, for example, GitHub or GitLab, but figure a web hook pointing to your Jenkins server. This will allow Jenkins to trigger jobs whenever new code is pushed. In Jenkins, under build triggers, select GitHub hook trigger for SEM polling. An example, a retail company sets up a Jenkins job that automatically builds and tests their inventory management systems mainframe code every time a developer commits changes to the. An example of a Jenkins job trigger. When new code is committed to the mainframe repository, Jenkins automatically detects the changes and triggers a new build. This keeps the development process fast and efficient using manual intervention. Configuring Jenkins pipelines for mainframe specific builds and tests. Now that we set up Jenkins trigger on code commit, let's configure a Jenkins pipeline that automates the building and testing of mainframe specific code. In Jenkins, pipelines are a powerful way to define the entire CAI process in a single script. First, create the Jenkins Pipeline script. A Jenkins pipeline script is a declarative or scripted pipeline that defines the step, build, test, and deploy your application. For mainframe specific builds, you'll use tools like IBM, dependency based build or DBB or microfocus enterprise developer, compile and build mainframe code. Go to the Jenkins Dashboard, select new job. Choose Pipeline project. Under the pipeline section, write a pipeline script that defines the stages of your CI process. Here's a simple example of a declarative pipeline for a CBL project. The key stages are as follows. Check out. It retrieves the latest code from the Git repository. Build CBO. It uses IBM DVB to compile COBOL programs. Run unit test. It executes automated unit tests to ensure code quality. Deploys the build application to a test environment. Second, customized pipelines for mainframe workflows. Each pipeline should be customized based on the specific mainframe work flows you're automating. For example, build scripts, use custom build scripts to compile cobble, ELO or JCL. Testing, set up automated unit tests using Z unit or similar mainframe testing frameworks. De automate deployments to the mainframes test environment. An example, a government agency automates their tax processing systems, build and test pipeline with Jenkins. Each time code is pushed, Jenkins builds the cobble modules, runs automated tests, and deploys the system to a staging environment for further validation. Key takeaways from this lesson include, one, Jemkin simplifies continuous integration by automating the process of building, testing, and deploying mainframe code. Two, starting up Jenkins jobs, the trigger on code permit ensures that changes are automatically built and tested as soon as they're made. Three, Jenkins pipelines allow you to create end to end workflows that integrate mainframe specific tools, automating the entire CI process for your legacy systems. Learning activity. Install Jenkins and configure it with the necessary plugins for your mainframe environment. For example, get plug in an IBM DVB plugin. Create a Jenkins job that automatically triggers a build when code is committed to your repository. Write a simple Jenkins pipeline script to build and test your mainframe application, customizing it to fit your development workflow. What's next? In the next lesson, we'll explore triggering automated builds and tests. You'll learn how to automate the process of triggering builds and tests whenever new code is pushed to the depository and how to set up notifications and feedback loops for developers. 20. Lesson 3: Triggering Automated Builds and Tests: Lesson three, triggering automated builds and tests. Welcome to Lesson three of Module five. In this lesson, we'll explore how to fully automate the process of triggering builds and tests whenever a new code is pushed to your repository. This is one of the most important aspects of a continuous integration or CI pipeline. It ensures that every change made to your mainframe application is automatically built and tested without manual intervention. By the end of this lesson, you will know how to configure your CI pipeline, the trigger builds and tests efficiently, and how to set up notifications and feedback loops to keep developers informed. Let's dive in. Why automate builds and tests. Automation is at the core of any CICD pipeline. Automating the process of building and testing your code whenever new changes are pushed ensures that errors are caught early and developers receive immediate feedback on their code. This is especially critical in mainframe environments where legacy systems may be complex and manual testing can be time consuming and prone to error. Automating builds and tests provides several key benefits. Early detection of issues. The sooner you catch bugs or integration problems, the easier they are to fix. Faster feedback for developers. Immediate feedback lets developers know if their code works as expected. Consistency. Automated builds and tests ensure that every code change is treated the same way, reducing variability and human error. Scalability. Automation allows your CI pipeline to handle large and frequent changes more efficiently. Automating the process of triggering bills and tests. To fully automate bills and tests, we need to configure the CI pipeline so that every time code is pushed through the repository, Jenkins or your CI tool of choice, automatically triggers the appropriate build and testing steps. One, using web hooks to trigger bills automatically. The most common way to automate bills is by using web hooks. A web hook is a mechanism that sends real time data from one application to another whenever a specific event occurs. In our case, the event is a code commit or pull request to the repository. There's the step by step instruction how to set it up. First, pig your Git repository. In your Git repository, for example, GitLab or Github, set up a web hook that points to your Jenkins server. Two, web hook URL. The web hook should send a notification to Jenkins whenever new code is pushed. Three, trigger Jenkins job. Jenkins receives the webhook notification and triggers the build job associated with the repository. Let's take an example. Banks coal based loan processing system uses web hooks to trigger builds and tests. Every time code is committed, the Gitlab webhook notifies Jenkins, which automatically starts the build and test pipeline. Developers receive feedbacks in minutes, reducing the time between coding and testing. Configuring Jenkins falling. If you cannot use web hooks, another option is to configure Jenkins to periodically fall the repository check for changes. This isn't as efficient as web hooks, but it can be a useful alternative if your environment does not support web hook integration. Step by step. One, falling configuration. In Jenkins, navigate to the job configuration page and enable the Paul SEM option. Two, set falling frequency, define how frequently Jenkins should check the repository for changes. For example, every 5 minutes. Example, a logistics company with a mainframe inventory management system uses Jenkins falling every 10 minutes to check for updates to the code base. If Jenkins detects new commits, it triggers the pipeline to build and test the updated application. Running automated tests after each build. Once the build is triggered, the next step is to run automated tests. Automated testing ensures that any new changes don't introduce bugs or break existing functionality. Jenkins can be configured to automatically run unit test, integration tests, and regression tests as part of the CI pipeline. One, defining test stages in Jenkins pipeline. In Jenkins pipelines, you can define test stages that run after the build completes. These stages are critical for ensuring code quality before any changes are merged or deployed. Typical stages might include unit testing which ensures the individual components or modules work correctly. Integration testing, which verifies the different modules or systems interact as expected and regression testing, which ensures that new changes haven't broken existing features. Here's an example of Jenkins Pipeline. Setting up notification and feedback loops for developers. After the build and test run, developers need to know whether their changes were successful. Jenkins provide a variety of notification options to inform developers about the status of their builds, tests and deployments. Configuring email notifications. The simplest and most common way to notify developers is through email alerts. Jenkins can automatically send emails to developers whenever a build fails or when tests pass. Step by step. First, install the email extension plugin in Jenkins. In the job configuration, enable email notification and specify the email addresses of the team members who should receive updates. Customize the email content to include build logs, test results, and error details. Using Slack or other messaging tools. For teams that prefer real time messaging, Jenkins can also be integrated with tools like Slack or Microsoft Teams. This allows developers to receive instant notifications when builds or tests fail without waiting for email updates. Step by step. Install Slack notification plugin in Jenkins. Configure the plugin with your Slack workspace and channel information. Add a post build action to send a Slack notification after every build or test completion. An example, a retail company uses Slack notifications in their Jenkins pipeline. Whenever a developer's code fails to build, they receive an immediate message in their team's Slack channel, complete with details on what went wrong and links to the build blogs. Key takeaways from this lesson. One, automating builds and tests ensures that every code change is validated quickly and consistently, reducing the chance of error switching production. Two, web hooks are the most efficient way to trigger bills automatically when new code is committed while Jenkins palling can serve as a backup option. Three, automated stages like for unit, integration and regression are crucial for ensuring that new code doesn't break existing functionality. Four, notifications and feedback loops keep developers informed, ensuring they can address issues as soon as they arise. Earning activity. Set up a web hook in your Git repository to trigger builds automatically in Jenkins whenever code is committed. Configure your Jenkins pipeline to run unit integration and regression test after each build. Set up email or slack notifications to alert developers when build or test fail. What's next? In the next lesson, we'll explore best practices for CI pipelines in mainframes. You will learn how to avoid common pitfalls during CI pipeline setup and discover strategies for optimizing and scaling CI pipelines in complex mainframe environment. 21. Lesson 4: Best Practices for CI Pipelines in Mainframes: Lesson four, best practices for CI Pipelines in mainframes. Welcome to Lesson four of Module five. In this lesson, we're going to explore the best practices that help ensure your continuous integration CI pipeline is optimized for mainframe environment. We'll identify common pitfalls you should avoid when setting up your CI pipeline and we'll discuss strategies for optimizing and scaling your pipeline to handle complex mainframe workflows. By the end of this lesson, you will understand how to build a robust, scalable CI pipeline that can streamline your development process and improve code quality for mainframe systems. Let's get started. Um, common pitfalls to avoid during CI pipeline setup. Setting up a CI pipeline in a mainframe environment can be challenging. Let's discuss some of the most common pitfalls and how to avoid them. Over complicating the pipeline early on. One of the biggest mistake teams make is overcomplicating their CI pipeline from the start. While it's attempting to include every possible automation, this can lead to bloated pipelines that are difficult to maintain. Best practice Start simple and build gradually. Focus on the essentials, automating builds, running basic tests, and providing immediate feedback to developers. One should establish stable pipeline, add more advanced features like deployment automation or complex test sites. An example, financial institution building a CI pipeline for the Cobal banking system initially tried to automate everything, builds tests, code reviews, and deployments. Pipeline became slow and prone to errors. By scaling back to just builds and unit tests first, they stabilize the pipeline before gradually adding other elements. Ignoring pipeline performance. In a mainframe environment, builds and tests can take longer due to the complexity of the systems. Calling pitfall is ignoring pipeline performance, which leads to slow feedback loops and frustrated developers. Best practice optimize the pipeline for speed whenever possible. Parallelize builds and tests to reduce bottlenecks and avoid unnecessary steps in the pipeline that don't add value. An example, a logistics company noticed that their CI pipeline took over an hour to complete, delaying feedback to developers. By parallelizing their unit and integration test, they reduce a total pipeline time to 15 minutes, significantly improving developer productivity. Not maintaining the pipeline. CI pipelines require regular maintenance. Over time, tests may become outdated, build scripts may need updating and new tools or integrations might be required. Neglecting pipeline maintenance can lead to failures or inefficiencies. Best practice regularly review and update the pipeline. Treat the pipeline like any other code, ensure it is version controlled, tested, and periodically re factored. An example, an insurance company CI pipeline started failing after they introduced a new testing tool for their PL one based application. They hadn't updated their pipeline to integrate with a new tool causing build failures. After updating the pipeline configuration, they restored stability. Lack of proper test coverage. Another pitfall is having insufficient test coverage in the CI pipeline. Without enough automated tests, both changes may introduce bugs that go undetected, leading to issues in production. Best practice, implement comprehensive test coverage, including unit test, integration test, and regression test. Ensure that your test cover critical components of your mainframe applications. Let's take an example. A healthcare company has several issues in their production environment because their CI pipeline only included unit tests. By adding integration and regression tests, they caught issues early and reduce the number of bugs making it to production. Strategies for optimizing CI pipelines in mainframes. Now that we've covered the common pitfalls, let's explore strategies for optimizing and scaling CI pipelines in mainframe environment. First, parallelize builds and tests. As your CI pipeline grows in complexity, time it takes to run builds and tests will increase. One of the best ways to optimize your pipeline is to run builds and tests in parallel. How to do it? Use Jenkins or other CI tools to split your pipeline into multiple stages and run concurrently. For example, you can run cobble builds and integration tests at the same time to reduce overall pipeline time. Let's take an example. The government agency implemented parallgization in their mainframe CI pipeline, allowing them to build their tax processing system and run database tests concurrently. This cut their pipeline time in half. Second, use caching and artifacts. Build caching can save time by reusing parts of previous builds, especially if the same dependencies are needed across multiple stages. Similarly, artifacts like compiled code or test results can be shared between stages to avoid redundant steps. How to do it. Set up caching in Jenkins to store built artifacts that don't need to be rebuilt on every run. This is particularly useful for large code bases or builds with many dependencies. An example, a retail company's mainframe inventory system was taking a long time to build because each stage downloaded the same dependencies. By using build caching, they reduced build time by 30%. Third, implement robust logging and monitoring. As your pipeline becomes more complex, it's important to have robust logging and monitoring in place. This will help you identify and resolve issues quickly when something goes wrong. How to do it. Configure Jenkins or your CI tool to generate detailed logs for every build and test stage. Integrate monitoring tools like Prometheus or Grafana to track the performance of your pipeline over time. An example, a telecom company implemented real time monitoring for their CI pipeline, allowing them to quickly identify bottlenecks and issues with specific build stages. This reduced downtime and improve pipeline reliability. Or scale with distributed build. As your team grows and your mainframe applications become more complex, a single CI server might not be able to handle the load. Scaling your pipeline with distributed builds allows you to handle more simultaneous builds and tests. How to do it. Use Jenkin agents to distribute builds across multiple servers. This ensures that your pipeline can handle more tasks in parallel without overwhelming a single machine. An example, a large bank with multiple teams working on different parts of their mainframe system sale their Jenkins CI pipeline using distributed builds. By leveraging multiple servers, they ensure that their pipeline could handle frequent code commits from multiple teams without delay. Key takeaways from this lesson. One, start simple with your CI pipeline, focusing on essential automation tasks before adding complexity. Two, optimize pipeline performance by parallelizing builds and tests using caching and keeping pipelines lean to improve speed. Three, maintain your pipeline by regularly updating, build scripts or configurations to keep the CI process efficient and effective. Four, scale your pipeline by implementing distributed builds and robust monitoring to handle more complex workloads in mainframe environment. Earning activity. Review your current CI pipeline setup. Identify any stages or steps that could be optimized for performance. For example, parallelizing tests and caching artifacts. Implement at least one optimization strategy in your CI pipeline. For example, enable caching at parallel test stages. Third, monitor the performance of your pipeline over the next few weeks and evaluate whether the optimization has improved builds and test times. What's next? In the next module, we'll explore automating deployment and continuous delivery or CD. You'll learn about the key principles of continuously CD and how it differs from continuous integration and how to set up automated deployment pipelines for mainframe applications. 22. Lesson 1: Introduction to Continuous Delivery (CD): Welcome to Module six, automating Deployment and continuous delivery for CD. In this module, you will learn how to automate the deployment of mainframe applications and integrate continuous delivery CD into your workflows. By the end of this module, you will understand the key concepts of CD and how to implement it in mainframe environments, ensuring faster, more reliable releases. Lesson one, introduction to continuous delivery or CD. Welcome to lesson one of Module six. In this lesson, we're going to introduce the concepts of continuous delivery or CD, discuss its goals and highlight the differences between continuous delivery and continuous deployment. Understanding CD is key to automating the deployment process, which allows organizations to release software quickly and reliably while maintaining the stability of their systems, including complex mainframe environments. By the end of this lesson, we'll have an understanding of what continuous delivery is, how it fits into the DevOps workflow, and why it is crucial for mainframe modernization. Let's dive in. What is continuous delivery or CD? Continuous delivery or CD is a software development practice where code changes are automatically prepared or release to production. It builds on the foundation of continuous integration or CI by ensuring that all code changes are continuously tested, built, and packaged in a way that they are always ready for deployment. However, the actual deployment is still a manual step or requires an approval process ensuring control and governance over production releases. In mainframe environments, CD enables team modernize legacy systems by delivering changes in smaller, more manageable increments, reducing risk and improving quality. Key goals of continuous delivery. One, automated testing and packaging. Every code change is automatically tested and packaged, ensuring it's ready for deployment at any time. Two, released on demand. With every change being deployment ready, teams can release updates at their convenience, minimizing downtime and risks. Three, reduced manual intervention. Automating most of the pipeline, C reduces the need for manual steps in the deployment process, improving consistency and speed. For improved feedback loops. City allows faster feedback on changes, ensuring that issues are caught early in the pipeline. An example, a healthcare organization uses City to automate the testing and packaging up updates to their CBL based patient management system. Whenever a new feature or bugfix is ready, can be deployed within hours, ensuring that the system remains reliable without long release cycles. How CD fits into the DevOps workflow. Continuous delivery is a key component of the DevOps approach, which emphasizes collaboration between development and operations teams to ensure faster, more reliable software releases. CD is typically implemented after continuous integration or CI, which automates the process of integrating code changes and running tasks. Once code passes all the tests and builds successfully, the CD process takes over, preparing the application for deployment. However, in CD, the actual deployment to production is still a controlled step. This is critical in industries like banking or healthcare where a failed deployment can have significant consequences. CD in mainframe environments. For mainframes, CD means integrating modern tooling with legacy systems. Tools like IBM, Urban C Deploy or answerB can automate the packaging and deployment of mainframe applications, reducing the reliance on manual processes and ensuring consistency across deployments. An example, a bank integrates its legacy mainframe systems with CD practices. Each time a developer updates the Cobol code base, automated tests are run and the application is packaged for deployment. However, because of strict compliance requirements, the final step, deployment to production requires approval from a senior manager, ensuring that governance standards are met. Differences between continuous delivery and continuous deployment. While continuous delivery city, and continuous deployment sound similar, they have distinct differences. Let's explore those differences and how they impact the release process. Continuous delivery or CD, the goal is to ensure that every code change is automatically tested, built, and ready for deployment. For release control, deployments to production are manual or require approval. This case, it's suitable for environments require compliance, governance, or manual approval before deploying to production, for example, banking or healthcare. Continuous deployment, its goal is for every code change that passes test, it is automatically deployed to production without any manual intervention. For release control, deployment to production is automatic once test pass. This case, it's suitable for environments with less stringent compliance requirements or speed is the highest priority. For example, ecommerce platforms. The key difference in continuous delivery deployment is manual, and there is a control decision point before production release. In continuous deployment, the entire process from code commit to production release is automated. An example of continuous delivery. A healthcare organization automates the packaging and testing of the cobble tested patient management system. With CD, updates are always deployment ready, but production releases still require managerial approval to ensure compliance. Let's take another example. A retail company that runs an online ecommerce platform uses continuous deployment because Speed is critical for deploying new features and bug fixes. This DICDPipeline automatically deploys every successful build directly to production. On the other hand, a government tax agency uses continuous delivery with a manual approval process to maintain control over deployments and ensure compliance with legal standards. Benefits of continuous delivery in mainframe environments. Adopting continuous delivery in mainframe environments offers several significant benefits, especially when it comes to modernizing legacy systems. Let's explore some of these benefits. One, faster, more reliable releases. With continuous delivery, updates are packaged and ready for release at any time, allowing teams to deploy smaller incremental changes more frequently. This reduces the risk of large disruptive releases and allows organizations to deliver features faster. Two, reduce risk and downtime. By automating the testing and packaging processes, CD ensures that only stable, high quality updates are deployed. Automated testing helps catch issues early in the pipeline, reducing the risk of errors reaching production and minimizing downtime. Three, better collaboration between teams. CD breaches the gap between development and operations teams by automating the process of packaging and preparing code for deployment. This reduces hands off and manual errors, leading to smoother collaboration and faster releases. Four, continuous improvement. With City in place, teams can gather feedback faster, learn from each release and continuously improve their processes. This is particularly valuable for mainframe teams transitioning from traditional waterfall development to agile methodologies. By example, an insurance company uses the City to manage the deployment of its cobble based claims processing system. By releasing small updates more frequently, they reduce the risk of outages and ensure that new features are delivered without disrupting day to day operations. Key takeaways from this lesson. One, continuous delivery or CD automates the process of preparing code for deployment, ensuring that every update is tested and ready for release. Two, CD differs from continuous deployment in that deployment to production is a manual or controlled step, ideal for environment with strict compliance or governance requirements. Three, adopting CD in mainframe environments can reduce risk, improve collaboration, and accelerate the release of new features and updates. Earning activity. Identify one mainframe application in your organization that could benefit from adopting continuous delivery. Analyze how automating the packaging and testing process would improve the release cycle for that application. Create a high level plan for implementing CD, outlining which steps in the deployment process can be automated. What's next? In the next lesson, we'll dive deeper into automating mainframe deployments and learn about tools and strategies for automating deployments in mainframe environment, including how to create deployment scripts for Cobo, AL one, and other legacy applications. 23. Lesson 2: Automating Mainframe Deployments: Lesson two, automating mainframe deployments. Welcome to Lesson two of Module six. In this lesson, we will explore how to automate the deployment of mainframe applications. We'll cover the essential tools for automating deployments, such as IBM, urban co deploy, and we'll also walk through the process of creating deployment scripts that simplify and streamline your mainframe application deployments. By the end of this lesson, you will have a solid understanding of the tools and strategies required to automate deployments for mainframe applications, making your releases more consistent, reliable, and faster. Let's get started. The importance of automating mainframe deployments. In modern DevOps practices, deployment automation is a key component of the continuous delivery CD pipeline. This is no different for mainframe environments where automating deployments can significantly improve the speed, reliability, and consistency of releasing applications. Mainframe environments often rely on legacy systems that have traditionally involved manual deployment processes. Manual deployments are prone to human errors, take longer and are harder to reproduce reliably. Automating these deployments ensures that applications are deployed in the same way every time, reducing risk and improving efficiency. Benefits of automating mainframe deployments include, one, consistency. Automating deployments reduces the risk of errors by ensuring the same deployment process is followed every time. Two, speed. Automated deployments can be executed much faster than manual processes, reducing down time and improving productivity. Three, reliability. With automated deployment scripts, you can ensure that all the necessary steps are performed correctly in every environment, leading to more reliable releases. Let's take an example. A retail company managing an inventory system on a cobble based mainframe automated their deployment process using IBM Urban C Deploy. This reduced deployment time by 50% and eliminated the errors that frequently occurred during manual deployments. Tools for automating mainframe deployments. Several tools are available for automating deployments in mainframe environments. The goal of these tools is to standardize and automate the deployment process, ensuring that applications are released consistently and without manual interventions. IBM Urban C Deploy. IBM Urban C Deploy is popular deployment automation tool used in mainframe environments. It allows you to automate and orchestrate complex deployments across a variety of environments, including mainframes. Urban C Deploy integrates well with other Dabo tools, making it an essential part of modernizing mainframe deployments. It features orchestrate deployments. It allows you to define, manage, and execute deployment processes from development to production. Environment management, it supports deploying applications to multiple environments with the same process, ensuring consistency across development, testing, and production environments. Rollback support built in rollback mechanism help revert to the previous application versions in case of deployment failures. Let's take an example. A banking institution modernized its deployment process for its CBO and JCL based core banking system using IBM Urban code deploy. With Urban code, the bank was able to automate deployments across multiple regions, reducing manual intervention and improving the speed of deploying updates. CBL for mainframes. NCBO is another powerful automation tool that can be used in mainframe environments. It is widely used for infrastructure automation and can also manage application deployment. While NCB is more commonly associated with cloud and server automation, it supports mainframe environments with modules specifically designed for managing ZOS systems. Key features include agent less architecture. AnsibL does not require additional agents on the systems it manages, making it lightweight and easy to use. Playbooks for automation. Ansibl uses playbooks, which are Yamal files, define the sequence of tasks for deployment. Integration with CICD. Ansibl integrates well with Jenkins and other CICD tools, allowing for seamless automation of deployment tasks. Let's take an example. A logistics company managing a PLO based application automated their deployments using AnsibPlaybook. This allowed them to manage multiple environments from a central configuration significantly reducing time and effort required for each release. Creating deployment scripts for mainframe applications. To automate your mainframe deployments, you will need to create deployment scripts. These scripts define the steps required to deploy an application such as compiling code, transferring files, configuring environments, and executing the application. Here are the key steps for creating a deployment script for a mainframe application. First, define the deployment process. The first step is to define the deployment process. For example, deploying a cobol or PL one application might involve compiling the code, transferring files to the target environment, running configuration tasks, and executing the application. Example process. Step one, compile the CBL code. Step two, transfer the compiled binaries to the test environment. Step three, execute the JCL to start the application. Two, create a script for automation. Once the process is defined, you can create the actual script. If you're using IBM Urban C Deploy, you would define this process, the tool using its deployment automation features. If you're using a tool like answerable, you would create a Yamal playbook that outlines the tasks. Here's an example deployment script using answervo. This simple script compiles the cobble code, transfers the binaries to the target environment, and runs the JCL to execute the application. Three, test the deployment script. Before using your deployment script in production, it's critical to test it in a staging or testing environment. Ensure that all steps execute as expected and that the application is deployed correctly without any errors. Testing tips, test in a development or staging environment first. Validate that all files are transferred correctly and that the application runs as expected. Check for any environment specific issues such as meaning libraries, missing libraries or incorrect permissions. Key takeaways from this lesson. One, deployment automation ensures that applications are deployed consistently and reliably, reducing the risk of human error. Two, IBM, Urban C Deploy and ansib are powerful tools for automating mainframe deployments, each offering features to streamline the deployment process. Three, creating deployment scripts involves defining the deployment process, writing the script in the appropriate tool and thoroughly testing it in a non production environment. Earning activity. Choose a mainframe application in your organization that currently has a manual deployment process. Create a high level plan for automating this deployment using IBM, Urban co Deploy, and Cibl or another automation tool. Write a simple deployment script to automate the most basic steps of the deployment process, for example, transferring files or compiling code. What's next? In the next lesson, we'll explore setting up rollback mechanisms. You'll learn how to implement rollback mechanisms in mainframe environments and automate the process in case of deployment failures. This ensures that your system remains stable and operational, even if a deployment doesn't go as planned. 24. Lesson 3: Setting Up Rollback Mechanisms: Lesson three, setting up rollback mechanisms. Welcome to lesson three of Module six. In this lesson, we're going to explore one of the most critical aspects of deployment, rollback mechanisms. Rollbacks ensure that when something goes wrong during a deployment, you can quickly and efficiently revert your system to its previous stable state. This is particularly important in mainframe environments where the cost of downtime can be extremely high and mistakes can have significant business impacts. By the end of this lesson, you'll understand how to implement and automate rollback mechanisms in your mainframe deployments, ensuring that your system remains stable even when deployments encounter problems. Let's dive in. Why rollback mechanisms are crucial in mainframe deployments. In modern continuous delivery pipelines, deploying code is an automated process. However, not every deployment goes smoothly. Bugs, configuration issues, or hardware failures can cause problems that impact the stability of your system. Rollback mechanisms allow you to quickly revert the system to its last known good state without affecting business operations. Key benefits of rollbacks. One, minimize downtime. Rollbacks help restore system functionality quickly, minimizing disruption to users and the business. Two, reduce risk. With an automated rollback mechanism in place, you reduce the risk of failed deployments impacting critical business functions. Three, improve confidence. Developers and operations teams can deploy changes more frequently, knowing that there's a safety net in place in case something goes wrong. Let's take an example. A financial institution deploying updates to its mainframe based core banking system encountered issues during a critical update. Due to the complexity of the system, a bug went unnoticed during testing. With a rollback mechanism in place, they quickly reverted to the previous stable version, avoiding significant downtime and loss of business. Strategies for implementing rollback mechanisms in mainframe environment. Implementing rollback mechanisms in mainframe environment involves careful planning and the right tools. Let's look at the most effective strategies for setting up rollbacks. Strategy one version control for mainframe applications. Just as version control is crucial in non mainframe environments, it's equally important for mainframe systems. By tracking every change to your application and its configurations, you can easily identify which version to roll back to. How it works. When a deployment fails, you can use version control like Git or code or endeavor for mainframe software to retrieve the last table version of your application and redeploy it. Best Practices. Keep a history of all application changes and configurations. Use tags or labels in your version control system to mark stable releases. For example, a healthcare company uses Git to track Kobal code changes. Each stable release is tagged with a version number, making it easy to roll back when a deployment fails. Strategy two, automated backups of mainframe data and configurations. In addition to version controlling your code, it's essential to have automated backup of your data and environment configurations. Before deploying new code, automated systems can take snapshots of databases and configurations which can be restored if the deployment fails. How it works. Tools like IBMZ system automation can automatically backup your data and system configurations before each deployment. In case of failure, you can roll back not just the code, but also restore data and configuration settings. Best practices, schedule automatic backups before every deployment. Store backup securely and ensure they are regularly tested to ensure they work. An example, a telecom company automates backups of its PL one based billing system before every major deployment. When a deployment failed due to a configuration error, the backup allows the company to restore the system quickly. Strategy three, Cary and blue green deployments. Advanced deployment strategies like canary deployments and blue green deployments allow you to test your deployment on a subset of users before fully rolling it out. If the deployment causes issues, you can roll back by redirecting traffic to the old version of the system. Canary deployment, Deploy the new version to a small percentage of users first. If there are no issues, continue deploying to the rest of the system. Blue green deployment, maintain two environment, one live, which is blue, and one ready for the new release which is green. Deploy to the green environment, and if the new version is stable, switch all traffic over. If there's a failure, you can quickly switch back to the blue environment. Best practice, use canary deployment for gradual rollouts, minimizing risk. Implement blue green deployment in high availability environments to enable fast rollbacks. An example, a government tax agency uses blue green deployments to release updates to its mainframe tax filing system. When a new update causes issues, they simply revert traffic back to the old environment without affecting users. How to automate rollbacks in case of deployment failures. Once you have the right strategies in place, the next step is to automate the rollback process. This ensures that when a failure is detected, the rollback happens automatically without waiting for manual intervention. One, automated rollback triggers. Automating rollback starts with setting up figures that detect deployment failures. This triggers can be configured based on a variety of metrics, including failed tests. If the deployment fails, a set of predefined tests, the rollback is triggered automatically. Performance metrics. If the system performance degrades after the deployment, rollback mechanisms can kick in. Error logs, specific error patterns in the logs can be used to trigger rollbacks. Example set up. Using IBM Urban code Deploy, you can configure automatic rollback triggers based on deployment status. If a deployment fails, Urban code automatically initiates rollback process, restoring the previous version of the application and notifying the operations team. Two, scripted rollback processes. In addition to automatic triggers, you'll need rollback scripts that automate the actual process of rolling back code configurations or databases. Here is a sample rollback script that restores backups and restarts services in the event of deployment failure. This example shows how to restore backups, rollback binaries and restart services in the case of a failed deployment. Key takeaways from this lesson. One, rollback mechanisms are essential to ensure that mainframe systems can quickly recover from failed deployments without affecting business operations. Two, strategies like version control, automated backups and canary blue green Deployments reduce the risk of failed deployments and allow for smooth rollbacks. Third, automating rollbacks with triggers and script ensures that the system can revert to a stable state quickly and reliably. Learning activity. Identify a mainframe application in your environment that could benefit from automated rollback mechanism. Create a plan for setting up automated backups and rollback scripts for that application. Test your rollback mechanism by simulating a failed deployment in a staging environment and verifying that the rollback process restores the system to a stable state. What's next? In the next lesson, we'll explore deploying to staging and production environments. You will learn best practices for deploying mainframe applications to testing, staging and production environments while ensuring successful deployments with minimal downtime. 25. Lesson 4: Deploying to Staging and Production Environments: Lesson four, deploying to staging and production environments. Welcome to lesson four of Module six. In this lesson, we'll dive into best practices for deploying mainframe applications to testing, staging and production environments. A successful deployment process ensures that applications are thoroughly tested in lower environments before they reach production, minimizing downtime and ensuring system stability. By the end of this lesson, you will be able to confidently deploy applications with minimal risk following proven strategies for smooth transitions between environments. Let's get started. Why deploy staging before production? Before an application reaches production, it's critical to test it in environments that closely resemble production, but without the risk. Staging environments provide a space where the application can be validated for performance, security and stability before final deployment. Key benefits of using a staging environment include one, validation in a production like environment. Staging environments mirror production closely, allowing you to test for real world performance issues, security vulnerabilities, and functionality. Two, early detection of issues. Bugs, configuration problems, and performance bottlenecks can be caught and fixed before the application reaches production. Three, minimizing downtime. Thoroughly tested applications are less likely to cause applications or require emergency rollbacks, reducing the chances of downtime in production. An example, a financial institution deploying a hobble based transaction processing system validates every release in a staging environment where they simulate real world transaction loads. By identifying issues in staging, they reduce production downtime by 40% during major releases. Best practices for deploying to staging and testing environment. Deploying to testing and staging environment should be a key part of your continuous delivery pipeline. Let's explore the best practices that ensure your deployments are smooth and reliable. Best Practice one, Mirror production environments in staging. The closer your staging environment is to production, the more accurately you can validate your application's readiness. This means using the same configurations, data structures, and system architectures. Best practice, ensure that your staging environment mirrors production as closely as possible, including network configurations, database connections, and security testing. An example, a logistic company created an exact replica of their production mainframe environment in staging. By running end to end test on this environment, they could catch configuration issues that would have been impossible to spot in testing alone. Best practice to automated testing before staging deployment. Before deploying to staging, your application should already passed a comprehensive suite of automated tests. This includes unit tests, integration tests, regression tests, and performance tests. Best practice, automate as much of the testing process as possible before moving code to staging. Set up continuous integration CI tools like Jenkins to trigger automated tests after every commit. An example, a telecom company automated over 80% of their tests, reducing manual validation efforts in staging. By catching most issues before staging, they could focus on performance and stress testing in their staging environment. Best Practice three, use canary or blue green deployments for staging. As discussed in the previous lesson, canary deployments and blue green deployments allow you to gradually release your applications in a way that minimizes risk. In staging, this means deploying new code to part of the system first and monitoring its behavior before releasing it across the full environment. Best practice, use canary deployments in staging to gradually introduce changes and minimize the risk of disruption. This way, you can identify any issues before a full deployment. An example, an ecommerce company deploying a mainframe based inventory management system use a canary deployment strategy in staging, where 10% of the system handle the new release while the rest remain on the previous version. This allowed them to quickly detect and fix any issues with the new release before a full rollout. Best Practice four, monitor and log everything. Detailed monitoring and logging are crucial when deploying to both staging and production environment. This allows you to quickly detect and resolve issues, especially when they don't appear immediately after deployment. Best practice, set up comprehensive monitoring systems, for example, Grafana or Prometheus and logging mechanisms to track performance errors and anomalies during and after deployment. In staging, review these logs and performance metrics to ensure everything is running as expected before moving to production. An example, a healthcare provider monitors the performance of their mainframe based patient management system during staging deployments. By analyzing performance logs in staging, they avoided critical failures in production that could have affected patient care. Deploying to production environments. When it's time to deploy to production, following best practices ensures that the transition is smooth with minimal risk of failure or downtime. Here's how to achieve successful production deployments. A one, plan for downtime windows or avoid them. While the goal is always to minimize downtime, some mainframe applications may require brief windows of downtime during deployment. Properly scheduling and planning for these windows is essential. Best practice. I downtime is unavoidable, schedule it during off peak hours, ensure that all stakeholders are informed ahead of time and that there's a contingency plan in place to handle potential issues. Idally aim for zero downtime deployments by using strategies like blue green deployment. An example, a large insurance company uses blue green deployments to avoid downtime when rolling out new features for the cobble based claims processing system. By keeping two environments live and switching between them, they maintain 24 by seven availability during deployment. Two, run final test in production. Even after rigorous testing in staging, it's a good practice to run basic tests in production to ensure that the application is functioning correctly with live data. This might include smoke tests, user acceptance tests, or performance checks. Best practice, automated smoke tests in production immediately after deployment to confirm that the core functionality of the application is intact. This test should be quick but thorough enough to catch critical issues. Let's take an example. A government agency deploying a tax filing system to production runs a series of automated tests on key functionalities like login, data submission, and transaction processing. By doing so, they ensure that the system works correctly before opening it to users. Three, monitor in real time. Once the application is live in production, monitoring becomes even more critical. Monitoring in real time allows you to quickly detect and respond to any performance degradation, errors, or unexpected behaviors. Best practice, use tools like Dynatrace, Splunk, or Grafana, to monitor production systems in real time. Set up alerts for key metrics such as CPU usage, memory consumption, and transaction response times. An example, a retail company monitors their mainframe based order processing system using Dynatrace. Real time alerts notify the team if there are any performance issues, allowing them to resolve problems before they impact customers. Key takeaways from this lesson one, staging environments mirror production, providing space to validate the application under real world conditions before full deployment. Two, automated testing ensures that most issues are caught before staging, reducing the risk of failures in production. Three, canary or blue green deployments minimize the risk of disruptions by allowing you to test new releases incrementally. Four, real time monitoring and final production tests are essential to ensuring successful deployments with minimal downtime. Learning activity, identify an application in your mainframe environment that could benefit from a more structured deployment process. Create a deployment plan that includes both a staging environment and a canary or blue green strategy. Set up monitoring tools to track performance during staging and production deployments and implement automated tests for both environments. What's next? In the next module, we'll explore ensuring security and compliance in CICD pipelines. You will learn about the key security challenges in automating mainframe deployments and discover best practices for securing your CICD pipeline, protect your organization's sensitive data and systems. 26. Lesson 1: Security Considerations in CI/CD: Welcome to Module seven, ensuring security and compliance in CICD pipelines. In this module, you will learn how to secure your CICD pipelines and ensure compliance with regulatory frameworks. By the end of the module, you'll be equipped to protect your mainframe systems from vulnerabilities while meeting industry standards for security and compliance. Lesson one, security considerations in CICD. Welcome to lesson one of Module seven. In this lesson, we're going to discuss the security challenges that arise when automating mainframe deployments in a CICD pipeline. While CICD pipelines bring speed and efficiency to development and deployment processes, they also introduce new risks. It's essential to integrate security into every stage of your pipeline, ensuring that both your code and your systems remain secure. By the end of the lesson, you'll understand the key security risk in automated mainframe environments and how to implement best practices to protect your pipelines from vulnerabilities. Let's dive in. Key security challenges in automating mainframe deployments. As organizations adopt DevOps practices and integrate their mainframe systems into modern CICD pipelines, they face unique security challenges. Mainframes handle critical data and transactions, often processing financial, healthcare or government records, which makes security breaches especially costly. One, expanding the attack surface. You automate the deployment, when you automate the development and deployment process, you connect various systems, tools, and users. Each of these connections can introduce vulnerabilities. As CICD pipelines grow in complexity, the number of access points for potential attackers also increases. Challenge. An automated pipeline might connect the source code repository, build servers, testing environments, and production systems. Each of these stages creates potential attack vectors for unauthorized access, malicious code injections or data leaks. An example, a financial institution implementing CICD pipelines for their cobble based transaction system faced a security breach when an unsecured API used in their testing environment was exploited. Attackers gain access to sensitive test data, which could have been disastrous if it had gone undetected. Two, managing secrets and credentials. Automating deployment often requires access to multiple systems, databases, and servers. Credentials like API keys, passwords, and certificates are necessary for the pipeline to function. But if they're not managed securely, they become a significant risk. The challenge hard coding secrets like passwords or access tokens into the CICD pipeline script is a common mistake. This exposes critical credentials to anyone with access to the code base leading to potential unauthorized access. An example, a healthcare company inadvertently expose API keys in their CICD pipeline script, giving an authorized users access to the development environment which contain patient data. Implementing better Secret management would have prevented this exposure. Three, ensuring code integrity and preventing supply chain attacks. In a CICD pipeline, code passes through multiple stages, tools, and environments. Ensuring the integrity of the code at each stage is essential. Supply chain attacks where malicious code is introduced through third party libraries or dependencies can compromise your entire application. The challenge CICD pipelines that rely on open source dependencies or third party components are at risk of supply chain attacks. If compromised libraries are integrated into your code, they could introduce vulnerabilities into your mainframe system. An example, an ecommerce platform using CICD pipelines to deploy updates to its mainframe inventory system fell victim to a supply chain attack when a compromised open source library was pulled into their build. This introduced malware that disrupted their inventory tracking. Or securing the pipeline itself. The CICD pipeline infrastructure itself, tools like Jenkins, Gitlab or Urban Co Deploy needs to be secured. Attackers targeting your pipeline tools and introduce malicious code, modify builds, or even take control of deployment processes. The challenge failing to secure the infrastructure of your CICD pipeline leaves it vulnerable to attacks. This includes securing access to build servers, source control, and the pipeline configuration itself. An example, a telecom company's Jenkins server used for automating the deployment of mainframe updates was left unsecured. Hackers gained access to the server and injected malicious code into one of their critical applications leading to significant downtimes. Best practices for securing CICD pipelines. Now that we've explored the key security challenges, let's look at the best practices that can help you secure your CICD pipelines and protect your mainframe systems from vulnerabilities. One, implement shift lap security. The concept of shift lap security means integrating security checks early in the development process rather than waiting until the code reaches production. By incorporating security into the CICD pipeline from the start, you can catch vulnerabilities before they become serious threats. How to use static code analysis tools to scan security vulnerabilities as soon as developers commit code. Automated security testing like vulnerability scanning and dependency checking in every pipeline stage. An example, a bank using DevOps for their mainframe systems integrated static code analysis tools into their CI pipeline, catching code vulnerabilities early and preventing insecure code from reaching production. Two, secure secrets and credentials. Ensure that all secrets, passwords, and API keys used in the pipeline are stored securely. Avoid hard coding credentials in scripts or configuration files. How to implement use Secret management tools like HashiFRpVol or AWS Secrets Manager to securely store and access secrets. Implement role based access control or RBAC to limit who can access specific credentials and secrets. Rotate keys and credentials regularly to minimize the risk of unauthorized access. An example, a healthcare organization that deployed applications to their mainframe implemented HashiCorp vault for SECRET management. By doing so, they ensure that no credential were exposed in the pipeline and that access was tightly controlled. Three, enforce code integrity with signed commits and verified builds. To prevent tampering and ensure code integrity, enforce the use of sign commits in your version control system. Additionally, use verified builds to ensure that no malicious code has been introduced into the pipeline. How to implement. Require developers to sign commits using GPG or new privacy guard keys to prove the authenticity of their code. Set up build verification in your CICD pipeline to ensure that code being deployed matches what was committed to the repository. An example, an ecommerce company introduced signed commits for their mainframe application CICD pipeline. This ensured that every commit would be traced back to a verified developer reducing the risk of unauthorized changes to the code. Or, secure the CICD pipeline infrastructure. Lockdown access to your pipeline tools and infrastructure to prevent unauthorized access. This includes securing build servers, source code repositories, and deployment automation tools. How to implement, use multifactor authentication or MFA for all users accessing CICD pipeline tools like Jenkins, GitLab, or Urban code Deploy. Keep your CICD tools and dependencies up to date to protect against vulnerabilities. Regularly audit and review pipeline configurations for security gaps. An example, a government agency secured its Jenkins and Gitlab servers by enforcing MFA, limiting user access based on roles and regularly updating their tools. This reduced the risk of unauthorized access to critical systems. Key takeaways from this lesson. One, integrating security early or shift lab in your CICD pipeline reduces vulnerabilities before they reach production. Two, secure secrets and credentials using proper management tools to avoid exposure in the pipeline. Three, ensure code integrity by using sign commits, verified builds, and regular security scans. Four, lockdown pipeline infrastructure with multi factor authentication, access control, and regular updates to protect the pipeline from attacks. Learning activity, identify a potential risk in your current CICD pipeline. Develop a plan to mitigate the risk using one of the best practices mentioned in this lesson. For example, implementing secret management or adding automated security testing. Three, test in a staging environment and review the result. What's next? In the next lesson, we'll dive into compliance and regulatory requirements. You'll learn how to navigate key regulatory frameworks for mainframe environments and how to implement compliance checks within your CICD pipeline to ensure that your deployments meet industry standards. 27. Lesson 2: Compliance and Regulatory Requirements: Lesson two, compliance and regulatory requirements. Welcome to Lesson two of Module seven. In this lesson, we will discuss the compliance and regulatory frameworks that apply to mainframe environments, especially in highly regulated industries like finance, healthcare, and government. We will also explore how to integrate compliance checks into your automated CICD pipelines, ensuring that your deployments meet the necessary standards without slowing down the development process. By the end of this lesson, you will understand how to navigate regulatory requirements in a DevOx world and automate compliance within your CICD pipelines. Let's dive in. Understanding regulatory frameworks for mainframe environments. Mainframe environments often operate in industries that require strict compliance with regulatory standards. These regulations are designed to protect data, ensure privacy, and maintain system integrity. Failure to comply can lead to significant fines, legal actions, and reputational damage. Regulatory frameworks. Here are some of the most important regulatory frameworks that impact mainframe environments. GDPR or general data protection regulation. It applies to any company that handles personal data of EU citizens requiring stringent privacy and data protection controls. HIPAA or Health Insurance Portability and Accountability Act. It primarily impacts healthcare organizations in the US, requiring them to protect patient information and ensure secure handling of health data. SOX or Sarbanes Oxley Act. It's a US based financial institution must follow SOX to ensure financial integrity and transparency, particularly in how systems handle financial data. PCI DSS or payment card industry data security Standard. It's required for any organization that processes credit card payments, ensuring data security and fraud prevention. For example, a multinational bank needed to comply with SOC regulations while modernizing its mainframe systems. Automating compliance checks in its CICD pipeline allowed the bank to validate every code change against SOC standards, preventing non compliant code from being deployed to production. Challenges of compliance in automated pipelines. When implementing CICD pipelines, automating compliance becomes more complex but also more critical. As you speed up deployments, ensuring that compliance checks don't slow down the process or introduce human errors is essential. Continuous compliance. Traditional compliance processes were often manual involving extensive reviews, audits, and sign offs. In an automated CICD environment, continuous compliance is needed, ensuring that every change made to the system adheres to regulatory requirements without relying on manual intervention. The challenge integrating compliance checks into CICD pipelines without slowing down development or requiring constant manual reviews. The solution, automated compliance checks every stage of the pipeline from code commit to deployment, ensuring that non compliant code is flagged early. An example, a healthcare company using mainframes to manage patient records, implemented automated compliance checks for HIPA requirements. By integrating automated security and privacy scans into their pipeline, they ensure that no code changes would expose patient data or violate HIPA standards. Managing compliance for legacy systems. Mainframe systems often contain legacy code that was written before modern compliance frameworks existed. Ensuring that older systems comply with new regulations can be a challenge, especially when integrating them into modern DevOps workflows. The challenge, bringing mainframe systems into compliance with current regulatory frameworks, especially when automating deployment and code changes. The solution, implement additional layers of validation for legacy code to ensure compliance, including automated auditing, logging, and system checks. An example, a financial institution managing a legacy couple based transaction system was required to comply with new GDPR regulations. By adding compliance checks into their automated CICD pipeline, they were able to audit every transaction and ensure that no personal data was improperly stored or exposed. How to implement compliance checks in CICD pipelines. To ensure that C CICD pipelines meet regulatory requirements, you can integrate automated compliance checks throughout the pipeline. These checks help enforce security, privacy, and system integrity at every stage of the development and deployment process. Code scanning for security and privacy compliance. One of the first steps in automating compliance is the scan code for security vulnerabilities and privacy risk as soon as it's committed to the repository. This shift left approach ensures that compliance is built into the pipeline from the beginning. Automated code scanning, use tools like sonar cube or checkmarks to automate scan code for security vulnerabilities, privacy issues, and non compliant practices. Best practices, ensure code that handles sensitive data is secure, properly encrypted and follows all relevant regulatory guidelines, for example, GDPR or HIPAA. Automated scanning for privacy violations, for example, the proper handling of personal data during code review. An example, a retail company implemented automated security scans for their cobal applications to ensure compliance with PCIDSS. By scanning for vulnerabilities in code handling payment transactions, they reduce the risk of fraud and data breaches. Automated auditing and logging. Regulations like SOC and GDPR require organizations to keep detailed records of changes made to systems and data. Automated auditing ensures that every change in your CICD pipeline is logged and traceable, creating a clear audit trail for regulatory reviews. Automated auditing, CICD tools like Jenkins or Gitlab can automatically log every change made to your code base, tracking who made the change, what was changed, and when. Best practices. Implement automated logging all activities in the pipeline from commits to deployment, ensuring traceability for compliance audits, maintain immutable logs that cannot be altered after recording. An example, a government agency use automated logging in their CICD pipeline to track every code change made to their mainframe system, ensuring compliance with internal security standards and regulatory frameworks like GDPR. Compliance testing before deployment. Before any code is deployed to production, run compliance test to ensure the application adheres to all regulatory standards. This ensures that non compliant code never makes it to production, protecting your system and organization from fines or legal action. Compliance testing, use CICD pipeline stages to run compliance tests, validating the code and configurations meet all regulatory requirements before deployment. Best practices include compliance tests as part of the deployment process, automatically flagging and preventing non compliant code from being deployed. Implement compliance testing in staging and production environments to ensure real world compliance. An example, a healthcare provider managing a mainframe based patient data system implemented hypacmpliance tests in their CICD pipeline. Before each release, automated tests verify that all code changes adhere to patient privacy rules preventing violations from reaching production. Key takeaways from this lesson. One, continuous compliance ensures that your CICD pipeline maintains regulatory standards at every stage from code commit to production deployment. Two, automated auditing and logging provide traceability for compliance audits, ensuring that all activities are recorded and verifiable. Three, compliance testing before deployment prevents non compliant code from reaching production, reducing the risk of legal and financial penalties. Learning Activity. Identify a regulatory framework that applies to your mainframe environment. For example, GDPR, HPA, or NSOC. Develop a plan to integrate compliance checks into your CICD pipeline using automated tools for code scanning, auditing and compliance testing. Test your compliance checks in a staging environment and ensure they catch non compliant code before it reaches production. What's next? In the next lesson, we'll explore access control and auditing in CICD pipelines. You will learn how to set up role based access controls for your pipelines and implement auditing tools to monitor and track pipeline activity, ensuring that your systems remain secure and compliant. 28. Lesson 3: Access Control and Auditing in CI/CD Pipelines: Lesson three, access control and auditing in CICD pipelines. Welcome to Lesson three of Module seven. In this lesson, we will explore how to implement role based access control or RBAC and integrate auditing and monitoring tools into your CICD pipeline to ensure security and traceability. Access control ensures that only unauthorized users can modify, deploy or manage pipeline activities while auditing ensures you can track every change made in the system. By the end of this lesson, you'll understand how to secure your pipeline infrastructure and maintain a comprehensive record of all activities to meet compliance and security standards. Let's dive in. The importance of access control in CICD pipelines. As automation increases and more teams interact with the pipeline, controlling who has access to certain function becomes critical. Unauthorized access or misuse of the pipeline can introduce security vulnerabilities, compromise code integrity, and disrupt operations. Why role based access control or RBAC is critical. RBAC restricts access to specific pipeline functions based on a user's role within the organization. This principle of list privilege ensures that users only have access to the resources they need to perform their jobs, minimizing the risk of unauthorized or accidental changes. Key benefits of RBAC. One, minimizes risk. It limits the number of users who have access to sensitive systems or deployment controls. Two, increases accountability. It ensures that changes are made only by authorized personnel, reducing the risk of insider threats or human error. Three, supports compliance. Many regulatory framework require organizations to enforce strict access controls and RBAC provides a simple way to comply. Let's take an example. Financial institution implemented RBAC in their CICD pipeline for their bubble based mainframe system. Developers were given access to development and testing environments, but only authorized release managers had access to deploy code to production. This ensured compliance with SOC regulations, which requires strict control over who can deploy financial systems. Setting up RBAC in CICD pipelines. RBAC should be carefully implemented to balance security with ease of access for different teams. Let's look at the steps to effectively set up RBAC in your CICD pipeline. Identify roles and permissions. The first step is to identify the roles within your organization that interact with the CICD pipeline. This might include developers, testers, release managers, and administrators. Once roles are defined, determine which permissions each role requires. Best practices for role assignment. Developers access the source code repositories and testing environment. Testers, access to testing tools and environments, but no deployment privileges. Release managers permission to approve and deploy code to production. Administrators full access to manage pipeline tools and configurations. An example, a telecom company using Jenkins and Gitlab define clear roles in their CICD pipelines. Developers could push changes and run test while only release managers could approve production deployments. This minimize the risk of unauthorized deployments and maintain a secure pipeline. Implementing RBAC with CICD tools. Many CICD tools such as Jenkins, GitLab, or IBM Urban Code offer built in support for RBAC. These tools allow you to configure roles, assign permissions, and control who can access specific resources. Best practices, Ensure all tools in your pipeline, for example, version control, bill servers, and deployment systems support role based access control. Regularly review and update role assignments to ensure that permissions aligned with the user's current responsibilities. Implement multifactor authentication for all users with privileged access to further enhance security. An example, a government agency used Git labs built in RBAC features to restrict access to its CICD pipeline. Developers could only access staging environments while administrators manage configurations and security. MFA was also enable for all users accessing the production environment to prevent unauthorized access. Auditing and monitoring in CICD pipelines. In addition to controlling access, it's essential to have detailed records of all activities within your pipeline. This is where auditing and monitoring come into play. Auditing ensures that every action, whether it's a code commit, build process, or deployment, is logged creating a clear trail of accountability. Monitoring allows you to track real time metrics and alert for potential security incidents. Why auditing is essential for compliance and security? Auditing provides a detailed log of every action taken within your CICD pipeline. For organizations in regulated industries, maintaining an audit trail is a requirement to ensure compliance with frameworks such as SOC, HIPAA, or JDPR. Key benefits include, one, traceability. Every action from code commits to production deployment is logged with a timestamp, the user who performed the action and the nature of the change. Two, accountability. Auditing holds users accountable for changes, reducing the likelihood of unauthorized or accidental modifications. Three, compliance. Many regulatory frameworks require auditable records of changes made to systems and data. An example, a healthcare company managing patient data implemented automating auditing in CICD pipeline to comply with HIPAA. Every code change and deployment was log and traceable, ensuring that patient data remains secure and any changes to systems handling sensitive information were fully auditable. Implementing auditing and monitoring tools. Auditing and monitoring can be integrated into your CICD pipeline using tools that automatically log activities and track real time metrics. Tools for auditing, Jenkins audit trail plugin. It provides detailed logging of all user actions, including builds, deployments, and system changes. Gitlab audit events. It tracks all activities within the Gitlab system from login attempts to code pushes and merges. Tools for monitoring, Grafana or Prometheus. They allow real time monitoring of pipeline performance, tracking build times, resource usage, and error rates. Splunk. It provides logging, monitoring and alerting capabilities, ensuring that any unusual activity is flagged for review. Best practices, set up login for all critical pipeline activities, including code commits, configuration changes, and deployments. Implement real time monitoring to detect and alert on a normal pipeline activity such as unexpected spikes in build failures or unauthorized access attempts. Store audit logs in an immutable tamper proof system to ensure they cannot be altered or deleted. An example, a retail company deployed Grafana and Prometheus to monitor their CICD pipeline performance, ensuring that any unusual activity such as unauthorized access attempt or failed builds was detected and flagged. They also implemented Jenkins audit trail plugin to track all user actions in the pipeline, ensuring compliance with PCI DSS. Key takeaways from this lesson. One, our BC helps secure your pipeline by restricting access to only authorized users. Reducing the risk of unauthorized changes. Two, auditing ensures that all actions within the pipeline are logged, creating a trail of accountability and supporting compliance. Three, monitoring provides real time insights into pipeline performance and security allowing for quick detection of anomalies or threats. Or combining RBAC, auditing and monitoring ensures that your CICD pipeline remains secure, traceable, and compliant with regulatory standards. Learning activity. Review the roles within your organization and identify the necessary permissions for each role when interacting with your CICD pipeline. Implement role based access control or RBAC in your pipeline using tools like Jenkins, GitLab, or IBM Orban Code. Set up auditing and monitoring tools to log user actions and monitor pipeline performance, ensuring compliance and security. What's next? In the next lesson, we'll focus on security testing in the CICD pipeline. You will learn how to automate security testing. For example, vulnerability scan within your pipeline and ensure compliance with security policies through automated processing. 29. Lesson 4: Security Testing in the CI/CD Pipeline: Lesson four, security testing in the CICD pipeline. Welcome to lesson four of Module seven. In this lesson, we're going to focus on how to automate security testing within your CICD pipeline, ensuring that vulnerabilities are identified and addressed before your code reaches production. We'll discuss key security testing tools and strategies, how to integrate these tools into your pipeline and how to ensure compliance with your organization's security policies. By the end of this lesson, you will understand how to build security in every stage of your CICD pipeline, ensuring that your mainframe environment remains secure while maintaining the speed and efficiency of automated deployments. Let's get started. Why security testing in CICD pipelines is essential. As your CICD pipeline becomes the backbone of your development and deployment processes, ensuring security at every stage is critical. Mainframes often handle sensitive data and mission critical applications, making them a high priority target for attackers. Security testing helps identify vulnerabilities earning, allowing your team to address them before they become exploitable risks. Shifting security left in the pipeline. In traditional development workflows, security testing often occurs at the end of the process just before or after deployment. However, in a CICD pipeline, this approach is too late. Vulnerabilities that go undetected until deployment can compromise the system. By shifting left, security testing is integrated earlier into the development process, ensuring that issues are caught and resolved sooner. P benefits. One, catch vulnerabilities early. Identify and fix vulnerabilities during development rather than post deployment. Two, reduce cost. Fixing vulnerabilities early is far less expensive and time consuming than addressing them after deployment. Three, improve code quality. By incorporating security checks early, your team can build more secure, higher quality code from the start. An example, a financial institution implemented early stage vulnerability scans in their CICD pipeline for mainframe applications. By catching issues like unsecured data transfer protocols, early in development, they prevented potentially costly breaches and improved overall system security. A automating security testing in CICD pipelines. Automating security testing within a CICD pipeline allows you to continuously scan for vulnerabilities without slowing down the development process. Security checks can be embedded in various stages of the pipeline when code commits to the final deployment. Types of security testing to automate. There are several types of security tests that should be incorporated into your pipeline, each targeting different aspects of system security. Here are the most common ones. Static application security testing or SAST. Scan source code for vulnerabilities during the development phase, it identifies issues like insecure coding practices, buffer overflows, and data exposure. Dynamic application security testing or DAST, simulates attacks on a running application to find vulnerabilities in real time, such as SQL injection or cross site scripting or XSS. Dependency scanning ensures that third party libraries and dependencies in your mainstream environment are secure and up to date. This helps prevent supply chain attacks where vulnerabilities are introduced to compromise external components. Container security. If you use containerized environments, for example, Docker or your CICD pipeline, container security scans ensure that containers are hardened and free from vulnerabilities. An example, a healthcare provider handling sensitive patient data integrated SAST and DASD into their CICD pipeline to comply with HIPA. By automating this test at both the code commit and deployment stages, they identified and mitigated risks ensuring patient data was secure at every step of development. Integrating security tools into your CICD pipeline. Security tools can be integrated into your CICD pipeline through various stages from source code management to deployment. Here's how you can incorporate these tools. Source code management, SEM integration. Tools like sonar cube or checkmarks can be integrated into your source code repositories, for example, Git or bit bucket to run SAST checks automatically on each commit. This ensures any code pushed to the repository stand for vulnerabilities before moving forward in the pipeline. Build stage. Use tools like OAS Zap or Bird Suite to run DAST scans during the build process. These tools simulate attacks on your application to identify security gaps. Dependency management. Tools like SNIC or white source can be integrated to scan your dependencies for known vulnerabilities. They provide alerts when a vulnerable library is used and suggest secure alternatives. Container security, if you're using containers, integrate tools like AQASecurity or Twistlock to scan container images for vulnerabilities, ensuring that your pipeline doesn't propagate insecure environments. Best practices, automate regular scans. Schedule automatic scans to run at various stages of the pipeline. For example, after every commit or nightly builds and four security gates. Set up security gates to stop the pipeline if a critical vulnerability is detected. Run parallel tests. Running security tests in parallel with other CICD processes, for example, functional testing helps maintain pipeline speed. Let's take an example. A telecom company integrated Sonar cube and sneak into the Jenkins pipeline to automate SAST and dependency scans. Every time code was committed, the system ran checks and flag any security issues before moving on to testing and development, preventing critical vulnerabilities from reaching production. Automating security for compliance. Automating security testing ensures your code complies with organizational and regulatory security policies. For example, GDPR, HIPAA, and SOC. By enforcing automated scans, you ensure continuous compliance at every stage of the pipeline. Ensuring compliance with security policies through automated processes. Many organizations have strict security policies that need to be enforced consistently across all code bases. Automating security testing ensures compliance with these policies and regulatory frameworks such as GDPR, HIPAA, and SOC without manual intervention. Policy based security testing. Organizations often implement specific security policies to protect sensitive data or adhere to regulations. These policies might include encryption requirements, logging and auditing standards or access control protocols. Policy based security testing ensures that your code complies with these internal and external standards before it reaches production. How to implement. First, define security policies based on your organization's needs and regulatory requirements. Then use automated security testing tools to validate that code that code adheres to these policies during development, testing, and deployment. An example, a government agency that handle sensitive citizen data, automated policy based security checks in their CICD pipeline to ensure compliance with GDPR. Each deployment had to pass encryption checks and meet access control standards before it could be released. Continuous compliance monitoring with CICD, changes are constantly flowing through the pipeline. Continuous compliance monitoring ensures that each change adheres to security policies throughout the entire life cycle of the application. Best practices, automate compliance scans at key stages of the pipeline, for example, post build redeployment. These monitoring tools to alert the security team when code violates policies, allowing for immediate remediation. Key takeaways from this lesson. One, shift security left by integrating automated security testing early in the pipeline to catch vulnerabilities before they reach production. Two, automate multiple types of security tests like SASP, DAST, dependency scanning, and container security to ensure comprehensive coverage throughout the pipeline. Three, use policy based testing to ensure your code complies with security policies and regulatory requirements, automating security enforcement across all stages. Four, ensure continuous compliance by monitoring your pipeline for any violations of security standards and addressing them before deployment. Learning activity. Choose a security testing tool, for example, SonarQube, OAS Zap, or SNAP and integrate it into your CICD pipeline. Configure automated scans to run on code commits and deployments. Review the test results and ensure that security gates are properly set up to haul pipeline if critical vulnerabilities are found. What's next? In the next module, we'll focus on monitoring feedback and optimizing pipelines. You will learn why monitoring is essential for CICD pipelines, the key metrics to track, and how to optimize your pipeline for efficiency and reliability. 30. Lesson 1: Introduction to Pipeline Monitoring: Welcome to Module eight, monitoring feedback and optimizing pipelines. In this module, you will learn how to effectively monitor the IDD pipelines, provide feedback to improve processes and optimize your pipelines for performance and reliability. By the end of this lab module, you'll be able to use monitoring tools to track key metrics, set up alerts, and continuously improve your pipeline efficiency. Lesson one, introduction to pipeline monitoring. Welcome to Lesson one of Module eight. In this lesson, we will explore the critical role that monitoring plays in maintaining and optimizing your CICD pipelines, especially in mainframe environments. Continuous monitoring allows you to track pipeline performance, detect issues early, and ensure the overall health of your deployments. By the end of this lesson, you will understand why monitoring is essential, the key metrics you need to track and how to use that data to improve the efficiency and reliability of your pipeline. Let's dive into why monitoring is a vital part of the CICD process. Uh, why monitoring is essential for CICD pipelines. CICD pipelines are the backbone of modern development, automating the flow from code creation to deployment. However, these pipelines can become complex and prone to issues like failed builds, slow performance, or deployment errors. Without proper monitoring, identifying these issues can be challenging leading to delayed releases, vulnerability, security vulnerabilities, and operational inefficiencies. Identifying issues early. Monitoring helps you detect potential problems early often before they impact production. Issues like failed tests, long bill times, or failed deployments can be flagged and resolved in real time, reducing downtime and minimizing disruption. An example, a financial services company running cobalt on its mainframe notice slowdown in its CICD pipeline during deployments. By monitoring key pipeline metrics, they discovered that the issue was related to inefficient test processes, allowing them to optimize their testing approach and reduce deployment times. Ensuring pipeline reliability. Reliability is a core goal of CICD pipelines. Monitoring ensures that each stage of your pipeline, whether it's code commit, build, test, or deployment, is functioning as expected. It provides visibility into where errors or bottlenecks may be occurring and allows you to proactively address them. An example, a telecom company managing large scale mainframe applications use monitoring to identify pipeline bottlenecks during high volume testing period. By addressing these bottlenecks, they improve the overall reliability and speed of their pipeline, ensuring timely updates. Performance optimization. Over time, monitoring data provides insights that allow you to optimize pipeline performance. You can identify areas that need improvement, such as build steps that take too long or tests that are frequently failing. This data driven approach leads to faster pipeline and more efficient deployments. An example, an ecommerce platform running batch processing on a mainframe system, use pipeline monitoring to track build durations. By analyzing the data, they were able to refactor certain build stages, cutting the time required for builds in half. Ensuring security and compliance. Monitoring also plays a critical role in ensuring the security and compliance of your pipeline. By setting up alerts for unusual activity and authorized access or failed security tests, you can respond to potential threats before they become major issues. Monitoring logs can also be used for compliance audits, ensuring that every stage of the pipeline adheres to required standards. Common metrics to monitor in mainframe CICD pipelines. In a mainframe environment, certain metrics are crucial for maintaining an efficient and secure CICD pipeline. Here are the key metrics you should be monitoring. Build time. This metric tracks how long it takes for build complete. Monitoring build times helps you identify bottlenecks in the compilation and linking stages and whether specific bills are taking longer than usual. Why it matters. A sudden increase in bill time could indicate inefficiencies or issues in the bill process that need to be addressed. Test success rate. Monitoring your test success rate ensures that your pipeline is delivering high quality code. It tracks the percentage of successful test cases in each build. A lower than expected test success rate may indicate code quality issues or poorly designed tests. Why it matters. Consistent test failures may indicate deeper problems in the code or the need to improve your testing framework. Deployment frequency and success rate. These metrics track how often deployments are being pushed to production and how many of those deployments succeed without issues. Frequent deployment failures may indicate problems in the pipeline or environmental misconfigurations. Why it matters. Monitoring deployment success ensures that your pipeline is reliable and that deployments are progressing as expected. Pipeline duration. Pipeline duration refers to the total time it takes for code to move from commit to production. This metric includes build times, testing and deployment stages. Monitoring this helps you understand how long it takes to deliver new features or updates. Why it matters. Tracking pipeline duration helps you optimize the speed of your CICD pipeline and identify stages that might be causing delays. Error logs and alerts. Error logs and alerts are critical for real time monitoring of your pipeline. Any failure during builds tests or deployments should be logged. A alert should be configured to notify relevant teams immediately. Why it matters. Real time alerts reduce the time to identify and resolve pipeline issues, ensuring that they are addressed before they affect production. Best practices for monitoring CICD pipelines. To ensure that your monitoring efforts are effective, follow these best practices. One, automate monitoring and alerts. Use monitoring tools that allow you to automate the process of collecting and analyzing data. Set up alerts for critical issues such as build failures, long running processes or failed tests. This helps ensure you're always aware of problems without manual oversight. Two, review metrics regularly. Set up a regular cadence for reviewing the performance metrics of your pipeline. Weekly or monthly reviews can help you identify patterns, assess progress, and optimize your pipeline for improved performance and reliability. Third, use dashboards for visibility. Set up visual dashboards to crack key metrics in real time. Tools like Rafana or Kibana allow you to create customized views of your pipeline's health and performance, providing easy access to insights. Or collaborate across teams. Make sure that the entire development operations, and security teams have access to pipeline monitoring data. Cross team collaboration helps ensure that any issues are addressed quickly and effectively. Key takeaways from this lesson. One, monitoring your CICD pipeline is essential for identifying issues early, ensuring reliability and optimizing performance. Two, key metrics to track include build time, test success rate, deployment frequency, pipeline duration, and error logs. Automate your monitoring processes and set up real time alerts to quickly identify and resolve problems. Regularly review monitoring data and use it to continuously optimize the efficiency and reliability of your pipeline. Earning activity, choose a monitoring tool, for example, Grafana, Splunk or IBM Omegamon and set it up in your CICD pipeline. Identify at least two key metrics such as build time or test success rate to monitor in real time. Set up automated alerts for any critical pipeline failures or usually built times, unusually long build times. What's next? In the next lesson, we'll cover how to set up monitoring and logging tools for your CICD pipeline. We'll explore specific tools for monitoring mainframe environments such as IBM, Omega moon, and Splunk and show you how to set up logs and alerts for critical pipeline stages. 31. Lesson 2: Setting Up Monitoring and Logging Tools: Lesson two, setting up monitoring and logging tools. Welcome to Lesson two of Module eight. In this lesson, we're going to explore how to implement monitoring and logging tools for your mainframe CICD pipeline. We'll look at the tools you can use to track the health of your deployments that are real time alerts for critical issues and ensure that detailed logs are generated at every stage of the pipeline. By the end of this lesson, you will be able to configure effective monitoring and logging solutions, making sure your pipeline runs smoothly and securely. Let's get started. Why monitoring and logging are critical. As you'll learn in the previous lesson, monitoring is key to ensuring pipeline reliability and efficiency. But monitoring alone is not enough. You need detailed logs that record every event, error, and action in the pipeline. Together, monitoring and logging provide a comprehensive view of the pipeline's health and performance, allowing you to detect and resolve issues quickly. Real time monitoring for faster incident response. Monitoring tools provide real time visibility into the performance of your CICD pipeline. These tools allow you to track key metrics such as build time, error rates, and resource usage. If an issue arises, such as a failed build or slow deployment, you can be immediately alerted. And respond before the problem escalates. An example, a financial institution uses IBM Omega moon to monitor its mainframe CICD pipeline. By setting up alerts for high resource usage during deployments, the institution was able to resolve bottlenecks in real time and ensure smooth production releases. Detailed logging for troubleshooting and compliance. Logs are essential for troubleshooting, providing a complete history of events within your pipeline. Whether you're debugging a failed deployment or investigating security breaches, logs serve as the source of proof for understanding what happened. They also play a key role in ensuring compliance with industry regulations like HIPAA or SOC. Which often require audit trails or system activities. An example, a healthcare provider needed to comply with hyper regulations by maintaining detailed logs of all mainframe application updates. Using Splunk for log management, they created an audit trail of every deployment, ensuring they met the legal requirements while quickly resolving any issues flagged during updates. Alerts. Ensure that you're notified of critical failures, allowing for quick remediation. Tools for monitoring and logging mainframe deployments. There are a variety of tools available for monitoring and logging, each suited to different environments and needs. Here are some key tools commonly used for mainframe environments. IBM Omegamon. IBM Omegamon is a comprehensive tool specifically designed for monitoring mainframe systems. It provides real time insights into system performance, resource usage, and application health, making it ideal for managing critical mainframe workloads. Key features include monitor CPU, memory, disk and network usage, tracks transaction response times and application performance. Provides alerts for abnormal conditions allowing for quick intervention. An example, a telecom company managing billing systems on a mainframe uses IBM Omegamon to monitor real time performance. The company set up alerts for high CPU usage, which help identify inefficiencies in the billing application and optimize resource allocation during high volume billing periods. Splunk. Splunk is a widely used logging and monitoring platform that excels at collecting, indexing, and visualizing log data from a variety of systems, including mainframes. Splunk can be configured to aggregate logs from multiple CICD tools providing a centralized view of pipeline activity. Key features include collects logs from various sources like applications, servers, and others, provides real time search and visualization of log data, supports custom dashboards and reports for tracking performance. An example, a large financial services firm uses Plank to monitor its mainframe CICD pipeline. By aggregating logs for various stages like builds, tests, and deployments, they are able to detect anomalies in the deployment process and use Plank's powerful search capabilities to investigate fail deployments quickly. Three Grafana and prometheus. These open source tools are often used together to monitor CICD pipelines. Prometheus collects and stores time series data, for example, bill times or error rates, while Grafana creates visual dashboards to track pipeline health in real time. Key features include real time monitoring of key performance metrics, alerting system for anomalies or failures. Customizable dashboards for displaying pipeline metrics. An example, an ecommerce company uses Prometheus and Grafana to monitor their main fame CICD pipeline. The system provides real time graphs of build durations, test results, and deployment success rates, allowing the team to quickly identify and resolve issues. Setting up logs and alerts for critical pipeline stages. Now that we've covered the tools, let's look at how to set up logs and alerts for the critical stages of your CICD pipeline. These are the key stages where issues are most likely to arise. So it's important to have proper logging and alerts in place. Build state logging. During the build stage, you should log every action, including the start and end times of builds, compiler outputs, or any error that occurs. This provides a clear view of what went wrong in case of a failed build. Best practices. Log build start and completion times. Capture compiler warnings and errors. Set up alerts for build failures allowing you to act quickly. An example, a retail company uses plank to log build processes. Every failed build triggers an automatic alert to the development team, reducing downtime and ensuring issues are addressed immediately. Testing stage logging. The testing stage is where you catch most errors in your code. The logging test results is crucial. Whether it's unit tests, integration tests or security tests, logging the outcome of every test run ensures transparency and accountability. Best practices, log test results, including past and failed tests. Record any timeouts or errors in test execution. Set up alerts for failed tests to prevent code from progressing to the next stage. An example, a healthcare provider logs all test results from its mainframe, the ICD pipeline in IBM Omega moon. When a security test fails, an alert is triggered to the security team for immediate remediation, ensuring patient data remains secure. Deployment stage logging. The deployment stage is critical because any issues here can lead to production downtime. It's essential to love every deployment action, including server configurations, environment variables, and rollback attempts. Best practices, love all deployment activities, including configurations and parameters, Prat success and failures of deployments with detailed logs. Set up alerts for failed deployment, including rollback triggers if a deployment needs to be reversed. An example, a telecom company logs all deployment activities in Prometheus and Grafana, including environment configurations. Alerts are configured for any failed deployments, prompting rollback procedures if necessary. Key takeaways from this lesson. One, real time monitoring helps you detect pipeline issues before they escalate, allowing for faster incident response. Two, detailed logging is critical for troubleshooting and maintaining compliance, providing a complete history of events. Three, tools like IBM Omegamon, Splunk, and Prometheus provide powerful monitoring and logging capabilities tailored for mainframe environments. Or Set up plugs and alerts for critical pipeline stages like build, test, and deployment to ensure every issue is captured and resolved efficiently. Learning activity. Just one monitoring tool, for example, IBM Omega moon, Splunk, or Prometheus and set it up to monitor your main fame CICD pipeline. Configure logs for the build test and deployment stages ensuring that all errors and important activities are recorded. Set up alerts for critical failures, such as build failures or deployment errors so that you can respond quickly. What's next? In the next lesson, we'll focus on troubleshooting and debugging CICD pipeline. You learn how to identify common pipeline issues, troubleshoot errors, and implement best practices for debugging and resolving pipeline failures. 32. Lesson 3: Troubleshooting and Debugging CI/CD Pipelines: Lesson three, troubleshooting and debugging CICD pipelines. Welcome to lesson three of Module eight. In this lesson, we're going to explore the common issues that can occur in your CICD pipeline and how to troubleshoot and resolve them effectively. Every CICD pipeline, especially in mainframe environments, will face challenges at some point, whether it's a failed build, a broken test, or a deployment that didn't go as planned. Learning how to troubleshoot and debug these issues quickly is essential to maintaining the reliability of your pipeline. By the end of this lesson, you will be equipped with the knowledge and best practices to troubleshoot and debug your pipeline efficiently, minimizing downtime and ensuring smooth operations. Let's dive in. Common CICD pipeline issues. CICD pipelines are made up of several interconnected processes. So when things go wrong, pinpointing the exact cause can sometimes be tricky. Let's look at some of the most common issues you might encounter in a mainframe CICD pipeline and how to troubleshoot them. Failed builds. A build failure is one of the most common issues in any CICD pipeline. Build failures can be caused by anything from syntax errors in the code, missing dependencies or misconfigured build scripts. Troubleshooting steps. Check build logs. The build logs will usually give a clear indication of what went wrong, whether it's compiler error, a missing dependency or script failure. Test locally. If you can't immediately spot the issue, try to replicate the build process on your local environment to see if the issue persists. Check built environment. Ensure the built environment is correctly configured. Sometimes a build failure is caused by differences between the local environment and the CI environment. For example, a financial services company encountered repeated build failures due to environment variables not being correctly set in the Jenkins build configuration. By reviewing the built logs and comparing local and CI environments, they identify the missing variables and updated the built configuration to resolve the issue. Failing tests. Test failures are another common pipeline issue, especially as your tests grow in complexity. Failing tests can be caused by anything from incorrect test cases to changes in the code base that break functionality. Troubleshooting steps. Review test logs. Start by reviewing the test logs to understand which test cases failed and why. Run tests locally. We run the failing tests in your local environment to confirm whether they pass or fail there. This helps determine if it's a code issue or a CI environment issue. Check for recent code changes. Sometimes test failures are caused by recent code changes that haven't been properly accounted for in the test cases. If this is the case, update the test cases accordingly. An example, a telecom company experienced repeated test failures in a CICD pipeline for their mainframe applications. By reviewing the test logs, they realize that the issue stemmed from recent changes in a service that weren't reflected in the test suite. Updating test cases to account for these changes, we solve the issue. Deployment failures. Deployment failures can have a significant impact, especially in production environments. These failures can be caused by issues like misconfigured environments, network failures or problems with the deployment scripts. Troubleshooting steps. Check deployment logs. Deployment logs will provide detailed information on what went wrong. Check for misconfigured environment variables, script errors, or network connectivity. Rollback. If a deployment fails in production, initiate a rollback to the previous stable version to minimize downtime. Test in staging first. Always test deployments in a staging environment before pushing to production. This helps catch any issues early and reduces the risk of failure in the live environment. An example, healthcare company encounter deployment failures during their mainframe application updates due to incorrect environment variables in the production environment. By reviewing the deployment logs, they identify the error, fix the configuration, and successfully deploy the application. Long build times. Long built times can slow down the entire CICD pipeline and delay delivery. This issue is often caused by inefficiencies in the build process such as redundant tasks, large code bases, or outdated dependencies. Troubleshooting steps, review build stages. Break down the build stages and identify where most of the time is being spent. Look for any tasks that are redundant or unnecessary. Optimized code. Refactor parts of the code base that are causing slow builds, such as large compilation tasks or inefficient code. Cache dependencies. Use caching mechanisms to avoid downloading the same dependencies in each build. An example, an ecommerce platform noticed that their mainframe application bills were taking much longer than expected. By analyzing the build stages, they realized that they were re downloading dependencies for each build. By implementing caching, they reduced the build time by 40%. Best practices for debugging and resolving pipeline failures. Debugging pipeline failures requires a systematic approach. Here are some best practices to follow. Always check log first. Logs are your first line of defense when debugging a pipeline failure. Whether it's a build failure, best failure or deployment failure, logs will provide detailed information about what went wrong and where. Actionable tip. Make sure your CICD tool is configured to generate comprehensive logs at every stage of the pipeline. Reproduce the issue locally. If you're not sure what caused the failure, try reproducing the issue in your local development environment. This will help you determine whether the problem is related to your code, the CI environment, or an external factor. Actionable tip. Use the same tools and configurations locally that I used in the CICD pipeline to ensure consistency. Isolate the issue. Once you identify the failure point, isolate the issue by focusing on the part of the pipeline where the failure occurred. Avoid changing too many things at once. Instead, make incremental changes and rerun the pipeline to see if the issue is resolved. Actionable tip. Use version control to track changes and easily revert if the problem persists after effects. Implement pipeline health checks. Set up health checks within your pipeline to monitor key metrics such as build time, error rates, and test success rates. If any of these metrics start to degrade, it could be a sign of an underlying issue that needs attention. Actionable tip. Use monitoring tools like Prometheus or IBM Omega moon to keep track of pipeline performance in real time. Key takeaways from this lesson one, fail builds, test failures, and deployment issues are common in CICD pipelines, but they can be efficiently resolved with systematic troubleshooting. Two, always check logs first when debugging issues. Logs provide detailed information about what went wrong and help guide your troubleshooting efforts. Three, we produce the issue in your local environment to determine whether the problem is related to the code base or the pipeline environment. Four, follow best practices like isolating the issue, making incremental changes, and monitoring pipeline health to ensure smooth operations and minimize downtime. Earning activity. Identify a recent failure in your CICD pipeline, either a build test or deployment failure, and review the logs to understand what caused it. We produce the issue in your local environment and work through the troubleshooting steps to resolve it. Document the steps you took to resolve the issue and implement a monitoring solution to catch similar issues early in the future. What's next? In the next lesson, we'll explore how to use feedback loops to optimize pipelines. You learn how to analyze pipeline performance data, identify bottlenecks, and implement continuous improvement strategies to refine your CICD pipeline over time. 33. Lesson 4: Using Feedback Loops to Optimize Pipelines: Lesson four, using feedback loops to optimize pipelines. Welcome to lesson four of Module eight. In this final lesson, we'll focus on how to use feedback loops to optimize your CICD pipeline over time. By continuously analyzing the data produced by your pipeline and gathering feedback, you can refine processes, remove inefficiencies, and ensure your pipeline delivers faster, more reliable results. By the end of this lesson, you'll know how to leverage data to identify bottlenecks, implement continuous improvement strategies, and establish a feedback loop that keeps your pipeline evolving. Let's get started. What are feedback loops in CICD pipelines? A feedback loop is a process where information gathered in pipeline performance is used to make adjustments and improvements over time. This means continually analyzing pipeline data and acting on it to optimize performance, eliminate bottlenecks, and ensure the pipeline operates smoothly. Why feedback loops matter? Feedback loops help ensure that your CICD pipeline is always improving as new challenges arise, such as longer build times, test failures, or deployment delays, feedback loops allow you to make incremental improvements so your pipeline becomes more efficient and reliable. For example, a financial services company noticed that their test suite was taking too long to complete during peak periods. By analyzing pipeline data and gathering feedback from deployment teams, they identified tests that could be run in parallel, cutting test times in half and speeding up delivery. Continuous monitoring as the foundation. Effective feedback loops are built on continuous monitoring. You need to regularly track metrics such as build times, test success rates, and deployment frequencies. Without this data, you won't know what areas of the pipeline need attention. For example, an ecommerce platform tracked the pipeline build time over several months. By monitoring this data, they noticed a gradual increase in build duration and identified several redundant tasks that were slowing down the process. By removing these tasks, they cut build times by 20%. Uh, um, analysing pipeline performance data to identify bottlenecks. Once you have your monitoring tools in place and are tracking the right metrics, the next step is to analyze the data and identify bottlenecks in the pipeline. A bottleneck is any stage in the pipeline that takes longer than expected or causes delays. Key metrics to track. To identify bottlenecks, focus on the key metrics. Build time, how long it takes to compile and build the code. Test success rate, the percentage of tests that pass on the first attempt. Pipeline duration. The total time it takes for code to go from commit to deployment. Error frequency. How often errors occur in builds, tests, and deployments? Analyzing bottlenecks. Once you've collected this data, you can start looking for patterns. Are certain bills always lower? The tests often fail at a specific stage. Are deployments getting delayed due to manual processes? For example, a telecom company managing large scale mainframe applications noticed that their integration tests were taking longer than expected. By analyzing test logs and timing data, they identified a test environment configuration issue that was causing delays. Once they fix the configuration, test times dropped by 30%. Tools to help with analysis. There are several tools that can help you analyze pipeline performance data and identify bottlenecks. Grafana for visualizing pipeline metrics in real time. Splunk for analyzing logs and metrics. IBM Omega moon for monitoring mainframe system performance and identifying inefficiencies. Continuous improvement strategies for refining pipelines. Once you've identified bottlenecks, the next step is to implement continuous improvement strategies. These strategies help you refine your CICD pipeline over time, ensuring it stays optimized as new challenges arise. Optimize build and test stages. If builds or tests are taken too long, consider the following. Parallelization. Run multiple builds or test in parallel to reduce overall time. Cache dependencies so they don't need to be redownloaded every time. Test segmentation, break tests into smaller segments and run them incrementally. For example, a healthcare provider split their large integration test suite into smaller, more manageable sections and parallelize them. This reduce the overall test time by 40%. Automate manual processes. Manual processes, especially in deployments can introduce delays and errors. Automating these processes will help streamline your pipeline. For example, a banking institution implemented automated deployment scripts for their mainframe applications. This eliminated manual deployment errors and reduced deployment time by 50%. Regularly review and iterate. Optimizing a pipeline isn't a one time task. Establish a regular cadence for reviewing pipeline performance, gathering feedback, and iterating on improvements. Create a feedback where data is continuously collected, reviewed, and used to improve the pipeline. Key takeaways from this lesson. One, feedback loops are essential for continuously improving your CICD pipeline. Use performance data to refine and optimize every stage of the pipeline. Two, regularly track metrics like build time, test success rate, and pipeline duration to identify bottlenecks and areas for improvement. Three, implement strategies like parallelization, test segmentation, and automation to optimize the pipeline. Four, continuously gather feedback from a pipeline and teams to ensure ongoing improvements. Learning activity. Review the performance metrics of your current CICD pipeline using a monitoring tool like Krafana or IBM Omega moon. Identify one bottleneck in your pipeline, for example, slow build time or frequent test failures. Implement one of the continuous improvement strategies discussed. Sample parallelizing test or automating manual deployment test and document the improvements. Congratulations. You've completed the course. You've reached the end of mainframe modernization, CICD Mastery. Congratulations on completing the course. Over the past lessons, you've learned how to implement and optimize a CICD pipeline for mainframes from the basics of CICD to automating test, deployment, and monitoring. Now that you've gained these critical skills, it's time to put them into practice. Start by reviewing your current CICD pipeline, identifying areas for improvement, and implementing the strategies you've learned throughout this course. Whether you're working in development, operations or DIVOBs, the concepts and tools you've mastered will help you deliver faster, more reliable, and more secure software. Next step. Continue your journey in mainframe modernization. The learning doesn't stop here. To continue building on your expertise in mainframe modernization, consider enrolling in one of our advanced courses. Like, migrating mainframe workloads to the Cloud, best practices. Here, you will learn strategies for safely moving mission critical workloads from mainframes to cloud environments, ensuring security, performance, and compliance during migration. Another one is APIs and Microservices, modernizing mainframe applications. Here, you will discover how to leverage APIs and microservices to modernize and extend the functionality of legacy mainframe application, helping you integrate with modern cloud based architectures. By continuing your education, you'll stay on the cutting edge of mainframe system modernization and help your organization thrive in an increasingly hybrid and cloud based IT landscape. Thank you for joining this journey and we look forward to seeing you in future courses.