首页 > 解决方案 > codecommit文件如何自动上传到s3?

问题描述

下面的代码只给了我改变的字节,而不是整个文件。来到 s3 部分,zip 文件正在创建,但大小为零字节,而实际大小约为 70-80 字节。我需要一种方法,当推送事件发生时,存储库中的所有文件都将被推送到 s3。至少告诉我在推送发生时如何从存储库中获取所有文件。

提前致谢!

import boto3
import pathlib
import tarfile
import io
import sys
import os


codecommit = boto3.client("codecommit")

def get_differences(repository_name, branch="master"):
    response = codecommit.get_differences(
        repositoryName=repository_name,
        afterCommitSpecifier='master',
    )
    differences = []
    while "nextToken" in response:
        response = codecommit.get_differences(
            repositoryName=repository_name,
            afterCommitSpecifier='master',
            nextToken=response["nextToken"]
        )
        differences += response.get("differences", [])
    else:
        differences += response["differences"]
    return differences

def main(event,context):
    repository_name = event['Records'][0]['eventSourceARN'].split(':')[5]
    repository_path = pathlib.Path(repository_name)
    buf = io.BytesIO()
    with tarfile.open(None, "w:gz", fileobj=buf) as tar:
    for difference in get_differences(repository_name):
        blobid = difference["afterBlob"]["blobId"]
        path = difference["afterBlob"]["path"]
        mode = difference["afterBlob"]["mode"] # noqa
        blob = codecommit.get_blob(
            repositoryName=repository_name, blobId=blobid)
        tarinfo = tarfile.TarInfo(str(repository_path / path))
        tarinfo.size = len(blob["content"])
        tar.addfile(tarinfo, io.BytesIO(blob["content"]))
        tarobject = buf.getvalue()
# save to s3
s3 = boto3.client('s3')
s3.filename = str(repository_name)
s3.bucket = 'csharp-codes-codecommit' 
response = s3.put_object(Bucket=s3.bucket,Key= '/tmp/'+str(repository_path))

标签: amazon-web-servicesamazon-s3

解决方案


s3.put_object()从您的代码来看,您的调用似乎没有附加您的 tar 文件。

另一个解决方案是位于此处的 CodeCommit 的无服务器示例。最后一个将在每次推送后创建一个 zip 存档。


推荐阅读