234 lines
10 KiB
Plaintext
234 lines
10 KiB
Plaintext
@Library('terraform-infra@main') _
|
|
|
|
pipeline {
|
|
agent {
|
|
node {
|
|
label 'slave-01'
|
|
}
|
|
}
|
|
|
|
options {
|
|
timestamps()
|
|
ansiColor('xterm')
|
|
}
|
|
|
|
environment {
|
|
GITHUB_CRED = 'meesho-jenkins'
|
|
}
|
|
|
|
stages {
|
|
stage('Setup parameters') {
|
|
steps {
|
|
script {
|
|
properties([
|
|
parameters([
|
|
string(
|
|
defaultValue: '',
|
|
name: 'repo_name',
|
|
description: 'Repository name of the application. Example: supplier-payment, ads-credit etc',
|
|
trim: true
|
|
),
|
|
string(
|
|
defaultValue: 'main',
|
|
name: 'branch_name',
|
|
description: 'Branch name of above provided repo. Example: master, develop',
|
|
trim: true
|
|
),
|
|
string(
|
|
defaultValue: '',
|
|
name: 'service',
|
|
description: 'K8s Service/app name. Example: supplier-payment-web, ads-credit ',
|
|
trim: true
|
|
),
|
|
choice(
|
|
choices: ['critical', 'warning'],
|
|
description: 'NOTE: This is required',
|
|
name: 'severity'
|
|
),
|
|
choice(
|
|
choices: ['prd', 'ftr', 'dev', 'int'],
|
|
description: 'NOTE: This is required',
|
|
name: 'environment'
|
|
),
|
|
choice(
|
|
choices: ['1m', '2m', '5m', '10m', '1h', '2h'],
|
|
description: 'NOTE: This is required. Default - 1m',
|
|
name: 'period'
|
|
)
|
|
])
|
|
])
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('validation') {
|
|
steps {
|
|
script {
|
|
env.msg = 'Started service alert onboarding'
|
|
env.metric = 'CronJob_Alert'
|
|
env.int_env = 'main'
|
|
if (period.contains('m')) {
|
|
env.threshold = period.replaceAll('m', '').toInteger() * 60
|
|
}
|
|
else if (period.contains('h')) {
|
|
env.threshold = period.replaceAll('h', '').toInteger() * 60 * 60
|
|
}
|
|
else {
|
|
env.threshold = null
|
|
}
|
|
log.info("""
|
|
App Repo Name - ${repo_name}
|
|
App Repo Branch Name - ${branch_name}
|
|
Threshold - ${env.threshold}
|
|
Service Name - ${service}
|
|
Severity - ${severity}
|
|
Env - ${environment}
|
|
Period - ${period}
|
|
""")
|
|
if (params.repo_name.isEmpty() || params.branch_name.isEmpty() || params.service.isEmpty()) {
|
|
env.msg += '\n\nFAILED -\n One or more input paramters are EMPTY/NULL.'
|
|
log.err("${env.msg}")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Checkout Terraform-Infra repo') {
|
|
steps {
|
|
script {
|
|
log.info('Checkout Terraform-Infra repo')
|
|
gitActions.checkout()
|
|
env.msg += '\n2. Terraform-Infra Repo checkout step was SUCCESSFUL.'
|
|
// gitActions.branchCheckOut("${WORKSPACE}/${repo_name}", "${branch_name}")
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Clone service repo for fetching app details') {
|
|
steps {
|
|
script {
|
|
log.info("Cloning App Repo - ${repo_name}, Branch - ${branch_name}")
|
|
gitActions.clone("${WORKSPACE}", "${repo_name}", "${branch_name}")
|
|
// sh 'ls -al'
|
|
env.msg += '\n3. Service Repo Clone step was SUCCESSFUL.'
|
|
// gitActions.branchCheckOut("${WORKSPACE}/${repo_name}", "${branch_name}")
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Collecting app details') {
|
|
steps {
|
|
script {
|
|
dir("${repo_name}/deployments/") {
|
|
sh 'ls -al'
|
|
try {
|
|
def i = 0
|
|
log.info("Reading BU, Team etc from ${repo_name}/deployments/${service}.yaml")
|
|
cron = sh(returnStdout: true, script: "yq '.cron' ${service}.yaml").trim()
|
|
if (!cron.toBoolean()) {
|
|
env.msg += '\nProvided service is not a Scheduler/Cron Type.'
|
|
sh 'exit 1'
|
|
}
|
|
bu = sh(returnStdout: true, script: "yq '.bu' ${service}.yaml").trim()
|
|
team = sh(returnStdout: true, script: "yq '.team' ${service}.yaml").trim()
|
|
priority = sh(returnStdout: true, script: "yq '.priority' ${service}.yaml").trim()
|
|
cronjobs = sh(returnStdout: true, script: "yq '.environment.${environment}.jobs | keys' ${service}.yaml | sed 's/- //g' | tail -n 1").trim()
|
|
echo "${cronjobs}"
|
|
while (i <= cronjobs.toInteger()) {
|
|
cronjob_name = sh(returnStdout: true, script: "yq '.environment.${environment}.jobs[${i}] | keys' ${service}.yaml | sed 's/- //g'").trim()
|
|
echo "${cronjob_name}"
|
|
cronjob_name = cronjob_name.replaceAll('-', '_')
|
|
log.info("Creating alert-config.yaml for ${i}. ${cronjob_name}")
|
|
create_config()
|
|
i += 1
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
env.msg += "\n\nFAILED -\n Error while fetching app details from the app repo provided.\n Full Error Details - ${e}"
|
|
log.err("${env.msg}")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// stage('Create alert-config.yaml') {
|
|
// steps {
|
|
// script {
|
|
// try {
|
|
// log.info('Creating alert-config.yaml')
|
|
// create_config()
|
|
// env.msg += '\n4. Create alert-config.yaml step was SUCCESSFUL.'
|
|
// }
|
|
// catch (Exception e) {
|
|
// env.msg += "\n\nFAILED -\n Error while creating the alert-config.yaml.\n Full Error Details - ${e}"
|
|
// log.err("${env.msg}")
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
stage('Commit alert-config.yaml') {
|
|
steps {
|
|
script {
|
|
new_branch_name = "${bu}-${team}-${service}"
|
|
log.info("Pushing alert-config.yaml to Branch - ${new_branch_name}")
|
|
// log.info("Pushing alert-config.yaml to Branch - ${service}")
|
|
sh "rm -rf ${repo_name}"
|
|
gitActions.branchCheckOut("${WORKSPACE}", "${new_branch_name}")
|
|
// gitActions.branchCheckOut("${WORKSPACE}", "${service}")
|
|
gitActions.add("${WORKSPACE}", '.')
|
|
gitActions.codeCommit("${WORKSPACE}", "${new_branch_name}", "Updated ${env.metric} for ${new_branch_name}")
|
|
gitActions.codePush("${WORKSPACE}", "${new_branch_name}")
|
|
// gitActions.codeCommit("${WORKSPACE}", "${service}", 'Updated alert-config.yaml')
|
|
// gitActions.codePush("${WORKSPACE}", "${service}")
|
|
env.msg += '\n5. Pushing alert-config.yaml step is SUCCESSFUL. Please make sure to delete branch after PR Merge.'
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Raising PR') {
|
|
steps {
|
|
script {
|
|
log.info("Creating PR -> Base - main; Head - ${new_branch_name}")
|
|
pr_message = "Onboarding Alerts for ${service}"
|
|
gitActions.createPR("${WORKSPACE}", 'terraform-infra', "${new_branch_name}", "${pr_message}")
|
|
env.msg += "\n6. Creating PR, Head - ${new_branch_name} and Base - main is SUCCESSFUL."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
post {
|
|
always {
|
|
cleanWs()
|
|
}
|
|
}
|
|
}
|
|
|
|
def create_config() {
|
|
dir("${WORKSPACE}/meesho/tools/vm-alerts-config/configmap") {
|
|
sh 'pwd'
|
|
sh "mkdir -p ${bu}/${team}/${service}/mandatory_alerts"
|
|
sh "touch ${bu}/${team}/${service}/mandatory_alerts/${cronjob_name}-${env.metric}.yaml"
|
|
|
|
def config_template = libraryResource 'com/meesho/template-cronjob-alert-configmap.yaml'
|
|
def config_binding = []
|
|
|
|
config_binding = [
|
|
'threshold': "${env.threshold}",
|
|
'cronjob_name': "${cronjob_name}",
|
|
'period': "${period}",
|
|
'severity': "${severity}",
|
|
'bu': "${bu}",
|
|
'team': "${team}",
|
|
'service': "${service}",
|
|
'environment': "${environment}",
|
|
'priority': "${priority}",
|
|
]
|
|
writeFile file:"${bu}/${team}/${service}/mandatory_alerts/${cronjob_name}-${env.metric}.yaml", text: tokenize(config_template, config_binding)
|
|
|
|
sh "cat ${bu}/${team}/${service}/mandatory_alerts/${cronjob_name}-${env.metric}.yaml"
|
|
sh "pwd;ls -al ${bu}/${team}/${service}/mandatory_alerts;ls -al .."
|
|
}
|
|
}
|