用于drone ci 的 rclone 对象存储部署插件,支持本地文件系统、主流网盘和s3等对象存储
3.9K
Drone plugin to upload, remove and sync filesystems and object storage by rclone.
用于对文件系统和对象存储进行上传、删除和同步等操作的drone rclone插件
本插件用于在 Drone CI 中使用 rclone 工具。你可以使用本插件将文件推送到远端的网盘、网络存储或对象存储(比如 AWS S3、Minio、阿里 OSS、腾讯 COS 等)中。
通常在 Drone 中使用这类存储插件往往是为了进行部署,即将本地文件推送到远端对象存储。因此,本插件暂时只支持rclone中用于向远端对象存储推送的使用方式。
如果你希望本插件支持更多的 子命令功能,可以提交 Issues。
以下示例用于将由 git 仓库中刚刚生成的 /public/ 文件夹同步(sync)到远端的 minio 对象存储的 website-107893044存储桶根路径(/)下。
注意: 同步过程不会同步空文件夹,同时会删除目标路径下不存在于源路径中的文件。
提示: 在配置对象存储前,请确认已拥有对应存储桶的读写权限。否则会操作失败
kind: pipeline
name: default
steps:
- name: rclone deploy
image: ryjer/drone-rclone
settings:
subcommand: sync
source: /public/
name: remotestore
type: s3
provider: Minio
access_key_id: minioadminid
secret_access_key: minioadminkey
endpoint: http://play.minio.io
bucket: website-107893044
target: /
其效果等同于下面的 docker 命令:
docker run -it --rm \
-e PLUGIN_SUBCOMMAND=sync \
-e PLUGIN_NAME=remotestore \
-e PLUGIN_TYPE=s3 \
-e PLUGIN_PROVIDER=Minio \
-e PLUGIN_ACCESS_KEY_ID=minioadminid \
-e PLUGIN_SECRET_ACCESS_KEY=minioadminkey \
-e PLUGIN_ENDPOINT=http://play.minio.io \
-e PLUGIN_BUCKET=website-107893044 \
-e PLUGIN_SOURCE=/public/ \
-e PLUGIN_TARGET=/ \
-v $PWD:$PWD \
ryjer/drone-rclone
如果你不想使用 sync子命令删除目标存储中不同的文件,可以使用 copy 子命令仅进行复制操作,其结果类似于 cp 命令。示例如下:
kind: pipeline
name: default
steps:
- name: rclone deploy
image: ryjer/drone-rclone
settings:
subcommand: copy
source: /public/
name: remotestore
type: s3
provider: Minio
access_key_id: minioadminid
secret_access_key: minioadminkey
endpoint: http://play.minio.io
bucket: website-107893044
target: /
如果他人也有你的git仓库的访问权限,则使用上述明文 access_key_id、secret_access_key 和 bucket 信息是非常危险的。你需要使用 drone 提供的 secret 机制来保护这些信息不被他人看见。
secret 的具体使用方法请参考官方文档 Per Repository | Drone Secret
kind: pipeline
name: default
steps:
- name: rclone deploy
image: ryjer/drone-rclone
settings:
subcommand: sync
source: /public/
name: remotestore
type: s3
provider: Minio
access_key_id:
from_secret: rclone_access_key_id
secret_access_key:
from_secret: rclone_secret_access_key
endpoint: http://play.minio.io
bucket:
from_secret: rclone_bucket
target: /
以下参数来自 rclone 的配置文件,这里建议在本地 rclone 配置调试好后将配置文件(通常是 ~/.config/rclone/rclone.conf 文件)内的一个配置填入drone.yml 设置中。
| 参数 | 解释 |
|---|---|
| name | 一个远端存储的名称,可以用字母数字随意命名,但不得为空 |
| type | 存储类型 |
| provider | 提供商 |
| access_key_id | 密钥ID,不同的厂商有不同的叫法 |
| secret_access_key | 密钥Key,不同的厂商有不同的叫法 |
| endpoint | 接入点,远端存储的网址,通常与地域有关。如果不指定协议,默认为 https。 |
上方示例设置中的以上参数,对用于 rclone.conf 配置文件中的一个配置如下,请注意一一对应。
[remotestore]
type = s3
provider = Minio
access_key_id = minioadminid
secret_access_key = minioadminkey
endpoint = http://play.minio.io
| 参数 | 解释 |
|---|---|
| subcommand | rclone 的子命令,暂时只支持 sync 和 copy |
| source | 源路径,会以 git 仓库目录作为根目录。不能为空(/ 表示git仓库根目录) |
| bucket | 指定接入点下的存储桶名,请登录存储服务商查询存储桶名 |
| target | 目标路径,会以存储桶作为根目录,不得为空(/ 表示存储桶根目录) |
这里以位于成都的腾讯云 cos 对象存储桶同步为例,将 git 根目录下 /public/ 文件夹的内容同步到成都地区的 website-100000088 存储桶的根路径 / 下。其配置示例如下:
kind: pipeline
name: default
steps:
- name: rclone deploy
image: ryjer/drone-rclone
settings:
subcommand: sync
source: /public/
name: chengducos
type: s3
provider: TencentCOS
access_key_id: KJi9ajksng89IIFSjnf98OJdf98u08
secret_access_key: MIOF89yS*F(H&oYHF&(9rf0-fs-0))
endpoint: cos.ap-chengdu.myqcloud.com
bucket: website-100000088
target: /
此表仅供参考,而且仅有部分,具体可用取值请参考 rclone官方文档
| 类型 | 取值 |
|---|---|
| Amazon Drive | amazon cloud drive |
| S3 协议对象存储(包括AWS S3、阿里、ceph、IBM cos、腾讯云cos和minio) | s3 |
| Backblaze B2 对象存储 | b2 |
| Box | box |
| Dropbox | dropbox |
| FTP 连接 | ftp |
| google cloud storage 云存储 | google cloud storage |
| Google Drive | drive |
| Hadoop 分布式文件系统 | hdfs |
| Microsoft OneDrive | onedrive |
| OpenStack Swift | swift |
| 青云对象存储 | qingstor |
| SSH/SFTP Connection | sftp |
| Webdav | webdav |
| seafile | seafile |
| 提供商 | 取值(注意大小写) |
|---|---|
| 亚马逊AWS | AWS |
| 阿里云 OSS | Alibaba |
| 腾讯云 COS | TencentCOS |
| IBM COS S3 | IBMCOS |
| Minio 对象存储 | Minio |
| Ceph 对象存储 | ceph |
| 其他S3 兼容的对象存储 | Other |
以上版本需要通过多个参数详细给出 rclone 中的一个配置,虽然具有通用格式但是很繁琐。
所以,在此提供一个聚合参数的版本 ryjer/drone-rclone:conf。该版本对于类似如下的一条 rclone 配置
[remotestore]
type = s3
provider = Minio
access_key_id = minioadminid
secret_access_key = minioadminkey
endpoint = http://play.minio.io
不再需要 6个配置参数详细给出。而是只使用一个参数 rclone_config ,一次性将整个配置条目给出,从而简化配置过程。也就是说,rclone_config参数将包含如上 6行 参数信息。
更好的效果是,使用聚合参数的版本一次可以给出不止一个配置,而可以给出多个配置,比如像下面的两个配置。从而更自由地使用 rclone
[remotestore]
type = s3
provider = Minio
access_key_id = minioadminid
secret_access_key = minioadminkey
endpoint = http://play.minio.io
[remotestore]
type = s3
provider = TencentCOS
access_key_id = 98q23yfhq23hgfuf8afh9u
secret_access_key = af83hfg7uqy3ufjiq09tg2
endpoint = cos.ap-huoxing.myqcloud.com
通过参数聚合,只需要以下示例即可完成一次 rclone 操作。
kind: pipeline
name: default
steps:
- name: rclone sync
image: ryjer/drone-rclone:conf
settings:
rclone_config:
from_secret: rclone_config
subcommand: sync
source: /test
bucket: test
target: /
该示例使用了 secret,考虑到一条 rclone 配置中有大量的敏感信息,这里强烈建议使用 secret。这需要创建如下所示的包含整条 rclone 配置的多行(>= 6 行) secret。

Content type
Image
Digest
Size
16.7 MB
Last updated
about 5 years ago
docker pull ryjer/drone-rclone