我正在使用Bitbuckets Pipeline . 我希望它将我的仓库(非常小)的全部内容推送到S3 . 我不想将其压缩,推送到S3然后解压缩 . 我只是希望它在我的Bitbucket仓库中采用现有的文件/文件夹结构并将其推送到S3 .
yaml文件和.py文件应该是什么样的?
这是当前的yaml文件:
image: python:3.5.1
pipelines:
branches:
master:
- step:
script:
# - apt-get update # required to install zip
# - apt-get install -y zip # required if you want to zip repository objects
- pip install boto3==1.3.0 # required for s3_upload.py
# the first argument is the name of the existing S3 bucket to upload the artefact to
# the second argument is the artefact to be uploaded
# the third argument is the the bucket key
# html files
- python s3_upload.py my-bucket-name html/index_template.html html/index_template.html # run the deployment script
# Example command line parameters. Replace with your values
#- python s3_upload.py bb-s3-upload SampleApp_Linux.zip SampleApp_Linux # run the deployment script
这是我目前的python:
from __future__ import print_function
import os
import sys
import argparse
import boto3
from botocore.exceptions import ClientError
def upload_to_s3(bucket, artefact, bucket_key):
"""
Uploads an artefact to Amazon S3
"""
try:
client = boto3.client('s3')
except ClientError as err:
print("Failed to create boto3 client.\n" + str(err))
return False
try:
client.put_object(
Body=open(artefact, 'rb'),
Bucket=bucket,
Key=bucket_key
)
except ClientError as err:
print("Failed to upload artefact to S3.\n" + str(err))
return False
except IOError as err:
print("Failed to access artefact in this directory.\n" + str(err))
return False
return True
def main():
parser = argparse.ArgumentParser()
parser.add_argument("bucket", help="Name of the existing S3 bucket")
parser.add_argument("artefact", help="Name of the artefact to be uploaded to S3")
parser.add_argument("bucket_key", help="Name of the S3 Bucket key")
args = parser.parse_args()
if not upload_to_s3(args.bucket, args.artefact, args.bucket_key):
sys.exit(1)
if __name__ == "__main__":
main()
这要求我将yaml文件中repo中的每个文件列为另一个命令 . 我只想让它 grab 所有内容并将其上传到S3 .
4 回答
以下对我有用,这是我的yaml文件,其中包含一个带有官方aws命令行工具的docker镜像:cgswong/aws . 非常方便,比bitbucket推荐的更强大(abesiyo / s3) .
几点说明:
确保输入您的s3桶名而不是我的名字 .
为您的代码设置正确的文件夹来源,它可以是root '/'或更深层次的文件来源,它将同步下面的所有文件 .
'--delete'选项删除了从文件夹中删除的对象,决定是否需要它 .
--cache-control可帮助您为s3存储桶中的每个文件设置缓存控制头元数据 . 如果需要,请设置它 .
注意我将此命令附加到对master分支的任何提交,如果需要调整 .
这是完整的文章:Continuous Deployment with Bitbucket Pipelines, S3, and CloudFront
自己搞清楚了 . 这是python文件's3_upload.py'
这是他们bitbucket-pipelines.yml文件:
作为dev分支的示例,它抓取“lambda”文件夹中的所有内容,遍历该文件夹的整个结构,并且对于它找到的每个项目,它将其上载到dev-slz-processor-repo存储桶
最后,这是一个有用的函数,'s3_emptyBucket',在上传新的对象之前从桶中删除所有对象:
您可以更改为使用docker https://hub.docker.com/r/abesiyo/s3/
它运行得很好
到位桶,pipelines.yml
还请在bitbucket管道上设置环境变量AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
为了将静态网站部署到Amazon S3,我有这个bitbucket-pipelines.yml配置文件:
我正在使用attensee / s3_website docker镜像,因为那个安装了令人敬畏的s3_website工具 . s3_website(s3_website.yml)的配置文件[在Bitbucket中的存储库的根目录中创建此文件]如下所示:
我们必须从位桶设置中定义环境变量中的环境变量S3_ID和S3_SECRET
谢谢你到https://www.savjee.be/2016/06/Deploying-website-to-ftp-or-amazon-s3-with-BitBucket-Pipelines/的解决方案