对象存储服务(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/[email protected]
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示例片段若无特别说明,均默认使用了华为云统一鉴权huaweicloud/auth-action。
- name: Authenticate to Huawei Cloud
uses: huaweicloud/[email protected]
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
- name: Upload to Huawei Cloud OBS
uses: huaweicloud/[email protected]
with:
bucket_name: 'bucket-test'
local_file_path: 'src1/src2/test1.txt'
obs_file_path: 'test1.txt'
operation_type: 'upload'
成功上传后,桶内生成对象为:
test1.txt
- name: Upload to Huawei Cloud OBS
uses: huaweicloud/[email protected]
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
- name: Upload to Huawei Cloud OBS
uses: huaweicloud/[email protected]
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
- name: Download File from Huawei Cloud OBS
uses: huaweicloud/[email protected]
with:
bucket_name: 'bucket-test'
local_file_path: 'src1/'
obs_file_path: 'test1.txt'
operation_type: 'download'
下载完成后,本地生成的文件为:
└── src1
└── test1.txt
- name: Download from Huawei Cloud OBS
uses: huaweicloud/[email protected]
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
- name: Download from Huawei Cloud OBS
uses: huaweicloud/[email protected]
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控制台进行修改。
假设您的OBS中不存在名为'new-bucket'的桶
- name: Create Bucket on Huawei Cloud OBS
uses: huaweicloud/[email protected]
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
假设您的obs中存在名为'new-bucket'的桶
- name: Delete bucket on Huawei Cloud OBS
uses: huaweicloud/[email protected]
with:
bucket_name: 'new-bucket'
operation_type: 'deleteBucket'
执行成功后,您在obs的桶'new-bucket'以及其中所有对象和碎片将被删除
- 本action在使用过程会调用OBS服务,涉及到的公网域名可到地区和终端节点 - 对象存储服务 OBS查看。
- Linux AMD64 OBSUtil下载链接
- https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary
- https://acs.amazonaws.com/groups/glob
- https://acs.amazonaws.com/groups/global/AllUsers
- https://acs.amazonaws.com/groups/global/AuthenticatedUsers
- https://acs.amazonaws.com/groups/s3/LogDelivery
- jprichardson/node-fs-extra#269
- jprichardson/node-fs-extra#141
- https://mths.be/fromcodepoint
- https://www.w3.org/2001/XMLSchema-instance
- https://www.w3.org/XML/1998/namespace
- https://www.w3.org/2000/xmlns/