Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 8

#!

groovy
/*
CI/CD����˵��(��ѡ����):
- dev
- hotfix
- qa
- qa2
- qa3
- qa4
- autom
- loadtest
- beta
- alpha
- qa-beta
- qa-beta-prod
- hotfix-beta
- hotfix-beta-prod

���²����jenkins�л�ȡ
- deploy_env: ����
𻷾�
- git_address: git��ַ
- git_branch: git��֧ /tag, ����ӳ�䵽 docker�����ǩ֮ � � , ��"/"�滻 Ϊ"_"
- son_module: ��ģ��, ǰ����ĿҲ�����ģ��

���˵��:
- gradle���˵��:
- ʹ��jdk14�Ļ���: �‫ ֮� � �ڹ‬ǰ�滻��Ŀ�����е�JAVA_HOMEĿ¼��������Ŀ��warehouse-
serviceʹ��Ĭ�ϵ�jdk8����
- gradle���: �‫ � � �ڹ‬ʱ, ��"/usr/local/src/gradle-6.8.1-bin.zip" ��������ĿĿ¼��,
Ȼ���ɴ����й����������������Ŀ��warehouse-serviceʹ��mvn���
*/

//k8s_file="/export/script/erp-deploy/k8s-file"
k8s_file="/export/script/erp-deploy/k8s-file"
mvn = "/export/server/maven/bin/mvn"
gradle_zip = "/usr/local/src/gradle-6.8.1-bin.zip"
jdk_14_home="/usr/local/jdk-14.0.2"

def get_module_info(){
// module_map: Ĭ��Ϊjava��Ŀ��mvn���ʽ
def module_map = [
"hk_module": ["channel-service","channel-order-backend","channel-product-
backend","tracking-web","survey-web","translation"],
"gradle_module": ["udesk-message-service","udesk-task-service","udesk-
flowable-service"],
"node_module": ["srm-web","tracking-web","survey-web"]
]
// �ж��Ƿ�����‫�۽ڵ‬, Ĭ�����‫�������(� � � � �ڽ ڵ‬м����ж�)
hk_module = module_map.get('hk_module')
//is_hk = "${hk_module}".contains("${son_module}")
is_hk = "false" // ����Ĭ��ֵ, it��groovyĬ�ϵ����
hk_module.each{
if (it == "$son_module"){
is_hk = "true"
}
}

// �ж��Ƿ�Ϊnode��Ŀ
node_module = module_map.get('node_module')
//is_node = "${node_module}".contains("${son_module}")
is_node = "false"
node_module.each{
if (it == "$son_module"){
is_node = "true"
}
}

// �ж��Ƿ�gradle���, Ĭ��Ϊmvn���
gradle_module = module_map.get('gradle_module')
//is_gradle = "${gradle_module}".contains("${son_module}")
is_gradle = "false"
gradle_module.each{
if (it == "$son_module"){
is_gradle = "true"
}
}

return [is_hk,is_node,is_gradle]
}

def get_user(){
// �ж��û�
wrap([$class: 'BuildUser']) {
start_user = env.BUILD_USER_ID
}
// ��null��ֵ���
ж�, д��� �‫���ع‬
if (start_user == null){
start_user = "adam-he"

return start_user
}

return start_user
// return "adam-he"
}

def get_env(){
if ("${params.deploy_env}" == "loadtest"){
error "loadtest �‫���ֲ�� ֧�ݲ‬
, ��
�֪�Ϥ"
}

start_user = "${get_user()}"

if ("${start_user}" == "erp-dev"){
if ("${params.deploy_env}" != "dev") {
error "erp-dev �û���ǰֻ�ܹ���dev����, �������ϵ QA ͬ��"
}
}

switch("${params.deploy_env}") {
case "dev":
case "hotfix":
case "qa":
case "qa2":
case "qa3":
case "qa4":
case "qa5":
case "autom":
case "loadtest":
docker_registry = "docker-registry.starlinke.tech"
docker_group = "erp" + "-" + "${params.deploy_env}"
namespace = "${params.deploy_env}"
break
case "qa-beta":
case "qa-beta-prod":
// ��ʼֵ
docker_registry = "docker-registry.starlinke.tech"
docker_group = "erp-qa"
namespace = "erp-qa"
break
case "hotfix-beta":
case "hotfix-beta-prod":
// ��ʼֵ
docker_registry = "docker-registry.starlinke.tech"
docker_group = "erp-hotfix"
namespace = "erp-hotfix"
break
case "alpha":
if ("${get_module_info()[0]}" == "true" ){
docker_registry = "registry.cn-hongkong.aliyuncs.com"
}else{
docker_registry = "registry.cn-shenzhen.aliyuncs.com"
}
docker_group = "erp-alpha"
namespace = "erp-alpha"
break
default:
error "��������������ȷ, �˳�ι���"
}
return [docker_registry, docker_group, namespace]
}

// �û���
�֧ "/"�Ĵ���, �滻 Ϊ"_"
def docker_version(){
String docker_version_tmp = "${params.git_branch}".replace("/", "_")
String docker_version = "${docker_version_tmp}".replaceAll("\\s","") //
ɾ��ǰ��ո�
return docker_version
}

// ������ȴ��‫�����ڼ‬汾 ʱ���豣�治 һ��


def get_version_time(){
String time1 = new Date().format("yyyyMMdd");
String time2 = new Date().format("HHmm");
return time1 + "T" + time2;
}

// ��ֹ������ȴ��‫���(�ڼ‬й���)�Ծ������Ⱦ
def get_image_tag(){
docker_registry = "${get_env()[0]}"
docker_group = "${get_env()[1]}"
version_time = "${get_version_time()}"

if ("${params.deploy_env}" == "qa-beta" || "${params.deploy_env}" == "qa-beta-


prod" || "${params.deploy_env}" == "hotfix-beta" || "${params.deploy_env}" ==
"hotfix-beta-prod"){
docker_image = "${docker_registry}/${docker_group}/${son_module}" + ":" +
"${docker_version()}" + "-" + "${version_time}"
return [docker_image,version_time]
}
docker_image = "${docker_registry}/${docker_group}/${son_module}" + ":" + "$
{docker_version()}"
return [docker_image,version_time]

pipeline{
agent any
environment{
docker_registry = "${get_env()[0]}"
docker_group = "${get_env()[1]}"
namespace = "${get_env()[2]}"
image_tag = "${get_image_tag()[0]}"
version_time = "${get_image_tag()[1]}" // ȫ��ʱ��Ψһ��
is_hk = "${get_module_info()[0]}"
is_node = "${get_module_info()[1]}"
is_gradle = "${get_module_info()[2]}"
}
options{
timestamps() // ��ӡ����ʱ��ϵͳʱ��
buildDiscarder(logRotator(numToKeepStr: '10')) //
���ֹ�����������
timeout(time: 48, unit: 'HOURS')
ͬ // disableConcurrentBuilds() // �������й�����һ
ͬ ��job
}
stages{
stage('�����ȡ'){
steps{
script{
/*
- qa-beta,qa-beta-prod,hotfix-beta,hotfix-beta-
prod����ʱ��Ҫ�ϲ�Զ��master����ǰ������ �֧
- checkout: ָ����ʱʱ��30min
- withCredentials�ο�: http://www.mydlq.club/article/82/
*/
// ��ȡԶ�̷��֧ , ������jenkins�����֧�����
withCredentials([usernamePassword(credentialsId:
'gitlab_account', passwordVariable: 'gitlab_password', usernameVariable:
'gitlab_username')]) {
sh """
echo "���ι������: ${params.deploy_env}, ���ι����� �֧ : $
{params.git_branch}"
echo "�����û�: ${get_user()}"
git init
git config --local credential.helper "!p() { echo
username=\\$gitlab_username; echo password=\\$gitlab_password; }; p"
git ls-remote $git_address | awk '{print \$2}' |grep
'refs/heads' | awk -F'refs/heads/' '{print \$2}' | awk '{print "Զ�̷� �֧ : " \$0}'
git ls-remote $git_address | awk '{print \$2}' |grep
'refs/tags' | awk -F'refs/tags/' '{print \$2}' | awk '{print "Զ��tag: " \$0}'
"""
}
// �ȡ���֧
try{
checkout changelog: false, poll: false, scm: [$class:
'GitSCM', branches: [[name: "${params.git_branch}"]],
doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CloneOption',
noTags: false, reference: '', shallow: false, timeout: 30]], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'gitlab_account', url: "${git_address}"]]]
if ("${params.deploy_env}" == "qa-beta" || "$
{params.deploy_env}" == "qa-beta-prod" || "${params.deploy_env}" == "hotfix-beta"
|| "${params.deploy_env}" == "hotfix-beta-prod"){
// Զ��master�ϲ�����ǰ���֧
withCredentials([usernamePassword(credentialsId:
'gitlab_account', passwordVariable: 'gitlab_password', usernameVariable:
'gitlab_username')]) {
sh """
echo "Զ��master�ϲ�����ǰ��
�֧ "
git config --local credential.helper "!p() { echo
username=\\$gitlab_username; echo password=\\$gitlab_password; }; p"
git pull origin ${params.git_branch}
"""
}
}
}catch(Exception e){
error '��֧��� д����, ����'
}
}
}
}
stage('�������'){
steps{
script{
if ("${is_node}" == "true"){
// node���
sh """
if [ "${son_module}" = "srm-web" ];then
source /root/.bashrc && nvm use 12.14.0 && npm
install --registry=https://registry.npm.taobao.org && npm run build
ls -al
else
source /root/.bashrc && nvm use 10.15.3 && yarn
install && yarn build:prod
ls -al
fi
"""
}else if ("${is_gradle}" == "true"){
// gradle���
sh """
sed -i "2iJAVA_HOME=${jdk_14_home}" gradlew
sed -i "s#distributionUrl.*#distributionUrl=file:$
{gradle_zip}#g" gradle/wrapper/gradle-wrapper.properties
chmod +x ./gradlew
./gradlew :${son_module}:clean
./gradlew :${son_module}:starlink_bootJar
"""
}else{
// mvn���
sh """
rm -rf .mvn
if [ "${son_module}" = "gateway" -o "${son_module}" =
"eureka" -o "${son_module}" = "xxl-job-manager" -o "${son_module}" = "srm-gateway-
service" -o "${son_module}" = "erp-gateway-new" ];then
rm -rf "${son_module}"
${mvn} -U clean package -Dmaven.test.skip=true
else
${mvn} -U clean package -pl ${son_module} -am -
Dmaven.test.skip=true
fi
"""
}
}
}
}
stage('������'){
steps{
script{
if ("${is_node}" == "true"){
// node������, Dockerfile����Ŀ��Ŀ¼��
sh """
docker build . -t "${image_tag}"
docker push "${image_tag}"
"""
} else if("${is_gradle}" == "true"){
// java��Ŀ��gradle���
// cp /export/monitor/jmx/* ${son_module}/build/docker/
sh """
cd ${son_module}/build/docker && docker build . -t "$
{image_tag}" && docker push "${image_tag}"
"""
}else{
// java��Ŀ��mvn���ʽ
//cp /export/monitor/jmx/* ${son_module}/target/docker/
��ģ��Ӧ��
sh """
if [ "${son_module}" = "gateway" -o "${son_module}" =
"eureka" -o "${son_module}" = "xxl-job-manager" -o "${son_module}" = "srm-gateway-
service" -o "${son_module}" = "erp-gateway-new" ];then
mkdir ${son_module} && mv target ${son_module}/
fi
cd ${son_module}/target/docker && docker build . -t "$
{image_tag}" && docker push "${image_tag}"
"""
}
}
}
}
stage('k8s����'){
steps{
script{
// �˴�"&&"�Ƿ�Ӧ��Ϊ"||", ��ʵ��"&&"��Ч, ���"=="��������ϵʹ��"||",
���"!="����ϵʹ��"&&"
if ("${params.deploy_env}" != "qa-beta" && "$
{params.deploy_env}" != "qa-beta-prod" && "${params.deploy_env}" != "hotfix-beta"
&& "${params.deploy_env}" != "hotfix-beta-prod"){
// ������qa��hotfix����ʱ, ͬʱҲ����autom
if ("${params.deploy_env}" == "hotfix" || "$
{params.deploy_env}" == "qa"){
sh """
echo "������qa��hotfix����ʱ, ͬʱҲ����autom"
source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env
"autom" --name ${son_module} --namespace "autom" --update_image "${image_tag}"
"""
}
sh """
source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env $
{params.deploy_env} --name ${son_module} --namespace ${namespace} --update_image "$
{image_tag}"
"""
}else{
if ("${params.deploy_env}" == "qa-beta" || "$
{params.deploy_env}" == "qa-beta-prod"){
//qa����
sh """
source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env
"qa" --name ${son_module} --namespace "qa" --update_image "${image_tag}"
"""
current_env = "qa"
}else{
// hotfix����
sh """
source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env
"hotfix" --name ${son_module} --namespace "hotfix" --update_image "${image_tag}"
"""
current_env = "hotfix"
}
// �ĸ�������鳤����beta����
try{
input message: "ȷ�� ${current_env} ����������
󲢲��� beta
����?", ok: 'ȷ��', submitter: "adam-he, rentao, zengxianwei, zhourong, hechunyan,
simayangyang,jessie-tang, fantianjun, hegeng, zhaopeng"
}catch(Exception e){
error "�� ${current_env} �������� beta ����ʱ�˹��ж�"
}
// beta����
if ("${is_hk}" == "true") {
docker_registry1 = "registry.cn-hongkong.aliyuncs.com"
}else{
docker_registry1 = "registry.cn-shenzhen.aliyuncs.com"
}

beta_image_tag = "${docker_registry1}/erp-beta/$
{son_module}" + ":" + "${docker_version()}" + "-" + "${version_time}"
prod_image_tag = "${docker_registry1}/erp-prod/$
{son_module}" + ":" + "${docker_version()}" + "-" + "${version_time}"

sh """
docker tag "${image_tag}" "${beta_image_tag}"
docker push "${beta_image_tag}"

source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env
"beta" --name ${son_module} --namespace "erp-beta" --update_image "$
{beta_image_tag}"
"""

// �ж��Ƿ�prod����
if ("${params.deploy_env}" == "qa-beta" || "$
{params.deploy_env}" == "hotfix-beta"){
echo "${params.deploy_env} ��̲������, ���ι�������"
}else{
try{
input message: 'ȷ�� beta ����������
󲢲� prod ��� ?',
ok: 'ȷ��', submitter: "adam-he, rentao, zengxianwei, zhourong, hechunyan,
simayangyang, jessie-tang, fantianjun, hegeng, zhaopeng"
}catch(Exception e){
error '�‫ ���ڲ‬prod �������˹��ж�'
}
// prod����
sh """
docker tag "${beta_image_tag}" "${prod_image_tag}"
docker push "${prod_image_tag}"

source /usr/local/py3/bin/activate
python -u ${k8s_file}/jenkins_main.py deploy --env
"prod" --name ${son_module} --namespace "erp-prod" --update_image "$
{prod_image_tag}"
"""
}
}
}
}
}
}
}

You might also like