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.
| 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.
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.
| 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 |
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,releasemaintenance orepicbranch - 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 |