def call(lib, TIDB_OPERATOR_BRANCH, CREDENTIALS_ID) {

	env.GOROOT = "/usr/local/go"
	env.GOPATH = "/go"
	env.PATH = "${env.GOROOT}/bin:${env.GOPATH}/bin:/bin:${env.PATH}:/home/jenkins/bin"

	def IMAGE_TAG
	def BACKUP_IMAGE_TAG
	def GITHASH
	def UCLOUD_OSS_URL = "http://pingcap-dev.hk.ufileos.com"
	def BUILD_URL = "git@github.com:pingcap/tidb-operator.git"
	def E2E_IMAGE = "localhost:5000/pingcap/tidb-operator-e2e:latest"
	def PROJECT_DIR = "go/src/github.com/pingcap/tidb-operator"

	catchError {
		node('k8s_centos7_build'){
			def WORKSPACE = pwd()
			dir("${PROJECT_DIR}"){
				stage('build tidb-operator binary'){
					git credentialsId: "${CREDENTIALS_ID}", url: "${BUILD_URL}", branch: "${TIDB_OPERATOR_BRANCH}"
					GITHASH = sh(returnStdout: true, script: "git rev-parse HEAD").trim()
					lib.stage_build_tidb_binary(WORKSPACE)
				}
			}
			stash excludes: "${PROJECT_DIR}/vendor/**", includes: "${PROJECT_DIR}/**", name: "tidb-operator"
		}

		node('k8s-dind') {
			def WORKSPACE = pwd()
			deleteDir()
			unstash 'tidb-operator'

			dir("${PROJECT_DIR}"){
				stage('push tidb-operator images'){
					IMAGE_TAG = "localhost:5000/pingcap/tidb-operator:${GITHASH.take(7)}"
					sh """
					cd docker
					docker build -t ${IMAGE_TAG} .
					docker push ${IMAGE_TAG}
					"""
				}

				stage('push tidb-backup images'){
					BACKUP_IMAGE_TAG = "localhost:5000/pingcap/tidb-backup:${GITHASH.take(7)}"
					sh """
					cd hack/backup
					docker build -t ${BACKUP_IMAGE_TAG} .
					docker push ${BACKUP_IMAGE_TAG}
					"""
				}

				stage('start prepare runtime environment'){
					lib.stage_prep_run_env()
				}

				stage('start run operator e2e test'){
					def SRC_FILE_CONTENT = readFile file: "test/e2e/manifests/tidb-operator-e2e.yaml"
					def DST_FILE_CONTENT = SRC_FILE_CONTENT.replaceAll("image:.*", "image: ${E2E_IMAGE}")
					DST_FILE_CONTENT = DST_FILE_CONTENT.replaceAll("value: localhost:5000/pingcap/tidb-operator:latest", "value: ${IMAGE_TAG}")
					DST_FILE_CONTENT = DST_FILE_CONTENT.replaceAll("value: localhost:5000/pingcap/tidb-backup:latest", "value: ${BACKUP_IMAGE_TAG}")
					writeFile file: 'tidb-operator-e2e-online.yaml', text: "${DST_FILE_CONTENT}"

					ansiColor('xterm') {
					sh """
					make e2e-run-tests
					"""
					}
				}
			}
		}
		currentBuild.result = "SUCCESS"
	}
	stage('Summary') {
		GITHASH = sh(returnStdout: true, script: "git rev-parse HEAD").trim()
		lib.stage_summary(successAppend: "", changelog: false, buildtype: "Pull Request", branch: TIDB_OPERATOR_BRANCH, githash: GITHASH.take(7), slack_channel: '#cloud_jenkins')
	}
}


return this
