Untitled
unknown
plain_text
2 years ago
8.1 kB
5
Indexable
environment = 'staging'
default_branch = 'ENGWEB-8507' //change to develop
default_git_remote = 'darla'
cluster = 'staging'
should_have_deploy_param = true
DEPLOYED_BRANCH = params.DEPLOYED_BRANCH
GIT_REMOTE = params.GIT_REMOTE
try {
default_branch = params.DEPLOYED_BRANCH
} catch (exc) {
default_branch = 'ENGWEB-8507'
}
parameterChoices = [
string(
description: 'branch to deploy',
defaultValue: default_branch,
name: 'DEPLOYED_BRANCH',
trim: false),
string(
description: 'the git remote from which to pull code',
defaultValue: default_git_remote,
name: "GIT_REMOTE",
trim: true),
]
properties([
parameters(parameterChoices),
])
zone = "asia-east1-b"
/**
* retry_block Closure, will retry the body n times or
* when the error_handler returns 1. This uses the ERROR_HANDLER closure above
*/
def retry_block(int times = 5, int retries = 0, Closure body) {
if (cluster.contains('staging') || cluster == 'release' || cluster.contains('testing')) {
while(retries++ < times){
try{
return body.call()
} catch (e) {
echo "Error Caught: $e"
recoverable_errors = sh(returnStdout: true, script: "grep -E -f recoverable-jenkins-error.txt ${output_location} || true").trim()
if (!recoverable_errors) {
echo "<BUILD FAILED>"
notify("Build Failed on cluster ${cluster}")
error "Stage ended in a non recoverable error"
sleep(5000)
}
echo "Retrying block..."
}
}
error "Already reached maximum retries, exiting..."
} else {
return body.call()
}
}
/**
* sh_tee will run the sh command with a tee so that the output can be read later.
*/
def sh_tee(String command) {
command = command.trim()
sh("""set -o pipefail -e
$command | tee $output_location
""")
}
def no_trace(String command) {
command = command.trim()
return """
set +x
$command
set -x
"""
}
podTemplate(label: 'kb-platform',
containers: [
containerTemplate(
name: 'jnlp',
image: 'asia.gcr.io/kalibrr-platform/kb-jnlp:newest',
alwaysPullImage: true,
resourceRequestCpu: '200m',
resourceLimitCpu: '1000m',
resourceRequestMemory: '768Mi',
resourceLimitMemory: '768Mi',
)
],
volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
],
inheritFrom: 'kb-base',
serviceAccount: 'kb-internals-jenkins') {
node('kb-platform') {
stage('Checkout') {
sshagent(['jenkins-ssh']) {
sh(script: """
git init .
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' git fetch --tags --progress -- git@git-ssh.kalibrr.dev:kalibrr/kalibrr.git +refs/heads/*:refs/remotes/kalibrrupstream/*
git config remote.kalibrrupstream.url git@git-ssh.kalibrr.dev:kalibrr/kalibrr.git
git config --add remote.kalibrrupstream.fetch +refs/heads/*:refs/remotes/kalibrrupstream/*
git config remote.kalibrrupstream.url git@git-ssh.kalibrr.dev:kalibrr/kalibrr.git
git config remote.origin.url git@git-ssh.kalibrr.dev:${GIT_REMOTE}/kalibrr.git
git fetch --tags --progress -- git@git-ssh.kalibrr.dev:${GIT_REMOTE}/kalibrr.git +refs/heads/*:refs/remotes/origin/*
git checkout -f origin/${DEPLOYED_BRANCH} || git checkout -f ${DEPLOYED_BRANCH}
""")
}
if (cluster.contains('staging') || cluster.contains('testing')) {
sh(script: """
git checkout -f kalibrrupstream/develop
git merge origin/${DEPLOYED_BRANCH}
""")
}
// checkout scm
}
stage('Download Executables') {
withCredentials([
file(credentialsId: 'build-gcp-service-creds', variable: 'GCP_CREDS'),
]) {
sh('gcloud auth activate-service-account --key-file=$GCP_CREDS --project=kalibrr-platform')
sh('gsutil cp gs://kb-go/build_image_go ./kubernetes/scripts/build_image_go')
sh('gsutil cp gs://kb-go/build_config ./scripts/build_config')
sh('chmod +x ./kubernetes/scripts/build_image_go ./scripts/build_config')
sh('wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz && tar zxvf helm-v3.5.2-linux-amd64.tar.gz && mv ./linux-amd64/helm /usr/bin')
}
}
stage('Build images') {
sh('pip install -e helmplates')
sh('pip3 install -e helmplates')
withCredentials([file(credentialsId: 'build-gcp-service-creds', variable: 'GCP_CREDS')]) {
sh('gcloud auth activate-service-account --key-file=$GCP_CREDS --project=kalibrr-platform')
sh("gsutil cp gs://kb-ci-output/deploy-kb-cluster-image-info.db previous-image-info.db")
sh("GOOGLE_APPLICATION_CREDENTIALS='$GCP_CREDS' ./kubernetes/scripts/build_images -n 2 --repo=asia.gcr.io/kalibrr-platform --checkpoint-interval=60 --info-file=image-info.db --use-container-builder --previous-info-file=previous-image-info.db --use-go-builder --environment=${environment}")
sh('rm previous-image-info.db')
// Archive this so that we can rollback in the future
archiveArtifacts('image-info.db')
// Upload to GCP too.
sh("gsutil cp image-info.db gs://kb-ci-output/$JOB_NAME-image-info.db")
sh("gsutil cp image-info.db gs://kb-ci-output/$JOB_NAME-$BUILD_NUMBER-image-info.db")
}
}
deployCredentials = file(credentialsId: 'build-gcp-service-creds', variable: 'GCP_CREDS')
//deployProject = "kalibrr-platform"
deployProject = "kalibrr-staging"
tagRelease = '--tag-release'
if (cluster.contains('staging') || cluster == 'release' || cluster.contains('testing')) {
deployCredentials = file(credentialsId: 'staging-deploy-service-creds', variable: 'GCP_CREDS')
deployProject = "kalibrr-staging"
if (cluster.contains('testing')) {
deployCredentials = file(credentialsId: 'testing-deploy-service-creds', variable: 'GCP_CREDS')
deployProject = "kalibrr-testing"
}
tagRelease = ''
stage('Scaling') {
withCredentials([
deployCredentials,
]) {
sh("gcloud auth activate-service-account --key-file=$GCP_CREDS --project=${deployProject}")
sh("gcloud container clusters get-credentials --zone=${zone} \"kb-platform-${cluster}\"")
sh("./kubernetes/scripts/scale_up_cluster.sh --cluster=\"kb-platform-${cluster}\" --zone=asia-east1-b")
sh('./kubernetes/scripts/wait_for_stable_cluster.sh true')
}
}
stage('Deploy cluster') {
withCredentials([
deployCredentials,
]) {
sshagent(['jenkins-ssh']) {
sh("kubectl config set-context \$(kubectl config current-context) --namespace=staging")
sh("kubectl set image deployment/kb-stateless-payments payments=asia.gcr.io/kalibrr-platform/payments:newest")
sh("helm upgrade kb-stateless ./kubernetes/helm/kb-stateless/charts/payments --namespace development -f ./kubernetes/helm/kb-stateless/charts/payments/values.yaml")
}
}
}
}
notify("Build Succeeded on cluster ${cluster}")
}
}Editor is loading...
Leave a Comment