S3 部署
此页面记录使用 dpl v1 进行的部署,该版本目前是默认版本。下一个主要版本 dpl v2 将很快发布,我们建议您开始使用它。请查看 我们的博客文章 了解详细信息。 dpl v2 文档可在此处找到。
Travis CI 可以在构建成功后自动将您的构建上传到 Amazon S3。
对于最小配置,请将以下内容添加到您的 .travis.yml
中
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
您可以在 Amazon 控制台中找到您的 AWS 访问密钥。您可能需要使用 Travis CI 命令行对密钥进行加密
travis encrypt --add deploy.secret_access_key
前面的示例几乎肯定不理想,因为您可能希望上传构建的二进制文件和文档。将 skip_cleanup
设置为 true
以防止 Travis CI 删除您的构建工件。
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
请注意,部署到 S3 只会将文件添加到您的存储桶,不会删除它们。如果您需要删除已过时的文件,您可以在 Amazon S3 控制台中手动进行操作。
除了将 Amazon S3 配置添加到您的 .travis.yml
中,您还可以运行项目目录中的 Travis CI 命令行进行设置
$ travis setup s3
请记住,上述命令必须在您的项目目录中运行,以便它可以为您修改 .travis.yml
。
通过选项设置 S3 ACL #
您可以通过 acl
选项设置上传文件的 acl,如下所示
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
acl: public_read
有效的 ACL 值为:private
、public_read
、public_read_write
、authenticated_read
、bucket_owner_read
、bucket_owner_full_control
。ACL 默认值为 private
。
请注意,为了设置 acl
,存储桶的策略必须通过 s3:PutObjectAcl
操作允许此类操作。一个示例策略可能如下所示
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "PRINCIPAL_ID"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
}
]
}
请务必根据您的需求设置主体和资源。
使用存储桶策略设置 S3 ACL #
设置工件 ACL 的另一种方法是通过 S3 存储桶策略。
此存储桶策略授予公共读取权限
{
"Version": "2014-09-25",
"Statement":[{
"Sid":"AllowPublicRead",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::"YOUR BUCKET NAME"/*"
]
}
]
}
您必须禁用 阻止公共访问 存储桶上的权限,才能使此功能正常工作。因此,避免将敏感信息存储在此 S3 存储桶中更安全。
S3 存储桶区域 #
默认情况下,部署到 S3 时使用区域 us-east-1
。如果您的存储桶托管在其他区域,则使用默认区域进行部署会导致以下错误。
The bucket you are attempting to access must be addressed using the specified endpoint.
Please send all future requests to this endpoint. (AWS::S3::Errors::PermanentRedirect)
这可以通过使用 region
配置指定存储桶的区域来解决。例如,此示例使用 eu-west-1
区域。
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
region: eu-west-1
部署一个或多个匹配模式的文件 #
要上传匹配特定模式的文件,您可以通过 glob
指令添加模式,如下例所示
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
glob: "*.txt"
这将匹配当前目录中的所有 .txt
文件。
仅从一个文件夹部署 #
通常,您不想将整个项目上传到 S3。您可以告诉 Travis CI 只将单个文件夹上传到 S3。您可以使用 local_dir
选项来执行此操作。此示例将项目的 build
目录上传到 S3
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
local_dir: build
部署到特定 S3 文件夹 #
通常,您只希望上传到特定 S3 文件夹。您可以使用 upload-dir
选项设置 S3 目标文件夹。此示例上传到 S3 存储桶的 travis-builds
文件夹。
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
upload-dir: travis-builds
部署到 S3 托管的网站: #
要上传到 S3 托管的网站,请使用此模板上传到您的网站。
deploy:
provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
region: "Bucket region"
请记住,您需要将存储桶设置为具有 public
的 ACL,以便任何人都可以查看您的网站。
部署到多个存储桶: #
如果您想上传到多个存储桶,您可以这样做
deploy:
- provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
skip_cleanup: true
- provider: s3
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "Second S3 Bucket"
skip_cleanup: true
条件发布 #
您可以在满足某些条件时才进行部署。请参阅 使用 on:
进行条件发布。
在发布前后运行命令 #
有时您想在发布 gem 之前或之后运行命令。您可以使用 before_deploy
和 after_deploy
阶段来实现这一点。这些阶段只有在 Travis CI 实际推送发布时才会触发。
before_deploy: "echo 'ready?'"
deploy:
..
after_deploy:
- ./after_deploy_1.sh
- ./after_deploy_2.sh
设置 Content-Encoding
标头 #
S3 上传可以选择设置 HTTP 标头 Content-Encoding
。此标头允许以压缩形式发送文件,同时保留文件扩展名和关联的 MIME 类型。
要启用此功能,请添加
deploy:
provider: s3
..
detect_encoding: true # <== default is false
如果文件使用 gzip
或 compress
进行了压缩,则会使用适当的标头上传它。
在 Content-Type
标头上设置 charset
#
S3 可以接受 content-type 标头。通常情况下,这也并不包含字符集。如果您想添加字符集,请使用您想要的字符集添加 default_text_charset
选项。例如
deploy:
provider: s3
..
default_text_charset: 'utf-8' # Default is ''
HTTP 缓存控制 #
S3 上传可以选择设置 Cache-Control
和 Expires
HTTP 标头。
设置 HTTP 标头 Cache-Control
以建议浏览器缓存文件。默认值为 no-cache
。有效选项为 no-cache
、no-store
、max-age=<seconds>
、s-maxage=<seconds> no-transform
、public
、private
。
Expires
设置缓存对象不再可缓存的日期和时间。默认为未设置。日期必须采用 YYYY-MM-DD HH:MM:SS -ZONE
格式。
deploy:
provider: s3
..
cache_control: "max-age=31536000"
expires: "2012-12-21 00:00:00 -0000"
设置 dot_match 标志以上传以句点开头的文件 #
可以将 S3 上传设置为上传所有以 .
开头的文件
deploy:
provider: s3
..
dot_match: true
使用与 S3 兼容的对象存储 #
您可以通过设置 endpoint
密钥来使用与 S3 兼容的对象存储(例如 Digital Ocean Spaces)。
deploy:
provider: s3
..
endpoint: https://nyc3.digitaloceanspaces.com