在Jenkins管道中使用s3upload上传多个文件

时间:2017-09-06 11:29:53

标签: jenkins amazon-s3 jenkins-plugins jenkins-pipeline

我们可以使用Jenkins文件中的s3Upload将多个文件(不是整个文件夹)上传到S3吗?

我尝试使用*.rpm函数将根目录中的所有rpm文件(s3Upload)上传到S3。

4 个答案:

答案 0 :(得分:4)

findFiles解决了这个问题。以下是用于此目的的片段。

files = findFiles(glob: '*.rpm')

  files.each { 
      println "RPM:  ${it}"
      withAWS(credentials: '****************'){
       s3Upload(file:"${it}", bucket:'rpm-repo', path:"${bucket_path}")
        }
    }

答案 1 :(得分:1)

您可以在一行中使用以下命令上传所有文件。

  s3Upload(bucket:"my-bucket", path:'path/to/targetFolder/', includePathPattern:'**/*.svg', workingDir:'dist')

进一步解释,您可以根据以下两种可能性创建自己的过滤;

1.包括某个扩展名的所有文件。

s3Upload(bucket:"my-bucket", path:'path/to/targetFolder/', includePathPattern:'**/*.svg', workingDir:'dist')

2.包括除某些文件扩展名之外的所有文件。

s3Upload(bucket:"my-bucket", path:'path/to/targetFolder/', includePathPattern:'**/*', workingDir:'dist', excludePathPattern:'**/*.svg')

参考:https://github.com/jenkinsci/pipeline-aws-plugin(在s3Upload下检查)

答案 2 :(得分:0)

请参阅以下链接AWS s3 documentation。在此,请参阅'使用排除和包含过滤器

部分

这是一种上传特定类型的多个文件的方法。

如果您只想上传具有特定扩展名的文件,则需要先排除所有文件,然后重新包含具有特定扩展名的文件。此命令仅上传以.jpg结尾的文件:

aws s3 cp /tmp/foo/ s3://bucket/ --recursive --exclude "*" --include "*.jpg"

这适用于AWS Command Line Interface。

答案 3 :(得分:0)

对于管道,您需要将迭代包装在script中,例如

pipeline {
  environment {
    // Extract concise branch name.
    BRANCH = GIT_BRANCH.substring(GIT_BRANCH.lastIndexOf('/') + 1, GIT_BRANCH.length())
  }
  ...
  post {
    success {
      script {
        def artifacts = ['file1', 'dir2/file3']
        artifacts.each {
          withAWS(credentials:'my-aws-token', region:'eu-west-1') {
            s3Upload(
              file: "build/${it}",
              bucket: 'my-artifacts',
              path: 'my-repo/',
              metadatas: ["repo:${env.JOB_NAME}", "branch:${env.BRANCH}", "commit:${env.GIT_COMMIT}"]
            )
          }
        }
      }
    }
  }
}