
# 上传软件包到软件发布库
上传的软件包相关限制，请参考制品仓库服务的[约束与限制](https://support.huaweicloud.com/productdesc-cloudartifact/cloudartifact_07_0002.html)。
- 仅支持上传单个文件、多个文件，不支持上传文件夹、自动创建路径。 例如："a"目录下有"aa"文件和"b"目录，"b"目录下有"bb"文件，构建包路径配置为"a/\*\*"。
  即递归扫描"a"目录下所有文件，两个文件是同一个目录下，"aa"、"bb"两个文件将会上传到同一个目录下，系统不会在软件发布库里自动创建"b"目录。
  
- 如果用户有上传文件夹的需要，建议在"上传软件包到软件发布库"构建步骤之前，将待上传的文件夹打包为单文件后再上传。可以通过现有构建步骤执行打包命令，也可以新增"执行shell命令"构建步骤执行打包命令。
- 如果用户需要查看软件包的迭代版本，可在"上传软件包到软件发布库"步骤前增加[使用shell命令构建](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0033.html)步骤，步骤中添加以下命令。其中"build_version=11cc"为用户自定义参数。
  ```
  echo "build_version=11cc" >> ${WORKSPACE}/.ci_build_mete
  ```
  
#### 操作视频
本视频介绍基于Maven构建的图形化构建方式，演示上传软件包至软件发布库操作。
<video controls="controls" preload="none" id="object188231330204312" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/cloudbuild_video/1717033977388209527.mp4" title="上传软件包至软件发布库" poster="https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001901828664.png" height="300.0000" width="600.0000"></video>
- [图形化构建]
  在[配置构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0059.html)中，添加"上传软件包到软件发布库"构建步骤，参考[表1]配置参数。
  ![](https://support.huaweicloud.com/usermanual-codeci/public_sys-resources/caution_3.0-zh-cn.png)
  当[执行机](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_1047.html)选择Windows执行时，需添加"上传软件包到软件发布库(Windows环境)"构建步骤。
   表1上传软件包到软件发布库参数说明 
  | **参数**    | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
  |:---|:---|
  | 步骤显示名称    | 构建步骤的名称，可自定义修改。 - 支持中文、英文、数字、"-"、"_"、英文逗号、英文分号、英文冒号、"."、"/"、圆括号（中英文）。  - 字符长度范围为1\~128。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  | 构建包路径     | 填写构建结果所在路径。 - 构建包路径支持正则匹配，"\*\*"递归遍历当前目录，"\*"匹配0或者多个字符，"?"匹配一个字符。  - 系统文件分隔符使用"/"，路径不区分大小写。   举例说明： - \*.class：当前目录下匹配".class"结尾的文件。  - \*\*/\*.class：当前目录下递归匹配所有的".class"结尾的文件。  - test/a??.java：匹配"test"目录下以"a"开头后跟两个字符的java文件。  - \*\*/test/\*\*/XYZ\*：递归匹配父目录为"test"文件是"XYZ"开头的所有文件，比如"abc/test/def/ghi/XYZ123"。   |
  | 发布版本号     | 可选参数。 配置当前构建任务生成的软件包上传到软件发布库中的目录名。 - 不指定（推荐）：以构建编号命名上传到发布库的文件存储目录名。  - 指定：可能会覆盖同名存储目录下的文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | 包名        | 可选参数。 配置当前构建任务生成的软件包上传到软件发布库中的软件包名称。 - 不指定（推荐）：以文件原始名命名上传到发布库的文件名。包名推荐设置为空，可以上传构建包路径匹配的所有文件。  - 指定：上传多个文件时，可能会存在被覆盖的情况。如果包名需要设置且存在多个文件上传的情况，推荐增加多个"上传软件包到软件发布库"的构建步骤。                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  | 自定义上传目录   | 可选参数。 填写自定义上传目录后，上传的软件包将上传至"自定义上传目录/版本号/软件包名"的目录下。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  | 制品存储方式    | 配置制品上传后，是否保留构建包路径中原有的目录结构。 - 平铺结构：不保留构建包路径中原有的目录结构，平铺展示。  - 保留原始目录结构：保留构建包路径中原有的目录结构。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  | 失败后是否继续运行 | 当前步骤执行失败后是否继续执行下一个步骤，根据实际使用场景选择是或否。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     
- [代码化构建]
  参考以下代码示例，修改在[创建代码化构建使用的YAML文件](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0058.html#codeci_ug_0058__section72391847131511)中的BUILD部分代码信息。
  ```
  version: 2.0 # 必须是2.0
  steps:
    BUILD:
      - upload_artifact:
             inputs:
               path: "**/target/*.?ar"
               version: 2.1
               name: packageName
               custom_upload_path: /phoenix-sample-ci/
               upload_tool: curl
               ignore_fail: true
  ```
  表2代码示例参数说明 
  | **参数**             | **类型** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  |:---|:---|:---|
  | path               | string | 填写构建结果所在路径。 - 构建包路径支持正则匹配，"\*\*"递归遍历当前目录，"\*"匹配0或者多个字符，"?"匹配一个字符。  - 系统文件分隔符使用"/"，路径不区分大小写。   举例说明： - \*.class：当前目录下匹配".class"结尾的文件。  - \*\*/\*.class：当前目录下递归匹配所有的".class"结尾的文件。  - test/a??.java：匹配"test"目录下以"a"开头后跟两个字符的java文件。  - \*\*/test/\*\*/XYZ\*：递归匹配父目录为"test"文件是"XYZ"开头的所有文件，比如"abc/test/def/ghi/XYZ123"。   |
  | version            | string | 可选参数。 填写发布版本号。 不填写（推荐）：以构建编号命名上传到发布库的文件存储目录名。 填写：可能会覆盖同名存储目录下的文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | name               | string | 可选参数。 填写构建生成的包名。 不填写（推荐）：以文件原始名命名上传到发布库的文件名。 填写：上传多个文件时，可能会存在被覆盖的情况。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
  | custom_upload_path | string | 可选参数。 填写自定义上传目录后，上传的软件包将上传至"自定义上传目录/版本号/软件包名"的目录下。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  | upload_tool        | string | 使用curl客户端上传软件包。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  | ignore_fail        | string | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 - true：是。  - 为空：否。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     
#### 发布版本号及包名对上传的影响
图1发布版本号及包名是否为空对上传的影响   
![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000002112818726.png)
