Jenkinsfile 4.74 KB
#!groovy
pipeline {
    agent { label 'master' }

    parameters {
		string(name:'callBack', defaultValue: 'noNeedCallBack', description: '回调服务地址')
		choice(name:'clusterId',choices:'aws\nyoho-media\nyoho-ops\nyoho-web\nyoho-web-gray', description: '集群的信息')
		string(name:'projectName', defaultValue: 'yoho-now', description: 'GITLAB应用名称')
		string(name:'projectGitGroup', defaultValue: 'YOHONow', description: 'GITLAB所在的组')
		string(name:'deployName', defaultValue: 'java-yoho-now', description: '应用名称')
		string(name:'branch', defaultValue: 'master', description: 'git分支名称')
		string(name:'userMail', defaultValue: 'jimi.ji@yoho.cn', description: '触发的人员名单')
		choice(name:'nodeEnv',choices:'yoho-gray\nyoho-online\n', description: '选择环境')
		string(name:'imageSource', defaultValue: 'yoho-ops', description: '镜像存储的仓库')
    }
	
    environment{
        CRED_ID='2cb1761b-b258-4e3b-843f-8f0dab16d770'
        QA_EMAIL='jimi.ji@yoho.cn'
		DOCKER_BUILD_GIT='git@git.yoho.cn:test/docker-shell.git'	
    }
	
	//保持构建的最大个数
    options {
        buildDiscarder(logRotator(numToKeepStr: '50')) 
    }
	
    //pipeline的各个阶段场景
    stages {
        stage('download package script and check params') {
            steps {
				echo "starting triger callBack ${params.callBack}......"
				echo "starting triger clusterId ${params.clusterId}......"
				echo "starting triger projectName ${params.projectName}......"
				echo "starting triger projectGitGroup ${params.projectGitGroup}......"
				echo "starting triger deployName ${params.deployName}......"
				echo "starting triger branch ${params.branch}......"
				echo "starting triger nodeEnv ${params.nodeEnv}......"
				echo "starting triger userMail ${params.userMail}......"
				echo "starting triger imageSource ${params.imageSource}......"
				git credentialsId:CRED_ID, url:DOCKER_BUILD_GIT
				script {
					sh "chmod +x ${env.WORKSPACE}/java-new/packageDockerImage.sh ${env.WORKSPACE}/java-new/expectPackage.exp"
					if(params.ticketID==''){
						error 'no ticketID'
					}
				  	if(params.projectName==''){
						error 'no projectName'
					}
				  	if(params.projectGitGroup==''){
						error 'no projectGitGroup'
					}
				  	if(params.deployName==''){
						error 'no deployName'
					}
				  	if(params.nodeEnv==''){
						error 'no nodeEnv'
					}
					if(params.branch==''){
						error 'no branch'
					}
				  	if(params.imageSource==''){
						error 'no imageSource'
					}
				}
            }
        }
		
		stage('build base package to source deploy-target ') {
			steps{
				echo "starting to build images"
				script {
					sh "sh ${env.WORKSPACE}/java-new/packageDockerImage.sh -g ${params.projectGitGroup} -b ${params.branch} -a ${params.projectName} -s ${params.nodeEnv} -w ${env.WORKSPACE}"
				}
				echo "end to build images"
			}
		}
		
		
		
		stage('buid && push images to ccs registry') {
			steps{
				echo "starting to push images"
				script {
					def date = new Date()
					def formattedDate = date.format("yyyMMddHHMMSS")
					def version="${formattedDate}-${BUILD_NUMBER}"
					sh "docker build -t ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:${version}  ${env.WORKSPACE}/${params.projectName}"
					sh "docker push ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:${version}"
					echo "ending build push ${params.deployName}......"
					sh "docker tag  ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:${version} ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:latest"
					sh "docker push ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:latest"
					echo "begin send build the deploy job"
					if(params.callBack!='noNeedDeploy'){
						build job: 'Docker-Image-Deplopy', parameters: [
						string(name: 'callBack', value: "noNeedCallBack"), 
						string(name: 'clusterId', value: "${params.clusterId}"), 
						string(name: 'serviceName', value: "${params.deployName}"), 
						string(name: 'containerName', value: "${params.deployName}"), 
						string(name: 'imageInfo', value: "${params.imageSource}/${params.deployName}:${version}"), string(name: 'deployEnv', value: 'qcloud')]
					}
				}
				echo "end to push images"
			}
		}
    }

	post {
		always {
			script {
				echo "Pipeline is done,begin send mail"
				mail to: QA_EMAIL,
				subject: "PineLine '${JOB_NAME}' (${BUILD_NUMBER}),构建结果: ${currentBuild.currentResult}",
				body: "构建的内容为:${params.projectName},提交人员:${params.userMail}"
				if(params.callBack!='noNeedCallBack'){
					sh "curl '${params.callBack}&status=${currentBuild.currentResult}&jobID=${JOB_NAME},${BUILD_NUMBER}'"
				}
				deleteDir() /*  clean up our workspace */
			}
		}
	}
}