背景
工作的时候做了一个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操作