IOTXING

记录技术学习之路

0%

简易CI-CD (1)

背景

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