自动打包上传到阿里云OSS


一、实现目标及验证标准

  • 当组件代码提交到开发分支后,组件的Jenkins Job会自动触发,将组件最新的代码打包上传到OSS开发库相应组件目录下;
  • 当组件代码提交到发布分支后,手动触发组件的Jenkins Job,将组件最新的代码打包上传到OSS发布库相应组件目录下;
  • 能够下载OSS上组件开发版本二进制文件;
  • 能够下载OSS上组件发布版本二进制文件;

以wordpress-devops-demo组件为例, 配置发布分支的持续集成和打包上传存储管理:

当组件代码提交后,手动触发组件的Jenkins Job,Jenkins Job将组件最新的代码打包上传到Nexus发布库组件相应目录下, 即如果组件的
groupid为com.fit2cloud.devops, 组件Id为f2c-ops, 版本号为0.1,则组件的上传到
oss://example-binary-repo/releases/com/fit2cloud/devops/wordpress-devops-demo/0.1/wordpress-devops-demo-0.1-bin.zip
oss://example-binary-repo/snapshots/com/fit2cloud/devops/wordpress-devops-demo/0.1-SNAPSHOT/wordpress-devops-demo-0.1-SNAPSHOT-bin.zip

二、前置要求

  • 阿里云帐号充值余额不少于100元,允许API调用,且API Key已经创建;
  • 用于存储组件二进制包的OSS Bucket已经创建好;
  • 组件代码分支已经创建;
  • Jenkins服务器上可以成功checkout下来组件代码分支
  • Jenkins服务器上已安装maven,并且mvn工作正常
  • Jenkins服务器上Python版本大于2.6

1. 给组件代码添加maven配置文件并配置组件的maven打包上传参数

下载pom.xml和assembly.xml模板

下载pom-template.xml和assembly-template.xml到组件分支代码根目录, 并改名为pom.xml和assembly.xml

cd <组件代码根目录>
wget -O pom.xml http://f2c-tools.oss-cn-hangzhou.aliyuncs.com/devops-wares/pom-template.xml
wget -O assembly.xml http://f2c-tools.oss-cn-hangzhou.aliyuncs.com/devops-wares/assembly-template.xml
替换pom.xml里的${TO_REPLACE_GROUP_ID} ${TO_REPLACE_COMPONENT_ID}, ${TO_REPLACE_COMPONENT_NAME}, ${TO_REPLACE_COMPONENT_VERSION}

2. 配置组件的groupId,artifactId,version,distributionManagement

配置pom.xml里打包上传参数

<groupId>${TO_REPLACE_GROUP_ID}</groupId>
<artifactId>${TO_REPLACE_COMPONENT_ID}</artifactId>
<packaging>pom</packaging>
<name>${TO_REPLACE_COMPONENT_NAME}</name>
<version>${TO_REPLACE_COMPONENT_VERSION}</version>

例如: 
<groupId>com.fit2cloud.devops</groupId>
<artifactId>wordpress-devops-demo</artifactId>
<packaging>pom</packaging>
<name>Wordpress DevOps Demo</name>
<version>0.1</version>

3. 配置打包格式及需要打入包的文件范围

在assembly.xml中的<excludes>部分,配置不需要打入组件包的文件的路径。
<?xml version="1.0" encoding="UTF-8"?>
<assembly
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>bin</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.basedir}</directory>
      <outputDirectory>/</outputDirectory>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <exclude>**/*.log</exclude>
        <exclude>**/${project.build.directory}/**</exclude>
      </excludes>
    </fileSet>
  </fileSets>
</assembly>

4. 把pom.xml和assembly.xml提交到代码库,如Git,SVN的远程代码库

三、给组件分支创建并配置Jenkins Job

1. 创建Jenkins Job并配置组件分支Jenkins Job名称

name: 组件名-分支名-用途

example: wordpress-devops-demo-v0.1-release

example: f2c-ops-master-dev

alt

2. 配置Source Code Management

Git -> Repositories:

如: git@github.com:xxxxxxxxxxx/wordpress-devops-demo.git

alt

3. 配置Git -> Build Triggers

  • Poll SCM: Checked

  • Scheduele: * * * * *

alt

4. 配置上传 OSS 所需参数

我们推荐使用阿里云OSS Jenkins插件来上传Artifacts到阿里云OSS。具体步骤如下:

配置 Build -> Execute Shell

  mvn package

配置 Post-build
在「Post-build actions」下面选择「上传Artifact到阿里云OSS」。需要填写的信息有:

  * Bucket名称: 阿里云OSS Bucket名称
  * 要上传的artifacts:文件之间用;隔开。支持通配符描述,比如text/*.zip。
  * Object前缀设置:设置key的前缀,可使用环境变量,如${JOB_NAME}/${BUILD_NUMBER}/

请参考下图中的例子:

alt

插件工作时会输出类似下面的日志:

Job构建日志

5. 构建Job
Job 构建后,组件最新代码上传到OSS Bucket的指定目录下

登陆阿里云到存放Build的OSS Bucket下,验证最新代码二进制包上传到OSS Bucket指定目录下。