我们的项目是用uni-app开发的,有一个主分支,不同的项目经理可以在打包平台填写配置项,使用的是一套代码,根据不同的配置项自动化打包出符合他们要求的项目。随着开发的功能越来越多,有一些项目需要单独为他们开发一些定制化的功能。开发时会单独切出来一个分支,但是自动化打包用的是主分支,那么这些定制化的项目就只能手动打包,或者先把定制化的代码合到主分支再恢复,很麻烦。这时就需要实现自动化打包时选择分支的功能了,项目经理只需要在打包平台选择了对应项目的分支,就会自动打出相应的定制化功能的包。
1.在打包平台新增选择打包分支的配置项
2.获取配置项的接口里新增打包分支字段
假设新增的打包分支字段名为packBranch,填写的分支名字为newItem,则接口返回的字段为packBranch:"newItem"
3.修改打包脚本,主要修改下载配置项这一部分的shell脚本,这里为了查看方便我省略了其他的返回参数。
修改之后的部分脚本:
stage('下载配置项'){ steps { script{ echo "获取配置项地址: ${params.CONFIG_BASE_URL}" def config_base_url="${params.CONFIG_BASE_URL}" //获取配置项 def system_config = sh returnStdout: true,script: /curl -m 20 -k --connect-timeout 10 "${config_base_url}"/ echo "获取配置内容: ${system_config}" //配置项转义 def res = getResult(system_config) //环境变量存储 env.ENV_SYSTEM_CONFIG = system_config env.PACK_BRANCH = "${res[0]}" echo config_base_url env.PACK_BRANCH withEnv(["CONFIG_BASE_URL=${config_base_url}","ENV_SYSTEM_CONFIG=${env.ENV_SYSTEM_CONFIG}"]) { def branch = "${env.PACK_BRANCH}" echo "拉取${branch}上的代码" def rev="${params.GIT_COMMIT}" def scm = devgit(rev) env.GIT_COMMIT=scm.GIT_COMMIT echo "git cmt:${scm.GIT_COMMIT}" def msg = getChanges() echo "git log msg:${msg}" }
//转对象 json字符串转对象 def getResult(rawRest){ def jsonSlpuer = new groovy.json.JsonSlurper() def obj= jsonSlpuer.parseText(rawRest) return ["${obj.data.packBranch}"] }
//切分支 拉代码 def devgit(rev){ def branch = "${env.PACK_BRANCH}" def res = checkout changelog: true, poll: true, scm: [$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'ChangelogToBranch', options: [compareRemote: "${rev}^{", compareTarget: '}']], [$class: 'CleanBeforeCheckout', deleteUntrackedNestedRepositories: true]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'xxx']]] return res }
4.在打包平台填写分支名字,保存之后自动化打包,打包成功之后就可以看到新打出的包用的是所填分支的代码。