需求:
-
代码一致不做当前发版,因为我的环境比较多,所以需要根据项目的环境做区分和判断,才有了入库之说。一般的需求可以使用GIT_PREVIOUS_SUCCESSFUL_COMMIT和GIT_COMMIT做判断即可。
-
php构建判断package.json文件是否发生变化(是否执行npm install),因为如果每次都执行npm install构建时间很长浪费时间,所以有了判断package是否发生变化一说。
-
总结:我们最终的目的都是节约等待时间
- 安装插件database , database-mysql
- jenkins配置中心添加mysql信息
- 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
}
}
}
}
}
}
}
- 创建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);
-
jenkins测试
代码无变化就直接退出
-
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}"
}
}