groovy 脚本案例
groovy 脚本案例
1.1 脚本案例一
经常需要根据数据库类型,数据库个数,种子文件来源等升级数据库,人工操作比较麻烦,升级数据库仅供参考
package feature
node('ecs_wuhan_docker') {
/** 参数部分:
* 这部分是自己定义的参数,根据生产线不通,需要根据情况进行修改
*/
// 定义mysql的IP地址
def mysqlSshIp=MYSQL_IP
// 定义登陆mysql时的账号
def mysqlAdminUser=MYSQL_USER
// 定义登陆mysql时的密码
def mysqlAdminPassword=MYSQL_PASS
// 定义mysql的类型
def helperDialect= "mysql"
// 定义登陆jfrog拉取文件的账号密码
def jfrogCredentials = 'ecs_read:ecs_read'
// 定义tag的名称
def tagVersion=TAG_VERSION
// 定义数据库schemaName,ENVIRONMENT_NAME是cicd模板参数传入
def schemaName = SCHEMA_NAME
def schemaNameConsole=SCHEMA_NAME
def schemaNameEcs=SCHEMA_NAME_ECS
def upgradeConsole="http://192.168.48.96:8081/artifactory/ecs2_java_prod/tags/$tagVersion/release/console/backend/metadata.zip"
def upgradeEcs="http://192.168.48.96:8081/artifactory/ecs2_java_prod/tags/$tagVersion/release/ecs/backend/metadata.zip"
def upgradeFile="http://192.168.48.96:8081/artifactory/ecs2_java_prod/tags/$tagVersion/release/upgrade/upgrade.zip"
def hotfixupgradeConsole="http://192.168.48.96:8081/artifactory/ecs2_java_dev/SNAPSHOT/$tagVersion/java-ecs2/metadata/console-metadata/metadata.zip"
def hotfixupgradeEcs="http://192.168.48.96:8081/artifactory/ecs2_java_dev/SNAPSHOT/$tagVersion/java-ecs2/metadata/ecs-metadata/metadata.zip"
def hotfixupgradeFile="http://192.168.48.96:8081/artifactory/ecs2_java_dev/SNAPSHOT/$tagVersion/java-ecs2/upgrade/upgrade.zip"
// 定义配置文件名称
def upDbConfigFile = 'application.properties'
// 定义数据库driver
def dbDriver = 'com.mysql.jdbc.Driver'
// 定义初始化的jdbc,这里不用修改
def dbUrl = "jdbc:mysql:\\/\\/127.0.0.1:3306\\/e7fssc?useUnicode=true\\&characterEncoding=UTF-8\\&useSSL=false\\&allowMultiQueries=true\\&serverTimezone=Asia\\/Shanghai"
/** 参数部分:
* 这部分是cicd平台参数数传入,一般不需要修改
*/
// 定义buildNumber,BUILD_NUMBER是jenkins默认参数,cicd模板参数导入
def buildNumber=BUILD_NUMBER
// 定义微信群通知的keyWX_KEY是cicd模板参数导入
def wxKey = WX_KEY
// 定义数据库类型
def updateType = "mysql"
// 定义proposerName,PROPOSER_NAME是cicd模板参数导入
def proposerName=CURRENT_OPERATOR_MOBILE
// 定义,cicd的地址,cicd模板参数导入
def cicdServerUrl=CICD_SERVER_URL
// 定义proposerMobile,PROPOSER_MOBILE是手机号码,cicd模板参数导入
def proposerMobile=CURRENT_OPERATOR_MOBILE
// 定义Jobname,cicd模板参数导入
def jobName=JOB_NAME
def diffOrSame = DIFF_OR_SAME
def updateFromType=UPDATE_FROM_TYPE
try {
stage('wx notice start') {
deleteDir()
}
stage('build') {
build(isWithMicro = false,helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaName,mysqlSshIp,jfrogCredentials,upgradeEcs,upgradeConsole,upgradeFile,updateType,diffOrSame,updateFromType,hotfixupgradeConsole,hotfixupgradeEcs,hotfixupgradeFile,schemaNameConsole,schemaNameEcs)
}
stage('wx notice start') {
wxNotice("'${proposerName}'升级数据库:基于'${tagVersion}'分支 升级成功!",wxKey,proposerMobile)
}
} catch (e) {
wxFailNotice(wxKey,proposerName,jobName,buildNumber,cicdServerUrl)
throw e
} finally {
}
}
def wxFailNotice(wxKey,proposerName,jobName,buildNumber,cicdServerUrl) {
def text = "【${proposerName}的${jobName}】初始化数据库失败\\n >[查看控制台](${cicdServerUrl}'/pipeline/job/consolesHTML/'${jobName}'/'${buildNumber})"
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "markdown", "markdown": { "content": "${text}", } }'"""
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "text", "text": { "mentioned_mobile_list":["18201292571"] } }'"""
}
def wxNotice(msg,wxKey,proposerMobile) {
sh """
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${wxKey}' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "${msg}",
"mentioned_mobile_list":["${proposerMobile}"]
}
}'
"""
}
def flushredisdb(productLine,environmentName,rancherAddress,rancherToken,rancherProjectId) {
sh """
rancher login ${rancherAddress} --token ${rancherToken} --skip-verify --context ${rancherProjectId}
POD=\$(rancher kubectl get pods --namespace=${productLine}| grep ${productLine}-${environmentName}|awk '{print \$1}');
rancher kubectl exec -it \$POD -c redis -n ${productLine} -- redis-cli -h 127.0.0.1 flushall
"""
}
def build(isWithMicro = false,helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaName,mysqlSshIp,jfrogCredentials,upgradeEcs,upgradeConsole,upgradeFile,updateType,diffOrSame,updateFromType,hotfixupgradeConsole,hotfixupgradeEcs,hotfixupgradeFile,schemaNameConsole,schemaNameEcs) {
stage('build java') {
if (updateType == "mysql" && diffOrSame== "same" && updateFromType == "release") {
mavenBuildProjectMysql(helperDialect, dbDriver, dbUrl, mysqlAdminUser, mysqlAdminPassword, upDbConfigFile, schemaName, mysqlSshIp, jfrogCredentials, upgradeEcs, upgradeConsole, upgradeFile)
}
if (updateType == "mysql" && diffOrSame== "same" && updateFromType == "hotfix") {
mavenBuildProjectMysql(helperDialect, dbDriver, dbUrl, mysqlAdminUser, mysqlAdminPassword, upDbConfigFile, schemaName, mysqlSshIp, jfrogCredentials, hotfixupgradeEcs, hotfixupgradeConsole, hotfixupgradeFile)
}
if (updateType == "mysql" && diffOrSame== "diff" && updateFromType == "release") {
print ("diff release")
mavenBuildProjectMysqlConsole(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameConsole,mysqlSshIp,jfrogCredentials,upgradeConsole,upgradeFile)
mavenBuildProjectMysqlEcs(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameEcs,mysqlSshIp,jfrogCredentials,upgradeEcs)
}
if (updateType == "mysql" && diffOrSame== "diff" && updateFromType == "hotfix") {
print ("diff hotfix")
mavenBuildProjectMysqlConsole(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameConsole,mysqlSshIp,jfrogCredentials,hotfixupgradeConsole,hotfixupgradeFile)
mavenBuildProjectMysqlEcs(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameEcs,mysqlSshIp,jfrogCredentials,hotfixupgradeEcs)
}
}
}
defmavenBuildProjectMysql(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaName,mysqlSshIp,jfrogCredentials,upgradeEcs,upgradeConsole,upgradeFile) {
sh """
curl -u ${jfrogCredentials} -O ${upgradeConsole}
unzip metadata.zip -d console;rm -rf metadata.zip
curl -u ${jfrogCredentials} -O ${upgradeEcs}
unzip metadata.zip -d ecs;rm -rf metadata.zip
cd ecs/;cp ../console/ecs/* ecs/
pwd;ls -l;zip metadata.zip metadata.zip -r ecs/
curl -u ${jfrogCredentials} -O ${upgradeFile};unzip upgrade.zip
cd config; mv ../metadata.zip ./
sed -i 's/url: jdbc.*/url: ${dbUrl}/g' ${upDbConfigFile}
sed -i 's/dbType=.*/dbType='${helperDialect}'/g' ${upDbConfigFile}
sed -i \"s/spring.datasource.url=.*/spring.datasource.url=jdbc:mysql:\\/\\/${mysqlSshIp}\\/${schemaName}?useUnicode=true\\&characterEncoding=UTF-8\\&useSSL=false\\&allowMultiQueries=true\\&serverTimezone=Asia\\/Shanghai/g\" ${upDbConfigFile}
sed -i 's/spring.datasource.username=.*/spring.datasource.username='${mysqlAdminUser}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.password=.*/spring.datasource.password='${mysqlAdminPassword}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.driverClassName=.*/spring.datasource.driverClassName='${dbDriver}'/g' ${upDbConfigFile}
sed -i 's/server.port=.*/server.port=8888/g' ${upDbConfigFile}
java -Xmx1024m -Xms512m -Dfile.encoding=utf-8 -jar ecs-upgrade-app.jar || echo 'skip step1'
"""
}
defmavenBuildProjectMysqlConsole(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameConsole,mysqlSshIp,jfrogCredentials,upgradeConsole,upgradeFile) {
sh """
curl -u ${jfrogCredentials} -O ${upgradeConsole}
curl -u ${jfrogCredentials} -O ${upgradeFile};unzip upgrade.zip
cd config; mv ../metadata.zip ./
sed -i 's/url: jdbc.*/url: ${dbUrl}/g' ${upDbConfigFile}
sed -i 's/dbType=.*/dbType='${helperDialect}'/g' ${upDbConfigFile}
sed -i \"s/spring.datasource.url=.*/spring.datasource.url=jdbc:mysql:\\/\\/${mysqlSshIp}\\/${schemaNameConsole}?useUnicode=true\\&characterEncoding=UTF-8\\&useSSL=false\\&allowMultiQueries=true\\&serverTimezone=Asia\\/Shanghai/g\" ${upDbConfigFile}
sed -i 's/spring.datasource.username=.*/spring.datasource.username='${mysqlAdminUser}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.password=.*/spring.datasource.password='${mysqlAdminPassword}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.driverClassName=.*/spring.datasource.driverClassName='${dbDriver}'/g' ${upDbConfigFile}
sed -i 's/server.port=.*/server.port=8888/g' ${upDbConfigFile}
java -Xmx1024m -Xms512m -Dfile.encoding=utf-8 -jar ecs-upgrade-app.jar || echo 'skip step1'
"""
}
def mavenBuildProjectMysqlEcs(helperDialect,dbDriver,dbUrl,mysqlAdminUser,mysqlAdminPassword,upDbConfigFile,schemaNameEcs,mysqlSshIp,jfrogCredentials,upgradeEcs) {
sh """
ls
cd config; curl -u ${jfrogCredentials} -O ${upgradeEcs}
sed -i 's/url: jdbc.*/url: ${dbUrl}/g' ${upDbConfigFile}
sed -i 's/dbType=.*/dbType='${helperDialect}'/g' ${upDbConfigFile}
sed -i \"s/spring.datasource.url=.*/spring.datasource.url=jdbc:mysql:\\/\\/${mysqlSshIp}\\/${schemaNameEcs}?useUnicode=true\\&characterEncoding=UTF-8\\&useSSL=false\\&allowMultiQueries=true\\&serverTimezone=Asia\\/Shanghai/g\" ${upDbConfigFile}
sed -i 's/spring.datasource.username=.*/spring.datasource.username='${mysqlAdminUser}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.password=.*/spring.datasource.password='${mysqlAdminPassword}'/g' ${upDbConfigFile}
sed -i 's/spring.datasource.driverClassName=.*/spring.datasource.driverClassName='${dbDriver}'/g' ${upDbConfigFile}
sed -i 's/server.port=.*/server.port=8888/g' ${upDbConfigFile}
java -Xmx1024m -Xms512m -Dfile.encoding=utf-8 -jar ecs-upgrade-app.jar || echo 'skip step1'
"""
}
2.1 脚本案例二
从git上创建feature分支
package common
node('ecs_wuhan_docker') {
/** 参数部分:
* 这部分是自己定义的参数,根据生产线不通,需要根据情况进行修改
*/
// 定义当前时间,根据时间创建分支
def dateStr = new Date().format('yyyyMMdd')
// 定义分支名
def featureName = "feature-${dateStr}-${ENVIRONMENT_BRANCH}"
/** 参数部分:
* 这部分是cicd平台参数数传入,一般不需要修改
*/
// 定义微信通知联系人手机号码
def proposerMobile = CURRENT_OPERATOR_MOBILE
// 定义,cicd的地址,cicd模板参数导入
def cicdServerUrl = CICD_SERVER_URL
// 定义branch,ENVIRONMENT_BRANCH是cicd模板参数传入,FeatureID,任意一段英文字符串或数字,如 1224。会生成 feature-${dateStr}-${ENVIRONMENT_BRANCH}这个分支
def branch = ENVIRONMENT_BRANCH
// 定义userName, 创建者的名字CURRENT_OPERATOR是cicd模板参数传入
def proposerName = CURRENT_OPERATOR
// 定义微信群通知的key,WX_KEY是cicd模板参数导入
def wxKey = WX_KEY
// 定义从哪个分支拉取分支,默认是dev
def branchFrom = BRANCH_FROM
// 定义Jobname,cicd模板参数导入
def jobName = JOB_NAME
// 定义buildNumber,BUILD_NUMBER是jenkins默认参数,cicd模板参数导入
def buildNumber = BUILD_NUMBER
try {
stage('check param') {
check_param(proposerName, branch)
deleteDir()
}
stage('create_branch_by_id feature') {
cloneAllProjectAll(branchFrom, proposerName)
createBranch(featureName, 'dev')
}
stage('java deploy') {
build()
}
stage('push feature') {
pushNewBranch(featureName)
deleteDir()
}
stage('wxNotice') {
wxNotice("'${proposerName}'申请构建分支: '${featureName}' 分支构建成功!相关开发可以使用", wxKey, proposerMobile)
}
}
catch (e) {
wxFailNotice(wxKey, proposerName, jobName, buildNumber, cicdServerUrl)
throw e
} finally {
deleteDir()
}
}
def wxFailNotice(wxKey, proposerName, jobName, buildNumber, cicdServerUrl) {
def text = "【${proposerName}申请构建分支构建失败\\n >[查看控制台](${cicdServerUrl}'/pipeline/job/consolesHTML/'${jobName}'/'${buildNumber})"
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "markdown", "markdown": { "content": "${text}", } }'"""
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "text", "text": { "mentioned_mobile_list":["18201292571"] } }'"""
}
def wxNotice(msg, wxKey, proposerMobile) {
sh """
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${wxKey}' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "${msg}",
"mentioned_mobile_list":["${proposerMobile}"]
}
}'
"""
}
def check_param(userName, branch) {
if (userName == 'userName') {
throw new Exception('YourName 不能为空!')
}
if (branch == 'branch') {
throw new Exception('branch 不能为空!')
}
}
def cloneAllProjectAll(branchFrom, userName) {
parallel(
"java": {
cloneJavaPlatformProject(branchFrom, userName)
},
"web": {
cloneWebPlatformProject(branchFrom, userName)
},
)
}
def cloneJavaPlatformProject(branchFrom, userName) {
stage('clone Java') {
cloneProjectBranch(['ynbase', 'inf', 'ecs2', 'ynmicro'], 'ecs-platform', branchFrom, userName)
}
}
def cloneWebPlatformProject(branchFrom, userName) {
stage('clone Web') {
parallel(
"ecs-web2": {
cloneProjectBranch(['ecs-web2'], 'ecs-platform', branchFrom, userName)
},
"ecs-console": {
cloneProjectBranch(['ecs_console'], 'ecs-platform', branchFrom, userName)
},
"yn_p1_designer": {
cloneProjectBranch(['yn_p1_designer'], 'p1', branchFrom, userName)
},
)
}
}
def isHasFeature(featureName) {
String featureCount = sh(returnStdout: true, script: "git ls-remote --heads |grep ${featureName}\$ | wc -l").trim()
return Integer.parseInt(featureCount) > 0
}
def cloneProjectBranch(projectNames, group, branch, userName) {
withCredentials([usernamePassword(credentialsId: 'ecs_git', usernameVariable: 'USER', passwordVariable: 'PASS')]) {
def encodedPass = URLEncoder.encode(PASS, "UTF-8")
try{
sh 'git config --global http.sslVerify false'
}catch (e) {
}
Map parallelMap = [:]
for (item in projectNames) {
def projectName = item
parallelMap.put(projectName, {
sh "git clone https://${USER}:${encodedPass}@192.168.48.50/${group}/${projectName}.git ${projectName}"
dir(projectName) {
sh "git config user.email ${userName}@yuanian.com"
sh "git config user.name ${userName}"
if (isHasFeature(branch)) {
sh "git checkout ${branch}"
}
}
})
}
parallel(parallelMap)
}
}
def createBranch(branchName, sourceBranch) {
fixJavaPomVersion("ECS2-${branchName}-SNAPSHOT", sourceBranch)
stage('create_branch_by_id Branch') {
Map parallelMap = [:]
for (item in getAllProjects()) {
def projectName = item
parallelMap.put(projectName, {
dir(projectName) {
sh "git checkout -b ${branchName}"
}
})
}
parallel(parallelMap)
}
}
def getJavaProjects() {
return ['ynbase', 'inf', 'ecs2', 'ynmicro']
}
def fixJavaPomVersion(version, sourceBranch) {
stage('fix Pom') {
for (item in getJavaProjects()) {
dir(item) {
if (isHasFeature(sourceBranch)) {
sh "find ./ -name pom.xml -exec sed -i 's/>.*-SNAPSHOT>${version}
3.1 脚本案例三
删除代码分支
package common
node('ecs_wuhan_docker') {
/** 参数部分:
* 这部分是自己定义的参数,根据生产线不通,需要根据情况进行修改
*/
// 定义拉取gitlab中工程的凭据。
def CredentialsId = 'ecs_git'
/** 参数部分:
* 这部分是cicd平台参数数传入,一般不需要修改
*/
// 定义微信通知联系人手机号码
def proposerMobile = CURRENT_OPERATOR_MOBILE
// 定义,cicd的地址,cicd模板参数导入
def cicdServerUrl=CICD_SERVER_URL
// 定义需要删除的分支branch,ENVIRONMENT_BRANCH是cicd模板参数传入,
def branch = BRANCH
// 定义userName, 创建者的名字CURRENT_OPERATOR是cicd模板参数传入
def proposerName = CURRENT_OPERATOR
// 定义微信群通知的key,WX_KEY是cicd模板参数导入
def wxKey = WX_KEY
// 定义Jobname,cicd模板参数导入
def jobName=JOB_NAME
// 定义buildNumber,BUILD_NUMBER是jenkins默认参数,cicd模板参数导入
def buildNumber=BUILD_NUMBER
try {
stage('check param') {
if (branch == '' || branch == 'branch') {
throw new Exception('feature 选择不能为空!')
}
if (proposerName == '' || proposerName == 'userName') {
throw new Exception('请输入你的名字!')
}
}
stage('drop branch') {
deleteDir()
cloneAllProjectAll('master', proposerName,CredentialsId)
dropBranch(branch)
wxNotice("'${proposerName}'申请删除分支: '${branch}' 分支删除成功!",wxKey,proposerMobile)
}
}
catch (e) {
wxFailNotice(wxKey,proposerName,jobName,buildNumber,cicdServerUrl)
throw e
} finally {
deleteDir()
}
}
def wxFailNotice(wxKey,proposerName,jobName,buildNumber,cicdServerUrl) {
def text = "【${proposerName}的${jobName}】删除分支删除失败\\n >[查看控制台](${cicdServerUrl}'/pipeline/job/consolesHTML/'${jobName}'/'${buildNumber})"
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "markdown", "markdown": { "content": "${text}", } }'"""
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "text", "text": { "mentioned_mobile_list":["18201292571"] } }'"""
}
def wxNotice(msg,wxKey,proposerMobile) {
sh """
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${wxKey}' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "${msg}",
"mentioned_mobile_list":["${proposerMobile}"]
}
}'
"""
}
def cloneAllProjectAll(branch, userName,CredentialsId) {
parallel(
"java": {
cloneJavaPlatformProject(branch, userName,CredentialsId)
},
"web": {
cloneWebPlatformProject(branch, userName,CredentialsId)
},
)
}
def cloneJavaPlatformProject(branch, userName,CredentialsId) {
stage('clone Java') {
cloneProjectBranch(['ynbase', 'inf', 'ecs2', 'ynmicro'], 'ecs-platform', branch, userName,CredentialsId)
}
}
def cloneWebPlatformProject(branch, userName,CredentialsId) {
stage('clone Web') {
parallel(
"ecs-web2": {
cloneProjectBranch(['ecs-web2'], 'ecs-platform', branch, userName,CredentialsId)
},
"ecs-console": {
cloneProjectBranch(['ecs_console'], 'ecs-platform', branch, userName,CredentialsId)
},
"yn_p1_designer": {
cloneProjectBranch(['yn_p1_designer'], 'p1', branch, userName,CredentialsId)
},
)
}
}
def cloneProjectBranch(projectNames, group, branch, userName,CredentialsId) {
withCredentials([usernamePassword(credentialsId: CredentialsId, usernameVariable: 'USER', passwordVariable: 'PASS')]) {
def encodedPass = URLEncoder.encode(PASS, "UTF-8")
try{
sh 'git config --global http.sslVerify false'
}catch (e) {
}
Map parallelMap = [:]
for (item in projectNames) {
def projectName = item
parallelMap.put(projectName, {
sh "git clone https://${USER}:${encodedPass}@192.168.48.50/${group}/${projectName}.git ${projectName}"
dir(projectName) {
sh "git config user.email ${userName}@yuanian.com"
sh "git config user.name ${userName}"
if (isHasFeature(branch)) {
sh "git checkout ${branch}"
}
}
})
}
parallel(parallelMap)
}
}
def dropBranch(featureName) {
stage('drop Branch') {
Map parallelMap = [:]
for (item in getAllProjects()) {
def projectName = item
parallelMap.put(projectName, {
dir(projectName) {
if (isHasFeature(featureName)) {
sh "git push origin --delete ${featureName}"
}
}
})
}
parallel(parallelMap)
}
}
def isHasFeature(featureName) {
String featureCount = sh(returnStdout: true, script: "git ls-remote|grep .*/${featureName}\$ | wc -l").trim()
return Integer.parseInt(featureCount) > 0
}
def getAllProjects() {
return ['ynbase', 'inf', 'ecs2', 'ynmicro', 'ecs-web2', 'yn_p1_designer','ecs_console']
}