Skip to content
cloud

GitHub Action

Huawei Cloud OBS Helper Action

v1.0.0 Latest version

Huawei Cloud OBS Helper Action

cloud

Huawei Cloud OBS Helper Action

Upload/Download files or folders to Huawei Cloud OBS

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Huawei Cloud OBS Helper Action

uses: huaweicloud/obs-helper@v1.0.0

Learn more about this action in huaweicloud/obs-helper

Choose a version

Huawei Cloud OBS Helper

对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 您可以使用OBS Helper action实现如下对OBS的操作:
1、上传文件/文件夹
2、下载文件/文件夹
3、创建桶
4、删除桶
本项目说明文件仅做基础功能示例,具体不同场景下的使用样例及其参数使用请访问OBS Helper Workflow Sample

前置工作

1、需要开通华为云的OBS服务,进行对象操作时需要建好桶。OBS主页OBS文档
2、action调用华为云接口需要华为云鉴权,建议将您华为云账户的ak/sk配置于您GitHub工程中的settting-Secret-Actions,分别添加为ACCESSKEY、SECRETACCESSKEY以加密使用,获取ak/sk方式; 3、注意替换参数region为自己OBS服务的地区,方便插件配置终端节点 obs.'<region>'.myhuaweicloud.com 来访问您的OBS服务;
4、注意替换参数bucket_name为自己OBS服务的桶名(创建桶时为要创建的桶名)

华为云统一鉴权认证

推荐使用huaweicloud/auth-action进行OBS操作的鉴权认证。

    - name: Authenticate to Huawei Cloud
      uses: huaweicloud/auth-action@v1.0.0
      with: 
          access_key_id: ${{ secrets.ACCESSKEY }} 
          secret_access_key: ${{ secrets.SECRETACCESSKEY }}
          region: '<region>'

上传下载对象参数说明

参数名称 参数说明 默认值 是否必填
access_key 访问密钥ID。与私有访问密钥关联的唯一标识符,和私有访问密钥(secret_key)一起使用,对请求进行加密签名。建议参照前置工作中的步骤2进行设置以加密使用。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数
secret_key 与访问密钥ID(access_key)结合使用的私有访问密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。建议参照前置工作中的步骤2进行设置以加密使用。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数
region OBS服务所在区域。用于配置OBS终端节点。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数 'cn-north-4'
bucket_name OBS的目标桶名
operation_type 要进行的操作,上传请使用upload,下载请使用download
local_file_path 对象的本地路径,上传对象时可填写1~10个
obs_file_path 对象在桶内的路径 下载时必填
include_self_folder 上传/下载文件夹时是否包含文件夹自身,上传/下载单个文件时无意义。默认不包含 false
exclude 下载对象时,要排除的对象,上传时无用。不填写时不排除任何对象

请注意,上传/下载时,地址类参数请不要使用操作系统独有的地址符号(如Linux系统的'~',会被识别成名为'~'的文件夹)。Github Actions提供的上下文功能中,有一些常用的地址上下文,例如:

name: Show Contexts
on:
  push:
    branches:
        master
jobs:
  Show-Workspace:
    runs-on: ubuntu-latest
    steps:
      # ${{ github.workspace }}为action运行时的工作目录
      - name: Echo Workspace of Action
        run: echo ${{ github.workspace }}

      # ${{ runner.temp }}为运行器临时目录的路径
      - name: Echo Temporary Directory on the Runner
        run: echo ${{ runner.temp }}

创建删除桶参数说明

参数名称 参数说明 默认值 是否必填
access_key 访问密钥ID。与私有访问密钥关联的唯一标识符,和私有访问密钥(secret_key)一起使用,对请求进行加密签名。建议参照前置工作中的步骤2进行设置以加密使用。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数
secret_key 与访问密钥ID(access_key)结合使用的私有访问密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。建议参照前置工作中的步骤2进行设置以加密使用。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数
region OBS服务所在区域。用于配置OBS终端节点。如果使用了华为云统一鉴权huaweicloud/auth-action可以不填写此参数 'cn-north-4'
bucket_name OBS的目标桶名
operation_type 要进行的操作,创建桶请使用createbucket,删除桶请使用deletebucket
public_read 创建桶时,是否开放桶公共读权限,不填时默认不开放。如需设置其他权限,请在创建桶后到控制台进行修改 false
storage_class 创建桶时,桶的存储类型,不填时默认为标准存储
clear_bucket 删除桶时,是否清空桶内全部对象/碎片,不填时默认清空 true

参数支持列表

目前OBS支持的区域名称和对应region(区域)、终端节点请见对象存储服务 OBS

目前OBS支持的存储类型(storage_class)如下

  标准存储: standard
  低频访问存储: infrequent
  归档存储: archive

action代码示例片段

以下action示例片段若无特别说明,均默认使用了华为云统一鉴权huaweicloud/auth-action

- name: Authenticate to Huawei Cloud
  uses: huaweicloud/auth-action@v1.0.0
  with: 
    access_key_id: ${{ secrets.ACCESSKEY }} 
    secret_access_key: ${{ secrets.SECRETACCESSKEY }}
    region: 'cn-north-4'

上传文件示例

注意:上传单个文件时,在使用参数obs_file_path的时候,请使用是否以'/'作为结尾来区分是上传为文件,还是上传至文件夹。

假设本地文件夹的格式如下:

└── src1
    ├── src2
          ├── test1.txt
          └── test2.txt
    └── src3
          └── test3.txt

上传文件src1/src2/test1.txt至obs根目录

- name: Upload to Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: 'src1/src2/test1.txt'
    obs_file_path: 'test1.txt'
    operation_type: 'upload'

成功上传后,桶内生成对象为:

test1.txt

上传文件夹src1(包含文件夹自身)至src文件夹

- name: Upload to Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: 'src1'
    obs_file_path: 'src'
    operation_type: 'upload'
    include_self_folder: true

成功上传后,桶内生成对象为:

  src
    └── src1
          ├── src2
                ├── test1.txt
                └── test2.txt
          └── src3
                └── test3.txt

上传多个文件和文件夹(不包含文件夹自身)至src文件夹

- name: Upload to Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: |
      'src1/src2/test1.txt'
      'src1/src3'
    obs_file_path: 'src'
    operation_type: 'upload'
    include_self_folder: false

成功上传后,桶内生成对象为:

  src 
    └── test1.txt
    └── src3
          └── test3.txt

下载文件示例

注意:下载文件时,在使用参数local_file_path的时候,请使用是否以'/'作为结尾来区分是下载为文件,还是下载至文件夹。

假设bucket-test桶内包含如下对象:

test1.txt
src1
  ├── src2
        ├── test2.txt
        └── test3.txt
  └── src3
        └── test4.txt

下载文件test1.txt至文件夹src1中

- name: Download File from Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: 'src1/'
    obs_file_path: 'test1.txt'
    operation_type: 'download'

下载完成后,本地生成的文件为:

└── src1
      └── test1.txt

下载文件夹src1(包含文件夹自身)至文件夹src中

- name: Download from Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: 'src'
    obs_file_path: 'src1'
    operation_type: 'download'
    include_self_folder: true

下载完成后,本地生成的文件为:

src
  └── src1
        ├── src2
              ├── test2.txt
              └── test3.txt
        └── src3
              └── test4.txt

下载文件夹src1(不包含文件夹自身,排除下载桶内src1/sr2/test3.txt和src1/src3目录下的所有文件)到src文件夹下

- name: Download from Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'bucket-test'
    local_file_path: 'src'
    obs_file_path: 'src1'
    operation_type: 'download'
    include_self_folder: false
    exclude: |
      'src1/src2/test3.txt'
      'src1/src3'

下载完成后,本地生成的文件为:

src
  └── src2
        └── test2.txt

创建桶用法

创建新桶时,可指定是否开放桶公共读权限(public_read)和桶的存储类型(storage_class)。若不指定,默认不开放公共读权限,存储类型为标准存储(standard)。如需开放更多权限,请至obs控制台进行修改。

创建名为'new-bucket'的桶(开放公共读、低频访问存储、未使用统一鉴权)

假设您的OBS中不存在名为'new-bucket'的桶

- name: Create Bucket on Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    access_key: ${{ secrets.ACCESSKEY }}
    secret_key: ${{ secrets.SECRETACCESSKEY }}
    region: 'cn-north-4'
    bucket_name: 'new-bucket'
    operation_type: 'createBucket'
    public_read: true
    storage_class: 'infrequent'

执行成功后,OBS中会创建一个名为'new-bucket'、开放公共读权限,存储类型为低频访问存储的桶

删除桶用法

删除桶操作默认会自动清空桶内所有对象和碎片,若您不确定桶内是否有重要对象未备份,请设置参数'clear_bucker'为false

删除名为'new-bucket'的桶(自动清空桶内所有对象和碎片)

假设您的obs中存在名为'new-bucket'的桶

- name: Delete bucket on Huawei Cloud OBS
  uses: huaweicloud/obs-helper@v1.4.0
  with:
    bucket_name: 'new-bucket'
    operation_type: 'deleteBucket'

执行成功后,您在obs的桶'new-bucket'以及其中所有对象和碎片将被删除

Action中使用的公网地址说明

第三方开源包引入的公网地址