我们的项目是用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.在打包平台填写分支名字,保存之后自动化打包,打包成功之后就可以看到新打出的包用的是所填分支的代码。
网友评论