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。