【问题标题】:Access Jenkins S3Publisher artifacts via python api or REST call?通过 python api 或 REST 调用访问 Jenkins S3Publisher 工件?
【发布时间】:2018-03-14 15:56:46
【问题描述】:

我们如何通过 REST 或 python 库(如 jenkinsapi)访问 S3Publisher 工件?

我想,我可以做这样的事情,但是我需要处理身份验证,而所有其他 jenkinsapi 调用都已经进行了身份验证。

from jenkinsapi.build import Build

def get_build_url(self, build: Build):
    """url for build page"""
    return build.get_result_url().split(str(build.get_number()))[0]

def get_s3_artifact(self, build: Build, artifact_name:str):
    url = "{}/s3/download/{}".format(self.get_build_url(build))
    wget.download(url)

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-api


    【解决方案1】:

    我们可以使用标准流程通过 python 请求库下载文件,因为 jenkinsapi 使用请求。

    假设 self._server 是 jenkinsapi.jenkins.Jenkins.Jenkins 类的一个实例。我们可以构建一个 url 来匹配我们期望通过 build/s3 下的链接下载工件的内容。然后我们使用请求获取该 url 内容并将其写入文件。

    def get_s3_artifact(self, build: Build, artifact_name:str, output_dir: Path) -> Path:
        output_file = output_dir / artifact_name
        if output_file.exists():
            raise FileExistsError('[ERROR] {}:get_s3_artifact - cannot overwrite {}'.format(self.__class__,
                                                                                            output_file.absolute()))
        output_dir.mkdir(exist_ok=True, parents=True)
    
        url = "{}{}/s3/download/{}".format(self.get_build_url(build), str(build.get_number()), artifact_name)
        r = self._server.requester.get_url(url, stream=True)
        with output_file.open('wb') as f:
            for chunk in r.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
    
        return output_file
    

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2014-10-16
      • 2017-08-04
      相关资源
      最近更新 更多