Skip to content
sh
pipeline {
	agent any
	# parameters的定义会在开始构建时让用户进行输入,可以设置默认值,可以通过环境变量引入
	# ${params.xxx}来引入
	# parameters可以使用的数据类型很多,可以在语法生成器的Declarative Directive Generator查看
	# https://www.jenkins.io/doc/book/pipeline/syntax/#parameters 文档
    parameters  {
        string(name: 'harbor_bot_name', defaultValue: 'robot-jenkins+jenkins_bot', description: 'harbor机器人名')
        string(name: 'harbor_bot_token', defaultValue: '96aTjhHfwV0YIPuCfPsyo4duZCOSJ9uk', description: 'harbor机器人凭据')
        string(name: 'image_name', defaultValue: 'jenkins-test', description: '镜像名')
        string(name: 'harbor_address', defaultValue: 'harbor.fsl.com', description: 'harbor地址')
        string(name: 'harbor_project_name', defaultValue: 'jenkins', description: 'harbor镜像项目名')
        string(name: 'namespace', defaultValue: 'default', description: '部署到的名称空间')
        string(name: 'app_name', defaultValue: 'jenkins-test', description: '应用名称')
    }
    # key=value的键值对,可以通过 ${env.xxx}进行引用
    # https://www.jenkins.io/doc/book/pipeline/syntax/#environment
    environment {
		image_address = "${params.harbor_address}/${params.harbor_project_name}/${params.image_name}:${tag}"
    }
    # 所有的步骤都在stages中完成
    # https://www.jenkins.io/doc/book/pipeline/syntax/#stages
	stages {
	# 会在jenkins中显示,一般一个stage就是完成一个任务,stage里面的step是完成任务的具体操作
		stage("拉取代码"){
		    steps {
		        echo "开始拉取代码"
		    	checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee.com', url: 'https://gitee.com/fengsiling-66/jenkins_test.git']])
		    }
		}
		stage("打包代码"){
		    steps{
		    echo "使用maven打包代码"
            sh '/var/jenkins_home/java/apache-maven-3.8.7/bin/mvn clean package -Dmaven.test.skip=true'
		    }
		}
		stage("制作docker镜像"){
		    steps{
			sh 'env'
			echo "${env.image_address}"
		    sh "docker build -t ${env.image_address} ."
		    }
		}
		stage("推送镜像"){
		    steps{
		    echo "推送镜像到harbor"
			echo "${params.harbor_bot_name}"
			sh """
				docker login ${params.harbor_address} -u '${params.harbor_bot_name}' -p"${params.harbor_bot_token}"
				docker push ${env.image_address}
				docker rmi ${env.image_address}
				docker logout ${params.harbor_address}
			   """
		    }
		}
		stage("部署应用到k8s"){
		    steps{
				kubeconfig(credentialsId: 'mykubernetes',caCertificate: '', serverUrl: 'https://172.16.1.119:6443') {
				    sh "sed -i s#APP_NAME#${params.app_name}#g k8s.yaml"
				    sh "sed -i s#NAMESPACE#${params.namespace}#g k8s.yaml "
				    sh "sed -i s#IMAGE_ADDRESS#${env.image_address}#g k8s.yaml"
				    sh 'cat k8s.yaml'
					sh 'kubectl apply -f k8s.yaml'
                    sh 'kubectl get deploy,svc,pod -n ${namespace} --selector=app=${app_name}'
				}
		    }
		}
	}
}

在进行变量引用时不能使用单引号,需要使用双引号,不然jenkins无法替换变量