Jenkins与Amazon S3持续集成-所有内容都上传到根目录?

o4tp2gmn  于 2023-02-18  发布在  Jenkins
关注(0)|答案(5)|浏览(247)

我正在运行Jenkins,我的GitHub账户可以成功运行它,但是我不能让它在Amazon S3上正常运行。
我安装了S3插件,当我运行一个构建时,它成功地上传到我指定的S3 bucket,但所有上传的文件最终都在bucket的根目录下。我有一堆文件夹(如/css /js等),但这些文件夹中来自hithub的所有文件最终都在我的S3帐户的根目录下。
是否可以让S3插件上传并保留文件夹结构?

w8ntj3qf

w8ntj3qf1#

看起来这是不可能的,但是我使用s3 cmd来完成这个任务,你必须先在服务器上安装它,然后在Jenkins作业的bash脚本中用途:

s3cmd sync -r -P $WORKSPACE/ s3://YOUR_BUCKET_NAME

这将把所有文件复制到你的S3账户,并保持文件夹结构。-P为每个人保留读取权限(如果你把你的bucket作为一个网络服务器,这是需要的)。这是一个使用同步功能的很好的解决方案,因为它将你所有的本地文件与S3 bucket进行比较,并只复制已经改变的文件(通过比较文件大小和校验和)。

sy5wg1nm

sy5wg1nm2#

我从来没有为Jenkins使用过S3插件(但是现在我知道它存在了,我可能会尝试一下),但是,看看代码,似乎你只能使用一个变通方案来做你想做的事情。
下面是实际插件代码的作用(取自github)--为了可读性起见,我删除了代码中不相关的部分:
类别hudson.plugins.s3.S3Profile,方法upload

final Destination dest = new Destination(bucketName,filePath.getName());
getClient().putObject(dest.bucketName, dest.objectName, filePath.read(), metadata);

现在,如果您看一下hudson.FilePath.getName()的JavaDoc:
只获取文件名部分,而不获取目录。
现在,看一下hudson.plugins.s3.Destination的构造函数:

public Destination(final String userBucketName, final String fileName) {

    if (userBucketName == null || fileName == null) 
        throw new IllegalArgumentException("Not defined for null parameters: "+userBucketName+","+fileName);

    final String[] bucketNameArray = userBucketName.split("/", 2);
    bucketName = bucketNameArray[0];
    if (bucketNameArray.length > 1) {
        objectName = bucketNameArray[1] + "/" + fileName;
    } else {
        objectName = fileName;
    }
}

Destination类JavaDoc表示:
这里实现的约定是桶名中的/用于构造对象名中的结构,也就是说,将file.txt放入桶名"mybucket/v1"将导致在mybucket中创建对象"v1/file.txt"。
结论:filePath.getName()调用去掉所有前缀(S3没有任何目录,而是前缀,请参阅thisthis线程以了解更多信息)您添加到文件中。如果您确实需要将您的文件放入"文件夹"(例如,具有包含斜线(/)的特定前缀),我建议您将此前缀添加到存储桶名称的末尾,如Destination类JavaDoc中所述。

5ktev3wc

5ktev3wc3#

是的,这是可能的。
它看起来像每个文件夹的目的地,你需要一个单独的示例的S3插件然而。
"源"是你上传的文件。
"目的地桶"是放置路径的地方。

pxq42qpu

pxq42qpu4#

使用Jenkins 1.532.2和S3 Publisher Plug-In 0.5时,UI配置作业屏幕会拒绝额外的S3发布条目。如果插件重新创建工作区目录结构,我们将有许多目录要创建,这也会给我们带来显著的维护优势。

kxxlusnw

kxxlusnw5#

1.设置git插件。

1.设置Bash脚本

1.您的文件夹中标记为“*”的所有内容将进入存储桶

相关问题