jenkins Pipeline接入mysql 、php构建判断package.json文件是否发生变化

需求:

  • 代码一致不做当前发版,因为我的环境比较多,所以需要根据项目的环境做区分和判断,才有了入库之说。一般的需求可以使用GIT_PREVIOUS_SUCCESSFUL_COMMIT和GIT_COMMIT做判断即可。

  • php构建判断package.json文件是否发生变化(是否执行npm install),因为如果每次都执行npm install构建时间很长浪费时间,所以有了判断package是否发生变化一说。

  • 总结:我们最终的目的都是节约等待时间

  1. 安装插件database , database-mysql
  2. jenkins配置中心添加mysql信息
    在这里插入图片描述
  3. Pipeline内容
pipeline {
    
    
	agent any

	options {
    
    
		buildDiscarder logRotator(
			artifactDaysToKeepStr: '', 
			artifactNumToKeepStr: '', 
			daysToKeepStr: '10', 
			numToKeepStr: '10'
			)
	}

	parameters {
    
    
        
        choice( 
        	name: 'PENV',
        	choices: [
        		'test1',
        		'test2'

        	], 
        	description: '选择发布环境'
        	)
        	booleanParam(name: 'force', defaultValue: false, description: '代码重复强制发版')
    stages {
    
    
		stage('git') {
    
    
			steps {
    
    
				script {
    
    
					def gitCommit = env.GIT_COMMIT
					def xiangmu_name = env.JOB_BASE_NAME
					//mysql接入
	                getDatabaseConnection(type: 'GLOBAL') {
    
    
						def sqlString="select commit_seccec from jenkins_commit.jenkins_jilu where xm_name = ? and env = ?"
                        def params=[commitInfo.xiangmu_name,PENV]
                        def rest_null = sql sql:sqlString,parameters:params
						if (rest_null.size() == 0){
    
    
						  def sqlString2="insert  into  jenkins_commit.jenkins_jilu(xm_name,env,commit_seccec)   values(?,?,?)"
                          def params2=[commitInfo.xiangmu_name,PENV,commitInfo.gitCommit]
						  sql sql:sqlString2,parameters:params2
						  println("mysql插入数据")
						}
						if (rest_null.size() >= 1) {
    
    
							   def Map rest = rest_null.get(0)
							    if (rest.get("commit_seccec") == commitInfo.gitCommit && force == "false"){
    
    
                        currentBuild.description = "k8s环境: ${
      
      PENV} 构建人:${
      
      buildInfo.buildUser} 分支: ${
      
      GIT_BRANCH} 构建失败: 代码重复不发版"
							   println("代码没有变化不做发版")
                               error "上一个版本和现在正在发的版本一致,不做发版"
							   }
							   
	
						}
				
					}
				}
				}
	}
	  //入库放在最后面,应为成功才能入库
	   stage("commit入库"){
    
    
             steps {
    
    
                  script{
    
    
                        getDatabaseConnection(type: 'GLOBAL') {
    
    
				        def sqlString3="update jenkins_commit.jenkins_jilu set commit_seccec=?    where xm_name=? and env=?;"
                        def params3=[gitCommit,xiangmu_name,PENV]
                        sql sql:sqlString3,parameters:params3
				  }
				  }
			 }
		}
}
}
}
  1. 创建mysql的库,表
create database  jenkins_commit;
create  table  jenkins_jilu(xm_name varchar(100) not null,env   varchar(100)  not null,commit_seccec varchar(100) not  null);
  1. jenkins测试
    代码无变化就直接退出
    在这里插入图片描述
    在这里插入图片描述

  2. php安装包,判断package.json文件是否发生变化及执行npm install

         //构建
        	steps {
    
    
            	script {
    
    
					       
      		                sh "npm config set registry http://registry.npm.taobao.org/"
      		                sh "if [ -f a.txt ];then if [ `cat a.txt` != `md5sum  package.json  |cut  -d ' ' -f1` ];then npm install; md5sum  package.json  |cut  -d ' ' -f1 >a.txt ; fi;else echo 'asdfc' > a.txt ;npm install; md5sum  package.json  |cut  -d ' ' -f1 >a.txt;fi"
      		                sh "npm run build:${
    
    ACTIVE}"
					

        		}	
			}

猜你喜欢

转载自blog.csdn.net/weixin_43606975/article/details/128314263