
# 上传文件到OBS
CodeArts Build支持将构建产物上传至OBS中，您可以根据实际情况选择使用该构建步骤。
对象存储服务（OBS）的使用限制请参考[约束与限制](https://support.huaweicloud.com/productdesc-obs/obs_03_0360.html)。
 #### 上传文件到OBS前的准备工作
如果需要将文件上传到其他用户的OBS中，需[新建IAM账户服务扩展点](https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0019.html#section9)。
- [图形化构建]
  在[配置构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0059.html)中，添加"上传文件到OBS"构建步骤，参考[表1]配置参数。
   表1上传文件到OBS参数说明 
  | **参数**    | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
  |:---|:---|
  | 步骤显示名称    | 构建步骤的名称，可自定义修改。 - 支持中文、英文、数字、"-"、"_"、英文逗号、英文分号、英文冒号、"."、"/"、圆括号（中英文）。  - 字符长度范围为1\~128。                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  | 授权用户      | 选择需要推送的OBS所属用户。 - 当前用户：上传到当前用户的OBS桶。  - 其他用户：可以通过选择IAM账号的方式上传到指定用户的OBS中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
  | IAM账号     | 在下拉框中选择[上传文件到OBS前的准备工作]中创建的"IAM账户"服务扩展点，通过服务扩展点推送至其他用户的OBS中。 当"授权用户"选择"其他用户"时需要配置该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | 构建产物路径    | 构建结果所在路径，OBS存储文件名为空时，可使用通配符上传多个文件。如：maven可以使用\*\*/target/\*.?ar匹配所有构建出来的jar包和war包。 举例说明： - \*.class：当前目录下匹配".class"结尾的文件。  - \*\*/\*.class：当前目录下递归匹配所有的".class"结尾的文件。  - test/a??.java：匹配"test"目录下以"a"开头后跟两个字符的java文件。  - \*\*/test/\*\*/XYZ\*：递归匹配父目录为"test"文件是"XYZ"开头的所有文件，比如"abc/test/def/ghi/XYZ123"。   |
  | 桶名        | 填写目标OBS的桶名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
  | OBS终端节点   | 可选参数。 上传至其他区域的OBS时，需要配置此参数。 填写目标OBS域名。不填写默认为当前区域。 注意： 如果填写了非当前Region的OBS终端节点，需确保执行机（包括默认执行机或者自定义执行机）与OBS终端节点的网络可以正常访问，否则会上传OBS失败。例如日志会报错："Name or service not known"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
  | OBS存储目录   | 可选参数。 填写构建结果在OBS上的存储目录（如：application/version/），可留空，或填写"./"表示存储到OBS根目录。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
  | OBS存储文件名  | 可选参数。 填写构建结果在OBS上的存储文件名（不包含目录）。 - 留空时可上传多个文件，将构建产物文件名作为OBS存储文件名。  - 不为空时只能上传单个文件，如：application.jar。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | 是否上传文件夹   | 配置是否开启上传文件夹。 - 是：同步上传文件夹。  - 否：仅上传文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
  | 忽略文件夹路径   | 可选参数。 配置忽略的文件夹路径。当上传文件夹时，会根据此路径忽略部分文件夹，不上传到OBS。 如产物路径填写为"target/api/api.jar"，忽略文件夹路径填写为"target"，obs存储目录为"./"，则会将"api.jar"上传到OBS桶的"api/api.jar"路径下。若路径无法匹配，则默认不忽略路径中的文件夹。 当"是否上传文件夹"设置为"是"时，需要配置该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  | OBS头域     | 可选参数。 上传文件时加入一个或多个自定义的响应头，当用户下载此对象或查询此对象元数据时，加入的自定义响应头会在返回消息的头域中出现。 如："键"填写"x-frame-options"，"值"填写成"false"，即可禁止OBS中存放的网页被第三方网页嵌入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | 失败后是否继续运行 | 当前步骤执行失败后是否继续执行下一个步骤，根据实际使用场景选择是或否。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     
- [代码化构建]
  参考以下代码示例，修改在[创建代码化构建使用的YAML文件](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0058.html#codeci_ug_0058__section72391847131511)中的BUILD部分代码信息。
  ```
  version: 2.0 # 必须是2.0
  steps:
    BUILD:
      - upload_obs:
            inputs:
              artifact_path: "**/target/*.?ar"
              bucket_name: codecitest-obs
              obs_directory: "./"
            #   artifact_dest_name: ""
            #   upload_directory: true
            #   headers:
            #     x-frame-options: true
            #     test: test
            #     commit: ${commitId}
             ignore_fail: true
  ```
  表2代码示例参数说明 
  | **参数**             | **类型** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  |:---|:---|:---|
  | artifact_path      | string | 可选参数。 构建结果所在路径，OBS存储文件名为空时，可使用通配符上传多个文件。如：maven可以使用\*\*/target/\*.?ar匹配所有构建出来的jar包和war包。 举例说明： - \*.class：当前目录下匹配".class"结尾的文件。  - \*\*/\*.class：当前目录下递归匹配所有的".class"结尾的文件。  - test/a??.java：匹配"test"目录下以"a"开头后跟两个字符的java文件。  - \*\*/test/\*\*/XYZ\*：递归匹配父目录为"test"文件是"XYZ"开头的所有文件，比如"abc/test/def/ghi/XYZ123"。   默认值：bin/\*。 |
  | bucket_name        | string | 填写目标OBS的桶名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  | obs_directory      | string | 可选参数。 填写构建结果在OBS上的存储目录（如：application/version/），可留空，或填写"./"表示存储到OBS根目录。 默认值：./。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | artifact_dest_name | string | 可选参数。 填写构建结果在OBS上的存储文件名（不包含目录）。 - 留空时可上传多个文件，将构建产物文件名作为OBS存储文件名。  - 不为空时只能上传单个文件，如：application.jar。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | upload_directory   | bool   | 可选参数。 配置是否上传文件夹。 - true：构建产物的文件夹也会同步上传。  - false：会将匹配到的所有构建产物平铺上传到obs_directory的目录下。   默认值：false。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
  | headers            | map    | 可选参数。 上传文件时加入一个或多个自定义的响应头，当用户下载此对象或查询此对象元数据时，加入的自定义响应头会在返回消息的头域中出现。 例如："x-frame-options"参数值配置为"false"，则表示禁止OBS中存放的网页被第三方网页嵌入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
  | ignore_fail        | string | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 - true：是。  - 为空：否。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     
