Jenkins pipeline using OCI ansible collections to automate the DR of ERP Application in OCI
Jenkins pipeline using OCI ansible collections to automate the DR of ERP Application in OCI
OCI Ansible Collections
OCI Ansible Collection is a set of Ansible modules and plugins that enable automation and orchestration of Oracle Cloud Infrastructure (OCI) resources.
Benefits
Streamlined automation: Simplifies OCI resource management and deployment.
Consistency: Ensures consistent resource configuration across environments.
Efficient resource utilization: Automates resource scaling, termination, and cleanup.
Integration: Compatible with existing Ansible workflows and tools.
Jenkins
Jenkins is an open-source automation server that enables teams to automate various stages of their software development, testing, and deployment processes.
Key Features
Job Management: Jenkins manages jobs, which are executable tasks, such as building, testing, or deploying software.
Build Automation: Jenkins automates build processes, including compiling, packaging, and deploying software.
Test Automation: Jenkins automates testing, including unit testing, integration testing, and acceptance testing.
Deployment Automation: Jenkins automates deployment processes, including deploying software to production environments.
Monitoring and Reporting: Jenkins provides monitoring and reporting capabilities, enabling teams to track progress, identify issues, and optimize processes.
Benefits
Faster Time-to-Market: Jenkins automates processes, reducing manual effort and increasing efficiency, enabling faster time-to-market.
Improved Quality: Jenkins ensures consistent testing and deployment processes, improving software quality and reducing errors.
Increased Efficiency: Jenkins automates repetitive tasks, freeing up teams to focus on high-value activities.
Better Collaboration: Jenkins provides a centralized platform for teams to collaborate, share knowledge, and track progress.
Jenkins with OCI Ansible Collections
Jenkins is an automation server that integrates with OCI Ansible Collections to automate Oracle Cloud Infrastructure (OCI) resource management and deployment.
Key Integration Points:
1. Ansible Playbooks: Jenkins runs Ansible playbooks that utilize OCI Ansible Collections to manage OCI resources.
2. OCI Credentials: Jenkins stores and manages OCI credentials, such as API keys or resource principals, to authenticate with OCI.
3. Job Configuration: Jenkins jobs are configured to run Ansible playbooks, specifying the OCI resources to manage and the actions to perform.
4. Automation Triggers: Jenkins can trigger Ansible playbook runs based on various events, such as:
- Schedule (e.g., daily, weekly)
- Git repository changes (e.g., push, merge)
- OCI event notifications (e.g., instance creation, deletion)
Benefits
1. Automated OCI Management: Jenkins automates OCI resource provisioning, configuration, and deployment.
2. Consistent Environment: Ensures consistent OCI resource configuration across environments (e.g., dev, prod).
3. Efficient Resource Utilization: Automates resource scaling, termination, and cleanup.
4. Integration with CI/CD Pipelines: Integrates OCI resource management into existing CI/CD pipelines.
Use Cases
1. Infrastructure-as-Code (IaC): Jenkins automates OCI infrastructure provisioning and deployment using Ansible playbooks.
2. CI/CD Pipelines: Jenkins integrates OCI resource management into CI/CD pipelines for automated testing, deployment, and rollback.
3. DevOps: Jenkins enables DevOps teams to automate OCI resource management and deployment.
Jenkins pipeline using OCI ansible collections to automate the Disaster Recovery (DR) tasks related to of ERP Application (PeopleSoft) and other components (IaaS & PaaS) in OCI
Primary Region : OCI Singapore
Secondary Region : OCI Ashburn
RTO : 2 Hours
RPO : 1 Hour
Difference Components involved & running in OCI Regions
PeopleSoft Web Server
PeopleSoft Application Server
PeopleSoft Batch Server
PeopleSoft Database Server as a DBCS instance in OCI
Oracle Integration Cloud (OIC)
SFTP Server
OCI WAF
The high-level DR tasks to be automated
DR SWITCH-OVER (Singapore to Ashburn)
Stop PeopleSoft Web Server 1
Stop PeopleSoft Web Server 2
Stop PeopleSoft App Server 1
Stop PeopleSoft Batch Server 1
Stop PeopleSoft App Server 2
Stop OIC PaaS instance
Switch PeopleSoft Database DR to PROD
Switch SP Database DR to PROD
Disable RYNC Job from DR SFTP to PROD SFTP
Disable RYNC Job from DR Web 1 to PROD Web1
Disable RYNC Job from DR Web 2 to PROD Web2
Disable RYNC Job from DR App 1 to PROD App 1
Disable RYNC Job from DR App 2 to PROD App 2
Change PS PROD DB VM shape VM.Standard2.1 to VM.Standard2.4
Change Web1 PROD VM shape VM.Standard2.1 to VM.Standard2.2
Change Web2 PROD VM shape VM.Standard2.1 to VM.Standard2.2
Change App/Batch 1 PROD VM shape VM.Standard2.1 to VM.Standard2.2
Change App 2 PROD VM shape VM.Standard2.1 to VM.Standard2.2
Start OIC PaaS instance
pipeline {
agent any
stages {
stage('Stop PeopleSoft Web Servers') {
steps {
echo 'Stop PeopleSoft Web Server'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_web_stop.yml'
}
}
stage('Stop PeopleSoft App Servers') {
steps {
echo 'Stop PeopleSoft App Server'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_app_stop.yml'
}
}
stage('Stop PeopleSoft Batch Server') {
steps {
echo 'Stop PeopleSoft Batch Servers'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_batch_stop.yml'
}
}
stage('Stop OIC sg PaaS Instance') {
steps {
echo ' Stop OIC sg PaaS Instance '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_integration_instance_stop.yml'
}
}
stage ('SG DB Switch Back to Ash'){
steps {
echo ' SG DB Switch Back to Ash '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_db_switch_back.yml'
}
}
stage ('Disable RYNC Job from DR to PROD'){
steps {
echo ' Disable RYNC Job from PROD to DR'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_cron_disable.yml'
}
}
stage('Change SG DB Shape') {
steps {
echo ' Re-size the VM shape for App and Web Servers '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/ash_db_shape_up.yml'
}
}
stage ('Re-size the VM shape for App and Web Servers'){
steps {
echo ' Re-size the VM shape for App and Web Servers '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/ash_instance_shape_up.yml'
}
}
stage('Start OIC ASH PaaS Instance') {
steps {
echo ' Start OIC ASH PaaS Instance '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/ash_integration_instance_start.yml'
}
}
}
}
DR SWITCH-OVER (Singapore to Ashburn) - POST-REQUISITES
Change PS DR DB VM shape VM.Standard2.4 to VM.Standard2.1
Change Web1 DR VM shape VM.Standard2.2 to VM.Standard2.1
Change Web2 DR VM shape VM.Standard2.2 to VM.Standard2.1
Change App/Batch 1 DR VM shape VM.Standard2.2 to VM.Standard2.1
Change App 2 DR VM shape VM.Standard2.2 to VM.Standard2.1
Enable RYNC Job from PROD SFTP to DR SFTP
Enable RYNC Job from PROD Web 1 to DR Web1
Enable RYNC Job from PROD Web 2 to DR Web2
Enable RYNC Job from PROD App 1 to DR App 1
Enable RYNC Job from PROD App 2 to DR App 2
pipeline {
agent any
stages {
stage('Change sg DB Shape') {
steps {
echo 'Change sg DB Shape to 2.1'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_db_shape_down.yml'
}
}
stage ('Re-size the VM shape for App and Web Servers to 2.1'){
steps {
echo ' Re-size the VM shape for App and Web Servers '
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/sg_instance_shape_down.yml'
}
}
stage ('Enable RYNC Job from PROD to DR'){
steps {
echo ' Enable RYNC Job from PROD to DR'
ansiblePlaybook credentialsId: 'private-key',
disableHostKeyChecking: true,
installation: 'Ansible',
inventory: '/opt/jenkins/dr-scripts/hosts',
playbook: '/opt/jenkins/dr-scripts/ash_cron_enable.yml'
}
}
}
}
Similarly, there are two pipelines created for DR Switch Back and POST-REQUISITES (OCI Ashburn to Singapore)