Skip to content

Latest commit

 

History

History
 
 

README.md

Pipeline Templates

This category provides templates to implement a CI/CD pipeline covering the entire development lifecycle. These assets are developed based on The Git branching model for mainframe development and help you to quickly setup your pipeline environment. Prior to implementing these templates, you should get familiar with the outlined Git branching model.

Table of Contents

Asset Description Documentation Link
Common-Backend-Scripts Core asset to simplify defining the pipeline orchestration by providing central services for the various stages of the CI/CD pipeline. Especially useful for pipeline architectures which don't provide a native runner . Common-Backend-Scripts/README.md
Azure DevOps Pipeline Template Template to setup a AzureDevOps pipeline to build, package and deploy Azure Repos Git. AzureDevOpsPipeline/README.md
Gitlab CI/CD Pipeline Template .gitlab-ci.yml template to setup a Gitlab CI/CD pipeline to build, package and deploy with the Gitlab platform. GitlabCIPipeline/README.md
Gitlab CI/CD Pipeline Template for z/OS-native GitLab Runner .gitlab-ci.yml template to setup a Gitlab CI/CD pipeline to build, package and deploy with the Gitlab platform using a z/OS-native Gitlab Runner. GitlabCIPipeline-for-zos-native-runner/README.md
GitHub Actions Pipeline Template Template to setup a GitHub Actions Pipeline to build, package, and deploy a GitHub repository. GitHubActionsPipeline/README.md
Jenkins Multibranch Pipeline Template Multibranch pipeline template to setup a Jenkins CI/CD pipeline to build, package and deploy with any Git provider. JenkinsPipeline/README.md

Please use the Github discussion board for feedback and comments on these templates.

Capabilities of Pipeline Templates

The below tables provide an overview of the implemented capabilities of the pipeline templates. The information can be used to lookup and understand the variations in the implementations. The 🔴 icon indicates that this step uses a Common Backend Script.

Technology in use with CI/CD orchestrators


Azure DevOps GitLab CI with distributed runner GitLab CI with z/OS-native GitLab runner GitHub Actions Jenkins
CI Runner/Agent topology ADO runner gitlab-runner shell executor z/OS-native gitlab-runner shell executor GitHub Actions runner  Jenkins node on z/OS
Git Provider Azure DevOps GitLab GitLab GitHub Any Git provider
Deployment technology IBM Wazi Deploy IBM Wazi Deploy IBM Wazi Deploy IBM DevOps Deploy (a.k.a. UCD)
Communication between CI platform and z/OS SSH IBM RSE API Plug-in for Zowe CLI native GitLab Runner communication SSH Jenkins-managed
Additional integration technologies Azure DevOps CLI GitLab REST interface GitLab REST interface GitHub CLI
Pipeline extensions SonarQube sonar-scanner

Implemented pipeline tasks

All templates implement the recommended working practice, that is documented within the IBM zDevOps Guide. It is made of:

  • a feature branch pipeline, that provides an early feedback to developers about the impacted components of their changes, building a preliminary package that can be tested in an isolated environment,
  • an integration pipeline, that is triggered when merging changes into an integration branch such as the main, release maintenance or epic branch
  • a release pipeline, that builds all contributed changes for the iteration, creates a release candidate package and allows to drive deployments into controlled test environments.

The below table provides an overview of the capabilities that are implemented in the various templates. The second column in the table indicates for which types of pipeline the capability is available:
🔹 feature branch pipeline
🔸 build pipeline for integration branches
🔺 release pipeline

Capability Pipeline types Azure DevOps GitLab CI with distributed runner GitLab CI with z/OS-native GitLab runner GitHub Actions Jenkins
Clone Git repository 🔹🔸🔺 🔴 gitClone.sh 🔴 gitClone.sh 🔴 gitClone.sh 🔴 gitClone.sh  Jenkins Git Plugin
Build 🔹🔸🔺 🔴 dbbBuild.sh or zBuilder.sh 🔴 dbbBuild.sh 🔴 zBuilder.sh 🔴 dbbBuild.sh  🔴 dbbBuild.sh
Publish Build Logs 🔹🔸🔺 🔴 prepareLogs.sh and sftp to load and attach logs 🔴 prepareLogs.sh and sftp to load and attach logs 🔴 native support using the Artifact keyword in GitLab pipeline 🔴 prepareLogs.sh and zowe CLI rse to load and attach logs  Jenkins artifactPublisher plugin
Code Quality and Scans 🔹🔸🔺 - - - - SonarQube Scan
Creation of release candidate tag 🔺 Computation of the release candidate and planned release name
Creation of the release candidate Tag in ADO via the ADO CLI
Computation of the release candidate and planned release name
Creation of the release candidate Git tag in Gitlab via REST
Computation of the release candidate and planned release name
Creation of the release candidate Git tag in Gitlab via REST
Computation of the release candidate and planned release name
Creation of a pre-release via GH CLI for the release candidate
Computation of the UCD package name. No tagging in Git (independent of the Git provider).
Create package 🔹🔸🔺 🔴 packageBuildOutputs.sh 🔴 packageBuildOutputs.sh 🔴 packageBuildOutputs.sh 🔴 packageBuildOutputs.sh  🔴 ucdPackaging.sh to create UCD component version
Create Link to UCD to Pipeline run
Publish Package 🔸🔺 Upload via packageBuildOutputs.sh - Upload to an Artifact repository configured in the Common Backend Scripts - Depending on UCD buztool configuration
Deployment to Integration Test environment
Deployment Integration Test environment 🔸🔺 🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 ucdDeploy.sh. Create Link to UCD Deployment request to Pipeline run
Publish deployment logs 🔸🔺 🔴 prepareLogs.sh
and sftp upload
🔴 prepareLogs.sh
and sftp upload
🔴 native support using the Artifact keyword in GitLab pipeline 🔴 prepareLogs.sh
and sftp upload
Create UCD Deployment Link in Pipeline run


Copy WD Evidence File to Evidence Inventory Copy WD Evidence File to Evidence Inventory
Deployment to Acceptance Test environment
Retrieve Deployment Package 🔺 Download via wazideploy-generate.sh Package from pipeline working directory is used Package from pipeline working directory is used Package from pipeline working directory is used Not part of the pipeline template
Deployment Acceptance Test environment 🔺 🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
Not part of the pipeline template



Copy WD Evidence File to Evidence Inventory Copy WD Evidence File to Evidence Inventory
Publish deployment logs 🔺 🔴 prepareLogs.sh
and sftp upload
🔴 prepareLogs.sh
and sftp upload
🔴 native support using the Artifact keyword in GitLab pipeline 🔴 prepareLogs.sh
and sftp upload
Not part of the pipeline template
Deployment to Production environment
Retrieve Deployment Package 🔺 Download via wazideploy-generate.sh The package from pipeline working directory is used Package from pipeline working directory is used Package from pipeline working directory is used Not part of the pipeline template
Deployment Production environment 🔺 🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
Register deployment to environment in ADO
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
🔴 wazideploy-generate.sh
🔴 wazideploy-deploy.sh
🔴 wazideploy-evidence.sh
Register deployment to environment in GitHub
Not part of the pipeline template


Copy WD Evidence File to Evidence Inventory Copy WD Evidence File to Evidence Inventory
Publish deployment logs 🔺 🔴 prepareLogs.sh
and sftp upload
🔴 prepareLogs.sh
and sftp upload
🔴 native support using the Artifact keyword in GitLab pipeline 🔴 prepareLogs.sh
and sftp upload
Not part of the pipeline template
Release Finalisation 🔺 - Creation of a Git tag via GitLab via REST
Automated update of the baselineReference.conf file
Creation of a Git tag via GitLab via REST
Automated update of the baselineReference.conf file
Creation of a Git tag and release via GH CLI No automated tagging
Workspace Cleanup 🔹🔸🔺 🔴 deleteWorkspace.sh 🔴 deleteWorkspace.sh 🔴 deleteWorkspace.sh 🔴 deleteWorkspace.sh Jenkins Plugin