背景
工作的时候做了一个agent,需要进行构建打包,上传到oss,然后分发到各个机器。
该操作跟一般的应用不同,因此无法通过已有的发布系统来进行操作,因此自己只能另外单独做一个CI/CD系统。
主要涉及以下技术:
- Jenkins (主要执行构建,打包,上传OSS)
- Ansible (执行具体的机器上面的操作,使用playbook来实现具体步骤)
构建打包
使用的是jenkins 的Pipeline来实现
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
| def GIT = params.GIT def BRANCH = params.BRANCH def WORKSPACE = '/tmp/workspace/pangu-agent' def ENV_SOURCE_FILE = "pangu-agent/pangu-agent-core/target/pangu-agent.jar" def OSS_DIR='xxx' currentBuild.displayName ="PANGU_AGENT"+'/'+BRANCH+"#"+currentBuild.number node(){ ws(WORKSPACE){ stage("拉代码"){ try{ timeout(time:2,unit:'MINUTES'){ checkout([$class : "GitSCM", branches : [[name : BRANCH]], doGenerateSubmoduleConfigurations : false, extensions : [], submoduleCfg : [], userRemoteConfigs : [[credentialsId: 'xxx', url : GIT]]]) } }catch(err){ error '拉代码出错' +err.getMessage() } } stage('构建'){ try{ sh "mvn -Dmaven.test.skip=true clean package -U -am -pl pangu-agent/pangu-agent-core" }catch(err){ error '构建失败' +err.getMessage() } }
stage('上传OSS'){ try{ def ossPath = ENV_SOURCE_FILE + " "+OSS_DIR+"/pangu-agent.jar" uploadToOSS(WORKSPACE,ENV_SOURCE_FILE,ossPath) }catch(err){ error '上传失败'+err.getMessage() } } } }
def uploadToOSS(path,filePath,ossPath){ dir(path) { if(!fileExists(filePath)){ callBackRocket('FAILURE','找不到产出物,请检查模块名是否填写正确') error '没有对应的产出物,请检查模块是否正确' } try{ sh "/opt/platform/ossutil64 --config-file /opt/platform/myConfig cp -f " + ossPath }catch(err){ callBackRocket('FAILURE','上传oss出错') error err } } }
|
上面通过传入的git地址和分支,来进行打包,然后使用机器上面的oss工具来进行产物的上传,进而完成CI操作