python获取jenkins服务里的文件及备份

2 篇文章 0 订阅

 

需求是这样的 我们使用了jacoco统计应用的代码覆盖率,产生了一些报告,但是清理报告的时候,需要对本轮的报告

做一个备份,这个同样适用于类似的情形,比如一些重要的文件,目标是备份到jenkins所在的服务器上

如下图

比如我要获取或者说是下载右上角的文件,备份到下图中的当前jenkins job的工作空间里面

url 如下

http://jenkins-test.yourcompany.com/view/projectName/job/xxx-web-report/HTML_20Report/*zip*/HTML_20Report.zip

下图也是一个最终的效果

计划使用python脚本 集成到一个jenkins job里面

首先发现python 有库可以操作jenkins  ,Using Python-Jenkins

,https://python-jenkins.readthedocs.io/en/latest/examples.html

进一步发现不太合适 这个库主要是操作jenkins job 之类的api 没有涉及到下载之类

然后考虑直接使用http 获取文件,然后尝试发现jenkins 有basic-auth 验证

可以使用如下通过校验

# 用户名
 user_id = 'jiangfei'
 # 用户的token值(每个user有对应的token)
 api_token = 'yourtoken'
  
 auth = HTTPBasicAuth(user_id, api_token)
 res = requests.get(url=urlFile, auth=auth)

用户名和token 在jenkins这里获取

 

主体代码如下

# paramNum ==2时候是只有job名  ==3时候 最后一个参数是group name名字
paramNum = len(sys.argv)
print(paramNum)
jobName = sys.argv[1]

# 3 参数带group name
if paramNum == 3:
   groupName = sys.argv[2]

#  groupName为空
if paramNum == 2:
    urlFile = 'http://jenkins-test.你的jenkins域名.com/job/'+jobName+'/HTML_20Report/*zip*/HTML_20Report.zip'
elif paramNum == 3:
    urlFile = 'http://jenkins-test.你的jenkins域名.com/view/' + groupName + '/job/' + jobName + '/HTML_20Report/*zip*/HTML_20Report.zip'

# 用户名
user_id = 'jiangfei'
# 用户的token值(每个user有对应的token)
api_token = 'yourtoken'

auth = HTTPBasicAuth(user_id, api_token)
res = requests.get(url=urlFile, auth=auth)

nowTime = str(datetime.datetime.now()). replace(':', "").replace(' ', "-").replace('.', "")
print(nowTime)


# 文件获得后存放在自己工程在jenkins的工作空间里面
fileReportPath = "/data/test_jenkins/workspace/" + jobName
# 也可以放在jenkins服务的一个具体路径下面 比如
# fileReportPath = "/qa/reportHistory/" + jobName

if not os.path.exists(fileReportPath):
    os.makedirs(fileReportPath)

with open(fileReportPath + "/" + jobName + nowTime+".zip", "wb") as code:
    code.write(res.content)

大家可以根据自己情况做一些调整 这个例子还是带了一些业务代码。

完整代码参考我的github

https://github.com/albertflyer/GetJenkinsFile

 

 

参考:

https://www.jianshu.com/p/be1d2f19c9ed

https://hacpai.com/article/1484722904667

https://www.cnblogs.com/zjsupermanblog/archive/2017/07/26/7238422.html

 

Python获取Jenkins Job状态通常涉及到使用Jenkins提供的远程API接口。Jenkins提供了一个REST API,可以通过HTTP请求与之通信,从而获取关于Jenkins服务器、作业(jobs)、构建(builds)等的信息。以下是一个基本的步骤指南: 1. 确定Jenkins服务器的URL和凭证(如果需要认证)。 2. 使用`requests`库来发送HTTP请求。如果你还没有安装`requests`,可以使用`pip install requests`命令来安装。 3. 根据需要获取的Job状态,构建相应的API请求URL。例如,要获取特定Job的状态,可以使用如下URL格式:`http://<JENKINS_URL>/job/<JOB_NAME>/<BUILD_NUMBER>/api/json`,其中`<JENKINS_URL>`是你的Jenkins服务器地址,`<JOB_NAME>`是任务名称,`<BUILD_NUMBER>`是特定构建的编号。 4. 发送GET请求到构建好的URL。 5. 解析返回的JSON响应来获取Job的状态信息。 下面是一个使用Python获取Jenkins Job状态的示例代码: ```python import requests # Jenkins服务器地址和Job信息 jenkins_url = 'http://localhost:8080' job_name = 'MyJob' build_number = 'lastBuild' # 如果Jenkins配置了安全认证,则添加相应的认证信息 auth = ('username', 'password') # 替换为你的用户名和密码 # 构建API的URL url = f"{jenkins_url}/job/{job_name}/{build_number}/api/json" # 发送GET请求 response = requests.get(url, auth=auth) # 检查响应状态码 if response.status_code == 200: # 解析响应内容为JSON result = response.json() # 获取状态 status = result.get('result', 'Unknown status') print(f"Job {job_name} build {build_number} status: {status}") else: print(f"Error: Unable to get job status. Status code: {response.status_code}") ``` 请替换上述代码中的`<JENKINS_URL>`、`<JOB_NAME>`、`<BUILD_NUMBER>`以及认证信息为你的Jenkins实例实际值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值