目录

一、方案介绍

1、痛点分析

2、仓库选取

二、操作流程

1、安装说明

2、配置说明

3、上传方式一:Post-build actions

4、上传方式二:Pipeline

三、说明


一、方案介绍

1、痛点分析

目前,部分Jenkins项目构建的流程是这样的:

  1. Jenkins构建完相应项目后,会产生对应的软件包,如JAVA项目的jar包。
  2. 构建完的软件包会被移动到当前服务器上的指定目录下。
  3. 其他流程需要对应软件包时,会通过访问Jenkins所在服务器的具体目录来获取指定软件包。

这样处理存在几个问题:

  • 存储无规范。如果有多个Jenkins服务器,就会存在多个软件包仓库。
  • 单点故障。如果服务器下对应文件被干掉了,或者服务器产生问题了,其他业务流程就取不到所需项目包了。

针对这些问题,找到了一个合理的解决方案:使用交付仓库。

主流程:将当前软件包仓库的指定文件或者指定文件夹下的某些文件,上传到指定交付仓库中。

之后可以直接通过http协议下载文件。

2、仓库选取

这段时间做了一部分交付仓库的调研,其中包括云仓库,如阿里云OSS、AWS S3;自建服务器仓库,如Nexus 3。

对比之后,目前决定采用阿里云OSS对象存储做交付仓库。

采用阿里云OSS有如下优点:

  • 满足要求:存储规范、非单点。
  • 持久性高。支持本地冗余、同城冗余、跨区域复制做数据容灾。
  • 价格低廉。
  • 使用方便。有足够的中文文档,并且有工单支持。

二、操作流程

描述:使用插件Aliyun-OSS-Plugin来建立交付仓库。

Aliyun-OSS-Plugin for Jenkins的作用是:将构建后的artifact上传到OSS的指定位置上去。

优点:

  1. 可靠性、高可用性
  2. 上传、下载速度快

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。需要填写的信息是:

  1. Bucket名称: artifact要存放的bucket
  2. 要上传的artifacts: 文件之间用;隔开。支持通配符描述,比如 text/*.zip
  3. Object前缀设置:可以设置object key的前缀,支持Jenkins环境变量比如: "${JOB_NAME}/${BUILD_ID}/${BUILD_NUMBER}/"
  4. 完成后删除文件:勾选表示上传成功后会把本地文件删除。

例如一个job的名称是dingdang,用户的设置如下

  1. bucketName: bucket-local-2
  2. 要上传的artifacts: base-0.0.1-SNAPSHOT.jar
  3. 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,用户的设置如下

  1. Bucket名称: bucket-local-2
  2. 要上传的文件路径:usr/local/dingdang/src/github.com/dingdang/*/target/*.jar
  3. 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在原先的代码基础上增加了两个功能:

  1. 支持通过pipeline完成文件上传
  2. 支持文件上传后删除本地文件

优点:

  1. 原先的构建方式每个jenkins job都需要配置一次Post-build Actions,本篇code可以让多个job复用一条pipeline完成上传操作。
  2. 降低jenkins磁盘占用率,统一交付仓库。

非常感谢原作者提供的框架,若有侵权请联系我删除:2775468731@qq.com

代码地址:https://github.com/2775468731/Aliyun-OSS-Plugin-for-Jenkins

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐