{"id":2990,"date":"2025-10-27T09:00:35","date_gmt":"2025-10-27T03:30:35","guid":{"rendered":"https:\/\/zmainframes.com\/zlog\/?p=2990"},"modified":"2025-10-22T01:11:18","modified_gmt":"2025-10-21T19:41:18","slug":"ci-cd-on-mainframes-git-jenkins-building-a-mainframe-devops-pipeline","status":"publish","type":"post","link":"https:\/\/zmainframes.com\/zlog\/ci-cd-on-mainframes-git-jenkins-building-a-mainframe-devops-pipeline\/","title":{"rendered":"CI\/CD on Mainframes: Git &#038; Jenkins \u2014 Building a Mainframe DevOps Pipeline"},"content":{"rendered":"<h1 data-start=\"359\" data-end=\"438\"><strong data-start=\"361\" data-end=\"438\">CI\/CD on Mainframes: Git &amp; Jenkins \u2014 Building a Mainframe DevOps Pipeline<\/strong><\/h1>\n<p data-start=\"440\" data-end=\"521\"><em data-start=\"440\" data-end=\"521\">zLog Series on Mainframe CI\/CD Modernization<\/em><\/p>\n<hr data-start=\"523\" data-end=\"526\" \/>\n<h3 data-start=\"528\" data-end=\"598\">\ud83d\udca1 Why <strong data-start=\"539\" data-end=\"562\">CI\/CD on Mainframes<\/strong> Matters in the Era of Modernization<\/h3>\n<p data-start=\"600\" data-end=\"876\"><strong data-start=\"600\" data-end=\"623\">CI\/CD on Mainframes<\/strong> brings DevOps agility to one of the most reliable platforms ever built. Mainframes still power the core of banking, insurance, and retail \u2014 but agility demands faster delivery. That\u2019s where <strong data-start=\"814\" data-end=\"834\">Mainframe DevOps<\/strong> and modern <strong data-start=\"846\" data-end=\"865\">CI\/CD pipelines<\/strong> come in.<\/p>\n<p data-start=\"878\" data-end=\"1098\">For distributed systems, tools like GitHub Actions or Azure DevOps are common, but mainframe engineers are now learning to use <strong data-start=\"1005\" data-end=\"1039\">Git and Jenkins for Mainframes<\/strong> to achieve the same speed, traceability, and automation.<\/p>\n<hr data-start=\"1100\" data-end=\"1103\" \/>\n<h2 data-start=\"1105\" data-end=\"1183\">\ud83d\ude80 Part 1: <strong data-start=\"1119\" data-end=\"1153\">Git and Jenkins for Mainframes<\/strong> \u2014 The Classic Combo for CI\/CD<\/h2>\n<p data-start=\"1185\" data-end=\"1407\">Among all DevOps orchestrators, <strong data-start=\"1217\" data-end=\"1228\">Jenkins<\/strong> remains the most accessible entry point for <strong data-start=\"1273\" data-end=\"1302\">mainframe CI\/CD pipelines<\/strong>. Combined with Git, it brings transparency and repeatability to traditional z\/OS builds and deployments.<\/p>\n<hr data-start=\"1409\" data-end=\"1412\" \/>\n<h3 data-start=\"1414\" data-end=\"1470\">\ud83d\udd27 The Role of Git in a <strong data-start=\"1442\" data-end=\"1470\">Mainframe CI\/CD Pipeline<\/strong><\/h3>\n<p data-start=\"1472\" data-end=\"1635\">Mainframe code \u2014 COBOL, JCL, PL\/I, or IMS definitions \u2014 traditionally lived inside tools like Endevor or Changeman. Migrating to <strong data-start=\"1601\" data-end=\"1627\">Git-based repositories<\/strong> allows:<\/p>\n<ul data-start=\"1636\" data-end=\"1775\">\n<li data-start=\"1636\" data-end=\"1669\">\n<p data-start=\"1638\" data-end=\"1669\">Decentralized version control<\/p>\n<\/li>\n<li data-start=\"1670\" data-end=\"1709\">\n<p data-start=\"1672\" data-end=\"1709\">Feature branching and pull requests<\/p>\n<\/li>\n<li data-start=\"1710\" data-end=\"1747\">\n<p data-start=\"1712\" data-end=\"1747\">Automated builds on commit events<\/p>\n<\/li>\n<li data-start=\"1748\" data-end=\"1775\">\n<p data-start=\"1750\" data-end=\"1775\">End-to-end traceability<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"1777\" data-end=\"1883\">Git becomes the \u201csingle source of truth,\u201d forming the foundation of every <strong data-start=\"1851\" data-end=\"1871\">Mainframe DevOps<\/strong> initiative.<\/p>\n<hr data-start=\"1885\" data-end=\"1888\" \/>\n<h3 data-start=\"1890\" data-end=\"1957\">\u2699\ufe0f Jenkins \u2014 The Heart of the <strong data-start=\"1924\" data-end=\"1957\">CI\/CD Pipeline for Mainframes<\/strong><\/h3>\n<p data-start=\"1959\" data-end=\"2039\"><strong data-start=\"1959\" data-end=\"1980\">Jenkins pipelines<\/strong> orchestrate every step of the <strong data-start=\"2011\" data-end=\"2030\">mainframe CI\/CD<\/strong> process:<\/p>\n<ul data-start=\"2040\" data-end=\"2252\">\n<li data-start=\"2040\" data-end=\"2083\">\n<p data-start=\"2042\" data-end=\"2083\">Trigger builds when code changes in Git<\/p>\n<\/li>\n<li data-start=\"2084\" data-end=\"2130\">\n<p data-start=\"2086\" data-end=\"2130\">Compile COBOL or PL\/I via REST APIs or SSH<\/p>\n<\/li>\n<li data-start=\"2131\" data-end=\"2190\">\n<p data-start=\"2133\" data-end=\"2190\">Run automated testing (zUnit, DBB, or MF build scripts)<\/p>\n<\/li>\n<li data-start=\"2191\" data-end=\"2252\">\n<p data-start=\"2193\" data-end=\"2252\">Deploy artifacts to Micro Focus Enterprise Server or z\/OS<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2254\" data-end=\"2369\">This automation allows <strong data-start=\"2277\" data-end=\"2318\">continuous integration and deployment<\/strong> on mainframes \u2014 something once thought impossible.<\/p>\n<hr data-start=\"2371\" data-end=\"2374\" \/>\n<h3 data-start=\"2376\" data-end=\"2442\">\ud83e\udde9 Architecture: <strong data-start=\"2397\" data-end=\"2420\">CI\/CD on Mainframes<\/strong> Using Git and Jenkins<\/h3>\n<p data-start=\"2444\" data-end=\"2461\">Typical workflow:<\/p>\n<ol data-start=\"2463\" data-end=\"2705\">\n<li data-start=\"2463\" data-end=\"2520\">\n<p data-start=\"2466\" data-end=\"2520\">Developers code in Micro Focus Enterprise Developer.<\/p>\n<\/li>\n<li data-start=\"2521\" data-end=\"2559\">\n<p data-start=\"2524\" data-end=\"2559\">Source code is stored in <strong data-start=\"2549\" data-end=\"2556\">Git<\/strong>.<\/p>\n<\/li>\n<li data-start=\"2560\" data-end=\"2597\">\n<p data-start=\"2563\" data-end=\"2597\">Webhooks trigger Jenkins builds.<\/p>\n<\/li>\n<li data-start=\"2598\" data-end=\"2642\">\n<p data-start=\"2601\" data-end=\"2642\">Jenkins runs DBB or MFES build scripts.<\/p>\n<\/li>\n<li data-start=\"2643\" data-end=\"2705\">\n<p data-start=\"2646\" data-end=\"2705\">Test and deployment occur automatically on the mainframe.<\/p>\n<\/li>\n<\/ol>\n<p data-start=\"2707\" data-end=\"2800\">This flow ensures your <strong data-start=\"2730\" data-end=\"2758\">Mainframe CI\/CD pipeline<\/strong> is fast, auditable, and enterprise-grade.<\/p>\n<hr data-start=\"2802\" data-end=\"2805\" \/>\n<h3 data-start=\"2807\" data-end=\"2853\">\ud83e\uddf1 Example Jenkinsfile for Mainframe CI\/CD<\/h3>\n<div class=\"contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary\">\n<div class=\"contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary\">\n<div class=\"sticky top-9\">\n<div class=\"bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs\"><\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-groovy\">pipeline {<br \/>\nagent any<br \/>\nstages {<br \/>\nstage('Checkout') {<br \/>\nsteps {<br \/>\ngit branch: 'develop', url: 'https:\/\/git.company.com\/mainframe-app.git'<br \/>\n}<br \/>\n}<br \/>\nstage('Build') {<br \/>\nsteps {<br \/>\nsh '.\/build.sh'  \/\/ DBB or Micro Focus compiler<br \/>\n}<br \/>\n}<br \/>\nstage('Test') {<br \/>\nsteps {<br \/>\nsh '.\/run_zunit_tests.sh'<br \/>\n}<br \/>\n}<br \/>\nstage('Deploy') {<br \/>\nsteps {<br \/>\nsh '.\/deploy_to_mfes.sh'<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<\/code><\/div>\n<\/div>\n<pre class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"whitespace-pre! language-groovy\">\n<\/code><\/pre>\n<\/div>\n<p data-start=\"3312\" data-end=\"3432\">This demonstrates a practical <strong data-start=\"3342\" data-end=\"3370\">mainframe CI\/CD pipeline<\/strong> using <strong data-start=\"3377\" data-end=\"3396\">Git and Jenkins<\/strong> \u2014 simple, repeatable, and scalable.<\/p>\n<hr data-start=\"3434\" data-end=\"3437\" \/>\n<h3 data-start=\"3439\" data-end=\"3495\">\ud83e\udde0 Best Practices for <strong data-start=\"3465\" data-end=\"3485\">Mainframe DevOps<\/strong> and CI\/CD<\/h3>\n<ol data-start=\"3497\" data-end=\"3851\">\n<li data-start=\"3497\" data-end=\"3572\">\n<p data-start=\"3500\" data-end=\"3572\"><strong data-start=\"3500\" data-end=\"3533\">Leverage Branching Strategies<\/strong> suited for mainframe release cycles.<\/p>\n<\/li>\n<li data-start=\"3573\" data-end=\"3650\">\n<p data-start=\"3576\" data-end=\"3650\"><strong data-start=\"3576\" data-end=\"3606\">Automate dependency builds<\/strong> using IBM DBB or Micro Focus equivalents.<\/p>\n<\/li>\n<li data-start=\"3651\" data-end=\"3711\">\n<p data-start=\"3654\" data-end=\"3711\"><strong data-start=\"3654\" data-end=\"3681\">Integrate Quality Gates<\/strong> (SonarQube for COBOL\/PL\/I).<\/p>\n<\/li>\n<li data-start=\"3712\" data-end=\"3782\">\n<p data-start=\"3715\" data-end=\"3782\"><strong data-start=\"3715\" data-end=\"3737\">Secure credentials<\/strong> with Jenkins credentials binding or Vault.<\/p>\n<\/li>\n<li data-start=\"3783\" data-end=\"3851\">\n<p data-start=\"3786\" data-end=\"3851\"><strong data-start=\"3786\" data-end=\"3809\">Visualize pipelines<\/strong> using Blue Ocean or Grafana dashboards.<\/p>\n<\/li>\n<\/ol>\n<hr data-start=\"3853\" data-end=\"3856\" \/>\n<h3 data-start=\"3858\" data-end=\"3904\">\ud83d\udd0d Why Start Mainframe CI\/CD with Jenkins?<\/h3>\n<p data-start=\"3906\" data-end=\"3919\">Because it\u2019s:<\/p>\n<ul data-start=\"3920\" data-end=\"4103\">\n<li data-start=\"3920\" data-end=\"3964\">\n<p data-start=\"3922\" data-end=\"3964\">Familiar and proven in enterprise setups<\/p>\n<\/li>\n<li data-start=\"3965\" data-end=\"4020\">\n<p data-start=\"3967\" data-end=\"4020\">Plugin-rich for Zowe CLI, DBB, and MFES integration<\/p>\n<\/li>\n<li data-start=\"4021\" data-end=\"4055\">\n<p data-start=\"4023\" data-end=\"4055\">Open source and cost-effective<\/p>\n<\/li>\n<li data-start=\"4056\" data-end=\"4103\">\n<p data-start=\"4058\" data-end=\"4103\">Ideal for bridging legacy with modern tools<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"4105\" data-end=\"4108\" \/>\n<h3 data-start=\"4110\" data-end=\"4164\">\ud83c\udfc1 The Path Forward in <strong data-start=\"4137\" data-end=\"4164\">Mainframe Modernization<\/strong><\/h3>\n<p data-start=\"4166\" data-end=\"4337\">Implementing <strong data-start=\"4179\" data-end=\"4202\">CI\/CD on Mainframes<\/strong> using <strong data-start=\"4209\" data-end=\"4228\">Git and Jenkins<\/strong> is often the first milestone in the larger journey of <strong data-start=\"4283\" data-end=\"4310\">mainframe modernization<\/strong>. It enables developers to:<\/p>\n<ul data-start=\"4338\" data-end=\"4452\">\n<li data-start=\"4338\" data-end=\"4366\">\n<p data-start=\"4340\" data-end=\"4366\">Collaborate in real time<\/p>\n<\/li>\n<li data-start=\"4367\" data-end=\"4402\">\n<p data-start=\"4369\" data-end=\"4402\">Automate testing and deployment<\/p>\n<\/li>\n<li data-start=\"4403\" data-end=\"4452\">\n<p data-start=\"4405\" data-end=\"4452\">Integrate legacy workloads with cloud systems<\/p>\n<\/li>\n<\/ul>\n<blockquote data-start=\"4454\" data-end=\"4561\">\n<p data-start=\"4456\" data-end=\"4561\"><strong data-start=\"4456\" data-end=\"4476\">Mainframe DevOps<\/strong> is not about replacing the mainframe \u2014 it\u2019s about modernizing the process around it.<\/p>\n<\/blockquote>\n<hr data-start=\"4563\" data-end=\"4566\" \/>\n<h3 data-start=\"4568\" data-end=\"4594\">\ud83d\udd17 Coming Next on zLog<\/h3>\n<ul data-start=\"4596\" data-end=\"4832\">\n<li data-start=\"4596\" data-end=\"4651\">\n<p data-start=\"4598\" data-end=\"4651\">CI\/CD Pipelines on Mainframes: Git &amp; GitHub Actions<\/p>\n<\/li>\n<li data-start=\"4652\" data-end=\"4705\">\n<p data-start=\"4654\" data-end=\"4705\">CI\/CD Pipelines on Mainframes: Git &amp; Azure DevOps<\/p>\n<\/li>\n<li data-start=\"4706\" data-end=\"4759\">\n<p data-start=\"4708\" data-end=\"4759\">CI\/CD Pipelines on Mainframes: Git &amp; GitLab CI\/CD<\/p>\n<\/li>\n<li data-start=\"4760\" data-end=\"4832\">\n<p data-start=\"4762\" data-end=\"4832\">CI\/CD Pipelines on Mainframes: Comparing Popular CI\/CD Orchestrators<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"4834\" data-end=\"4837\" \/>\n<h3 data-start=\"4839\" data-end=\"4863\">\u270d\ufe0f Closing Thought<\/h3>\n<blockquote data-start=\"4865\" data-end=\"4969\">\n<p data-start=\"4867\" data-end=\"4969\">\u201cMainframes aren\u2019t obstacles to DevOps \u2014 they\u2019re proof that reliability and innovation can coexist.\u201d<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>CI\/CD on Mainframes: Git &amp; Jenkins \u2014 Building a Mainframe DevOps Pipeline zLog Series on Mainframe CI\/CD Modernization \ud83d\udca1 Why [&hellip;]<\/p>\n","protected":false},"author":515,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[176],"tags":[],"class_list":["post-2990","post","type-post","status-publish","format-standard","hentry","category-devops"],"amp_enabled":true,"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"zMainframes","author_link":"https:\/\/zmainframes.com\/zlog\/author\/zmainframes\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/zmainframes.com\/zlog\/devops\/\" rel=\"category tag\">DevOps<\/a>","rttpg_excerpt":"CI\/CD on Mainframes: Git &amp; Jenkins \u2014 Building a Mainframe DevOps Pipeline zLog Series on Mainframe CI\/CD Modernization \ud83d\udca1 Why [&hellip;]","_links":{"self":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/users\/515"}],"replies":[{"embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/comments?post=2990"}],"version-history":[{"count":3,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2990\/revisions"}],"predecessor-version":[{"id":2994,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2990\/revisions\/2994"}],"wp:attachment":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/media?parent=2990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/categories?post=2990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/tags?post=2990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}