我们如何通过REST或python lib访问S3Publisher个工件,如jenkinsapi?
我想,我可以做类似这样的事情但是我需要处理身份验证,而所有其他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)
答案 0 :(得分:0)
我们可以使用标准流程通过python请求库下载文件,因为jenkinsapi使用请求。
假设self._server是jenkinsapi.jenkins.Jenkins.Jenkins类的一个实例。我们可以构建一个网址,以匹配我们期望通过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