def obtainGeneralJvmArgs() {
def jvm_args = '-Xms2048m -Xmx2048m'
jvm_args = jvm_args + ' --add-opens java.base/java.lang=ALL-UNNAMED'
jvm_args = jvm_args + ' --add-opens java.base/java.util=ALL-UNNAMED'
jvm_args = jvm_args + ' --add-opens java.base/java.nio=ALL-UNNAMED'
jvm_args = jvm_args + ' --add-exports java.base/jdk.internal.ref=ALL-UNNAMED'
return jvm_args;
}
def jvm_args = obtainGeneralJvmArgs()
pipeline {
agent {
node {
label 'back_slave'
}
}
environment {
repository = 'foo.dkr.ecr.us-west-1.amazonaws.com'
image = 'foo.dkr.ecr.us-west-1.amazonaws.com/bar'
ssl_key = '/path/of/key.pem'
jvm_opt = "${jvm_args}"
node_ip_test_a = '192.168.0.1'
node_user_test_a = 'user_test_a'
node_ip_prod_a = '192.168.0.2'
node_user_prod_a = 'user_prod_a'
node_ip_prod_b = '192.168.0.3'
node_user_prod_b = 'user_prod_b'
}
parameters {
gitParameter(
name: 'BRANCH',
type: 'PT_BRANCH',
defaultValue: 'develop',
selectedValue: 'DEFAULT',
sortMode: 'DESCENDING_SMART',
branchFilter: 'origin/(.*)',
tagFilter: 'origin/(.*)',
description: 'git branch',
)
}
stages {
stage('checkout') {
steps {
echo "git pull latest code...${params.BRANCH}"
checkout([
$class: 'GitSCM',
branches: [[name: "${params.BRANCH}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[
url: 'http://git.github.net/tts/hello.git',
credentialsId: 'b6af3832-8e72-4cad-b14d-6f3b25d43b3c'
]]
])
}
}
stage('build') {
steps {
echo "maven & docker build ..."
sh '''
export JAVA_HOME=/data/jdk-11;
mvn clean -U package -Dmaven.test.skip=true;
aws ecr get-login-password --region us-west-1 | docker login --username AWS --password-stdin ${repository};
docker build . -t ${image}:$DOCKER_TAG;
docker push ${image}:${DOCKER_TAG};
'''
}
}
stage('deploy - dev') {
when {
environment name: 'TARGET_ENV', value: 'dev'
}
steps {
echo "No environment [dev] ..."
}
}
stage('deploy - test') {
when {
environment name: 'TARGET_ENV', value: 'test'
}
failFast true
parallel {
stage('deploy server a') {
steps {
echo "deploy server ${node_ip_test_a}..."
sh '''
ssh -i ${ssl_key} ${node_user_test_a}@${node_ip_test_a} "
aws ecr get-login-password --region us-west-1 | sudo docker login --username AWS --password-stdin ${repository};
sudo docker pull ${image}:${DOCKER_TAG};
sudo docker rm -f bar;
sudo docker run --network crawler -d -p 9000:9000 \
-e JVM_OPT=\\"${jvm_opt}\\" \
-v /data/log/java/bar/:/data/log/java/bar/ \
-v /data/bar/app.properties:/data/bar/app.properties \
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro \
--name bar ${image}:${DOCKER_TAG};
"
'''
}
}
}
}
stage('deploy - prod') {
when {
environment name: 'TARGET_ENV', value: 'prod'
}
failFast true
parallel {
stage('deploy server a') {
steps {
echo "deploy server ${node_ip_prod_a}..."
sh '''
ssh -i ${ssl_key} ${node_user_prod_a}@${node_ip_prod_a} "
aws ecr get-login-password --region us-west-1 | sudo docker login --username AWS --password-stdin ${repository};
sudo docker pull ${image}:${DOCKER_TAG};
sudo docker rm -f bar;
sudo docker run --network crawler -d -p 9000:9000 \
-e JVM_OPT=\\"${jvm_opt}\\" \
-v /data/log/java/bar/:/data/log/java/bar/ \
-v /data/bar/app.properties:/data/bar/app.properties \
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro \
--name bar ${image}:${DOCKER_TAG};
"
'''
}
}
stage('deploy server b') {
steps {
echo "deploy server ${node_ip_prod_b}..."
sh '''
ssh -i ${ssl_key} ${node_user_prod_b}@${node_ip_prod_b} "
aws ecr get-login-password --region us-west-1 | sudo docker login --username AWS --password-stdin ${repository};
sudo docker pull ${image}:${DOCKER_TAG};
sudo docker rm -f bar;
sudo docker run --network crawler -d -p 9000:9000 \
-e JVM_OPT=\\"${jvm_opt}\\" \
-v /data/log/java/bar/:/data/log/java/bar/ \
-v /data/bar/app.properties:/data/bar/app.properties \
-v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro \
--name bar ${image}:${DOCKER_TAG};
"
'''
}
}
}
}
}
post {
success {
echo 'CI/CD job execution succeed.'
}
failure {
echo 'CI/CD job execution failed.'
}
}
}