1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
| #使用Jenkins控制台安装Active Choices Plug-in插件,配置项目构建前的联动参数选择。 properties([ parameters([ [$class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', //简单的下来选择框 description: '选择当前jenkins所要构建的服务环境', filterLength: 1, filterable: false, name: 'Env', script: [ $class: 'GroovyScript', fallbackScript: [ classpath: [], sandbox: true, script: """ return["Could not get The environments"] """ ], script: [ classpath: [], sandbox: true, script: """ return["test","prod"] """ ] ] ], [$class: 'CascadeChoiceParameter', choiceType: 'PT_CHECKBOX', //复选框 description: '选择具体要构建的服务', name: 'JavaService', referencedParameters: 'Env', //与上面的Env值联动 script: [$class: 'GroovyScript', fallbackScript: [ classpath: [], sandbox: true, script: "return['Could not get Environment from Env Param']" ], script: [ classpath: [], sandbox: true, script: ''' if (Env.equals("test")){ return["serverA","serverB", "serverC"] } else if(Env.equals("prod")){ return["serverA","serverB", "serverC"] } ''' ] ] ], [$class: 'CascadeChoiceParameter', choiceType: 'PT_CHECKBOX', description: '选择要部署的目标服务器', name: 'TargetServer', referencedParameters: 'Env', script: [$class: 'GroovyScript', fallbackScript: [ classpath: [], sandbox: true, script: "return['Could not get Environment from Env Param']" ], script: [ classpath: [], sandbox: true, script: ''' if (Env.equals("test")){ return["192.168.94.1", "192.168.94.2", "192.168.94.3"] } else if(Env.equals("prod")){ return["192.168.111.1","192.168.111.2"] } ''' ] ] ] ]) ]) #流水线步骤 pipeline { agent any environment { my_env = 'none' } stages { stage('Service selection') { input { message "选择了环境:${params.Env} \n并将以下服务:${params.JavaService}\n部署到:${params.TargetServer}\n是否立即执行构建?" } steps{ echo "构建完成" } }
stage('Package') { agent { //此阶段的所有构建都是基于此docker环境 docker { image 'maven:3-alpine' //maven仓库挂载到服务器本地,方便后需部署,无需重复下载 args '-v /var/jenkins_home/.m2:/root/.m2' } } steps { script { for(ser in params.JavaService.tokenize(',')){ switch("${ser}"){ case "serverA": echo "package serverA" //这些操作的初始路径都是项目根路径,所以假设serverA这个子项目位于项目根目录下的server文件夹下,即"项目根路径/server/serverA”,那么打包语句如下 sh 'cd server/serverA && mvn clean package -Dmaven.test.skip=true -Dproject.type=jar -pl serverA -am' break case "serverB": echo "package serverB" sh '...' break case "serverC": echo "package serverA" sh '...' break } } } } }
stage ('Deploy') { agent none steps { script { echo "WORKSPACE:${env.WORKSPACE}" echo "Branch:${env.NODE_NAME}" } script { for(ser in params.JavaService.tokenize(',')){ switch("${ser}"){ case "serverA": echo "deploy febs-tx-manager" //此脚本下面详解,该脚本也是位于项目根路径的相对路径下。 sh "bash ./scripts/${params.Env}/deploy-serverA-${params.Env}.sh ${params.TargetServer}" break case "xxx": ... } } } } }
} }
|