【问题标题】:How do I retrieve last console output of a jenkins job using python-jenkins?如何使用 python-jenkins 检索 jenkins 作业的最后一个控制台输出?
【发布时间】:2019-06-20 04:58:21
【问题描述】:

我无法使用 python-jenkins 提取给定作业的 jenkins 控制台输出。我必须提取给定构建#的完整控制台输出。

这是我的詹金斯网址的样子:
http://jenkins.abc.xyz.io:8080/job/myapp-build/46/consoleFull 并且它有有效的输出。

根据https://python-jenkins.readthedocs.io/en/latest/api.html#jenkins.Jenkins.get_build_console_output

get_build_console_output(name, number)
Get build console text.

Parameters: 
name – Job name, str
number – Build number, int
Returns:    
Build console output, str

我试过了

import jenkins
server = jenkins.Jenkins('http://jenkins.abc.xyz.io:8080', username='foo', password='foo!')

jenkins_url = "http://jenkins.abc.xyz.io:8080"
user = server.get_whoami()
version = server.get_version()
print('Hello %s from Jenkins %s' % (user['fullName'], version))
#
name='/myapp-build'
number=46

print server.get_build_console_output(name, number)

但它中止说

Traceback (most recent call last):
  File "test_jenkins.py", line 20, in <module>
    print server.get_build_console_output(name, number)
  File "/home/myapp/jenkins_py/env/jenkins/local/lib/python2.7/site-packages/jenkins/__init__.py", line 1630, in get_build_console_output
    % (name, number))
jenkins.JenkinsException: job[/myapp-build] number[46] does not exist

预期结果将是控制台输出。

我错过了什么?

请帮助我使用 python 从 jenkins 中提取控制台输出。 有没有其他方法或库来完成它?

【问题讨论】:

    标签: python-2.7 jenkins jenkins-pipeline


    【解决方案1】:

    好的。我在凌晨 2 点 18 分感到非常愚蠢。 该脚本有效。

    只需删除作业名称前面的“/”即可。

    现在我可以检索完整的输出。

    server = jenkins.Jenkins('http://jenkins.abc.xyz.io:8080', username='foo', password='foo!')
    
    jenkins_url = "http://jenkins.abc.xyz.io:8080"
    user = server.get_whoami()
    version = server.get_version()
    print('Hello %s from Jenkins %s' % (user['fullName'], version))
    #
    name='myapp-build' #without the /
    number=46
    
    print server.get_build_console_output(name, number)
    

    【讨论】:

    • 有没有办法自动获取最后一个内部版本号,避免在代码中指定它?
    • @Corel 使用 python
      server = jenkins.Jenkins(Jenkins_url, username=jenkins_user, password=jenkins_pwd)
      lastJObnumber = server.get_job_info(jOBnAmE)[ 'lastBuild']['number']
    【解决方案2】:

    此代码将不断比较旧作业 == 当前作业编号。一旦当前工作完成。整个输出将在 console_output 中。

          def jenkins_wait():
                global BuildID, BuildStatus
                server = jenkins.Jenkins(Jenkins_url, username=jenkins_user, password=jenkins_pwd)
                time.sleep(5)
                while True:
                    temptime = datetime.now()
                    Job_time = temptime.strftime("%H:%M:%S")
                    print('Jenkins build ID :',(server.get_job_info(jOBnAmE)['lastBuild']['number'])," Time:", Job_time)
                    time.sleep(5)
                    processLoading() #Display processing bar.
                    if server.get_job_info(jOBnAmE)['lastCompletedBuild']['number'] == server.get_job_info(jOBnAmE)['lastBuild']['number']:
                        print("Last ID %s, Current ID %s"  % (server.get_job_info(jOBnAmE)['lastCompletedBuild']['number'], server.get_job_info(jOBnAmE)['lastBuild']['number']))
                        BuildID = server.get_job_info(jOBnAmE)['lastBuild']['number']
                        print (BuildID)
                        break
                time.sleep(25)
                print('Job execution has been completed.')
                console_output = server.get_build_console_output(jOBnAmE, server.get_job_info(jOBnAmE)['lastBuild']['number'])
                console_output = re.split('\r\n',console_output)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      相关资源
      最近更新 更多