【持续集成】Jenkins集成阿里云OSS建立交付仓库
目录一、方案介绍1、痛点分析2、仓库选取二、操作流程1、安装说明2、配置说明3、上传方式一:Post-build actions4、上传方式二:Pipeline5、说明一、方案介绍1、痛点分析目前,部分Jenkins项目构建的流程是这样的:Jenkins构建完相应项目后,会产生对应的软件包,如JAVA项目的jar包。构建完的软件包会被移动到当前服务器上的指定目录下。其他流程需要对应软件包时,会通过
目录
一、方案介绍
1、痛点分析
目前,部分Jenkins项目构建的流程是这样的:
- Jenkins构建完相应项目后,会产生对应的软件包,如JAVA项目的jar包。
- 构建完的软件包会被移动到当前服务器上的指定目录下。
- 其他流程需要对应软件包时,会通过访问Jenkins所在服务器的具体目录来获取指定软件包。
这样处理存在几个问题:
- 存储无规范。如果有多个Jenkins服务器,就会存在多个软件包仓库。
- 单点故障。如果服务器下对应文件被干掉了,或者服务器产生问题了,其他业务流程就取不到所需项目包了。
针对这些问题,找到了一个合理的解决方案:使用交付仓库。
主流程:将当前软件包仓库的指定文件或者指定文件夹下的某些文件,上传到指定交付仓库中。
之后可以直接通过http协议下载文件。
2、仓库选取
这段时间做了一部分交付仓库的调研,其中包括云仓库,如阿里云OSS、AWS S3;自建服务器仓库,如Nexus 3。
对比之后,目前决定采用阿里云OSS对象存储做交付仓库。
采用阿里云OSS有如下优点:
- 满足要求:存储规范、非单点。
- 持久性高。支持本地冗余、同城冗余、跨区域复制做数据容灾。
- 价格低廉。
- 使用方便。有足够的中文文档,并且有工单支持。
二、操作流程
描述:使用插件Aliyun-OSS-Plugin来建立交付仓库。
Aliyun-OSS-Plugin for Jenkins的作用是:将构建后的artifact上传到OSS的指定位置上去。
优点:
- 可靠性、高可用性
- 上传、下载速度快
1、安装说明
在Jenkins中安装插件, 请到 Manage Jenkins | Advanced | Upload,上传插件(.hpi文件) 安装完毕后请重新启动Jenkins 插件位置:mvn打包后存在于target下
2、配置说明
在使用插件之前,必须先在[Manage Jenkins | Configure System | 阿里云OSS账户设置]中配置阿里云帐号的Access Key、Secret Key。
3、上传方式一:Post-build actions
在Jenkins Job的Post-build actions,用户可以设置上传Artifact到阿里云OSS。需要填写的信息是:
- Bucket名称: artifact要存放的bucket
- 要上传的artifacts: 文件之间用;隔开。支持通配符描述,比如 text/*.zip
- Object前缀设置:可以设置object key的前缀,支持Jenkins环境变量比如: "${JOB_NAME}/${BUILD_ID}/${BUILD_NUMBER}/"
- 完成后删除文件:勾选表示上传成功后会把本地文件删除。
例如一个job的名称是dingdang,用户的设置如下
- bucketName: bucket-local-2
- 要上传的artifacts: base-0.0.1-SNAPSHOT.jar
- Object前缀: ${JOB_NAME}/
那么文件下载的url为: http://bucket-local-2.oss-cn-beijing.aliyuncs.com/dingdang/base-0.0.1-SNAPSHOT.jar
4、上传方式二:Pipeline
集成jenkins pipeline,用户可以上传Artifact到阿里云OSS
例如一个job的名称是test,用户的设置如下
- Bucket名称: bucket-local-2
- 要上传的文件路径:usr/local/dingdang/src/github.com/dingdang/*/target/*.jar
- Object前缀设置:{JOB_NAME}
则在jenkins的pipeline中配置
node {
stage('upload') {
echo '开始执行upload'
bucketName = 'bucket-local-2'//bucket名称
filesPath = 'usr/local/dingdang/src/github.com/dingdang/*/target/*.jar'//文件位置 (可以以变量的方式传入tag版本,指定文件)
objectPrefix = 'test/${JOB_NAME}'//前缀
isDel = 'true'//写true,则会删除文件
step([$class: 'AliyunOSSPublisher', bucketName: bucketName,filesPath: filesPath,objectPrefix: objectPrefix,isDel: isDel])
echo 'deploy执行完毕'
}
}
pipeline项目构建的时候,就会触发上传参数。
构建过程中将会输出日志:
文件的下载方式同方式一。
三、说明
原作者:zhimin@fit2cloud.com 原code地址:https://github.com/fit2cloud/aliyun-oss-plugin
本篇code在原先的代码基础上增加了两个功能:
- 支持通过pipeline完成文件上传
- 支持文件上传后删除本地文件
优点:
- 原先的构建方式每个jenkins job都需要配置一次Post-build Actions,本篇code可以让多个job复用一条pipeline完成上传操作。
- 降低jenkins磁盘占用率,统一交付仓库。
非常感谢原作者提供的框架,若有侵权请联系我删除:2775468731@qq.com
代码地址:https://github.com/2775468731/Aliyun-OSS-Plugin-for-Jenkins
更多推荐
所有评论(0)