3

我是一名 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 

是整个 Pythons3_upload.py

如您所见,脚本使用put_object

client.put_object(
    Body=open(artefact, 'rb'),
    Bucket=bucket,
    Key=bucket_key
)

我想做的是将dist文件夹的内容上传到s3。我是否必须学习 Python 才能做到这一点,或者 Boto 中是否已经有方法可以做到这一点?

4

1 回答 1

3
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))

您可以将文件夹作为参数传递并迭代文件

于 2016-10-26T09:09:09.380 回答