技术

简易CI-CD (1)

背景

工作的时候做了一个agent,需要进行构建打包,上传到oss,然后分发到各个机器。 该操作跟一般的应用不同,因此无法通过已有的发布系统来进行操作,因此自己只能另外单独做一个CI/CD系统。 主要涉及以下技术:

  • Jenkins (主要执行构建,打包,上传OSS)
  • Ansible (执行具体的机器上面的操作,使用playbook来实现具体步骤)

构建打包

使用的是jenkins 的Pipeline来实现

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操作