我是一名JavaScript / Angular 2开发人员,现在正在使用Bitbucket管道,Python和Boto进行s3集成。我昨天才被介绍这三种技术!
我的webpack构建生成一个文件夹dist
,其中包含我要上传到s3的所有文件。我希望这些文件出现在s3存储桶的根目录中。
我的bitbucket-pipelines.yaml
中有以下内容:
image: node:5.6.0
pipelines:
default:
- step:
script:
# other stuff..,
- python s3_upload.py io-master.mycompany.co.uk dist io-dist
Here是整个Python s3_upload.py
如您所见,该脚本使用put_object
:
client.put_object(
Body=open(artefact, 'rb'),
Bucket=bucket,
Key=bucket_key
)
我希望能够将dist
文件夹的内容上传到s3。我是否必须学习Python以便能够做到这一点,或者Boto中是否有方法可以做到这一点?
答案 0 :(得分:2)
def sync_to_s3(target_dir, aws_region=AWS_REGION, bucket_name=BUCKET_NAME):
if not os.path.isdir(target_dir):
raise ValueError('target_dir %r not found.' % target_dir)
s3 = boto3.resource('s3', region_name=aws_region)
try:
s3.create_bucket(Bucket=bucket_name,
CreateBucketConfiguration={'LocationConstraint': aws_region})
except ClientError:
pass
for filename in os.listdir(target_dir):
logger.warn('Uploading %s to Amazon S3 bucket %s' % (filename, bucket_name))
s3.Object(bucket_name, filename).put(Body=open(os.path.join(target_dir, filename), 'rb'))
logger.info('File uploaded to https://s3.%s.amazonaws.com/%s/%s' % (
aws_region, bucket_name, filename))
您可以将文件夹作为参数传递并迭代文件